version: 1.0.{build} image: - Ubuntu2004 configuration: - BuildIntegTesting - LocalZipTerraformBuildIntegTesting - LocalZipTerraformBuildInContainerIntegTesting - S3ZipTerraformBuildIntegTesting - S3ZipTerraformBuildInContainerIntegTesting - OtherTerraformBuildIntegTesting - DeployIntegTesting - PackageIntegTesting - DeleteIntegTesting - SyncIntegTesting - LocalIntegTesting - EndToEndTesting # other Integration testing, Dev, regression and smoke testing - OtherTesting environment: AWS_DEFAULT_REGION: us-east-1 SAM_CLI_DEV: 1 NODE_VERSION: "14.17.6" AWS_S3: 'AWS_S3_TESTING' AWS_ECR: 'AWS_ECR_TESTING' CARGO_LAMBDA_VERSION: "v0.17.1" PYTHON_ARCH: '64' NOSE_PARAMETERIZED_NO_WARN: 1 APPVEYOR_CONSOLE_DISABLE_PTY: false APPVEYOR_DETAILED_SHELL_LOGGING: true matrix: - PYTHON_HOME: "$HOME/venv3.7/bin" PYTHON_VERSION: '3.7' - PYTHON_HOME: "$HOME/venv3.8/bin" PYTHON_VERSION: '3.8' - PYTHON_HOME: "$HOME/venv3.11/bin" PYTHON_VERSION: '3.11' install: # AppVeyor's apt-get cache might be outdated, and the package could potentially be 404. - sh: "sudo apt-get update --allow-releaseinfo-change" - sh: "gvm use go1.19" - sh: "echo $PATH" - sh: "ls /usr/" # install latest maven which is compatible with jdk17 - sh: "sudo apt-get -y remove maven" - sh: "wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.zip -P /tmp" - sh: "sudo unzip -d /opt/mvn /tmp/apache-maven-*.zip" - sh: "PATH=/opt/mvn/apache-maven-3.8.8/bin:$PATH" - sh: "JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64" - sh: "PATH=$JAVA_HOME/bin:$PATH" - sh: "javac -version" - sh: "java -version" - sh: "mvn --version" - sh: "source ${HOME}/venv${PYTHON_VERSION}/bin/activate" - sh: "rvm use 2.7.2" - sh: "docker info" - sh: "docker version" - sh: "nvm install ${NODE_VERSION}" - sh: "npm install npm@7.24.2 -g" - sh: "npm -v" # Install latest gradle - sh: "sudo apt-get -y remove gradle" - sh: "wget https://services.gradle.org/distributions/gradle-7.3.1-bin.zip -P /tmp" - sh: "sudo unzip -d /opt/gradle /tmp/gradle-*.zip" - sh: "PATH=/opt/gradle/gradle-7.3.1/bin:$PATH" # Install AWS CLI - sh: "virtualenv aws_cli" - sh: "./aws_cli/bin/python -m pip install awscli" - sh: "PATH=$(echo $PWD'/aws_cli/bin'):$PATH" - sh: "PATH=$PATH:$HOME/venv3.7/bin:$HOME/venv3.8/bin:$HOME/venv3.9/bin:$HOME/venv3.10/bin" # update ca-certificates which causes failures with newest golang library - sh: "sudo apt-get install --reinstall ca-certificates" # get testing env vars - sh: "sudo apt install -y jq" # install Terraform - sh: "sudo apt update --allow-releaseinfo-change" - sh: "TER_VER=`curl -s https://api.github.com/repos/hashicorp/terraform/releases/latest | grep tag_name | cut -d: -f2 | tr -d \\\"\\,\\v | awk '{$1=$1};1'`" - sh: "wget https://releases.hashicorp.com/terraform/${TER_VER}/terraform_${TER_VER}_linux_amd64.zip -P /tmp" - sh: "sudo unzip -d /opt/terraform /tmp/terraform_${TER_VER}_linux_amd64.zip" - sh: "sudo mv /opt/terraform/terraform /usr/local/bin/" - sh: "terraform -version" # install Rust - sh: "curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused -fsSL https://sh.rustup.rs | sh -s -- --default-toolchain none -y > /dev/null 2>&1" - sh: "source $HOME/.cargo/env" - sh: "rustup toolchain install stable --profile minimal --no-self-update" - sh: "rustup default stable" - sh: "rustup target add x86_64-unknown-linux-gnu --toolchain stable" - sh: "rustup target add aarch64-unknown-linux-gnu --toolchain stable" - sh: "pip install cargo-lambda==$CARGO_LAMBDA_VERSION" - sh: "rustc -V" - sh: "cargo -V" - sh: "cargo lambda -V" - sh: "python3.9 -m venv .venv_env_vars" - sh: ".venv_env_vars/bin/pip install boto3" - sh: "test_env_var=$(.venv_env_vars/bin/python tests/get_testing_resources.py)" - sh: ' if [ $? -ne 0 ]; then echo "get_testing_resources failed. Failed to acquire credentials or test resources."; false; fi ' - sh: 'export CI_ACCESS_ROLE_AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID' - sh: 'export CI_ACCESS_ROLE_AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY' - sh: 'export CI_ACCESS_ROLE_AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN' - sh: 'export AWS_ACCESS_KEY_ID=$(echo "$test_env_var" | jq -j ".accessKeyID")' - sh: 'export AWS_SECRET_ACCESS_KEY=$(echo "$test_env_var" | jq -j ".secretAccessKey")' - sh: 'export AWS_SESSION_TOKEN=$(echo "$test_env_var" | jq -j ".sessionToken")' - sh: 'export TASK_TOKEN=$(echo "$test_env_var" | jq -j ".taskToken")' - sh: 'export AWS_S3_TESTING=$(echo "$test_env_var" | jq -j ".TestBucketName")' - sh: 'export AWS_ECR_TESTING=$(echo "$test_env_var" | jq -j ".TestECRURI")' - sh: 'export AWS_KMS_KEY=$(echo "$test_env_var" | jq -j ".TestKMSKeyArn")' - sh: 'export AWS_SIGNING_PROFILE_NAME=$(echo "$test_env_var" | jq -j ".TestSigningProfileName")' - sh: 'export AWS_SIGNING_PROFILE_VERSION_ARN=$(echo "$test_env_var" | jq -j ".TestSigningProfileARN")' # required for RIE with arm64 in linux - sh: " if [[ -n $BY_CANARY ]] && [[ -n $DOCKER_USER ]] && [[ -n $DOCKER_PASS ]]; then echo Logging in Docker Hub; echo $DOCKER_PASS | docker login --username $DOCKER_USER --password-stdin registry-1.docker.io; fi" - sh: " if [[ -n $BY_CANARY ]] && [[ -n $DOCKER_USER ]] && [[ -n $DOCKER_PASS ]]; then echo Logging in Docker Hub; echo $DOCKER_PASS | docker login --username $DOCKER_USER --password-stdin; fi" - sh: "docker run --rm --privileged multiarch/qemu-user-static --reset -p yes" # Runs only in Linux, logging Public ECR when running canary and cred is available - sh: " if [[ -n $BY_CANARY ]]; then echo Logging in Public ECR; aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws; fi" build_script: - "python -c \"import sys; print(sys.executable)\"" - "make init" # Final clean up no matter success or failure on_finish: # Upload test reports as artifacts - sh: find "$APPVEYOR_BUILD_FOLDER" -type f -name 'TEST_REPORT-*.json' -print0 | xargs -0 -I '{}' appveyor PushArtifact '{}' - sh: > AWS_ACCESS_KEY_ID=$TEST_REPORT_S3_BUCKET_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$TEST_REPORT_S3_BUCKET_SECRET_ACCESS_KEY AWS_SESSION_TOKEN=$TEST_REPORT_S3_BUCKET_SESSION_TOKEN aws s3 cp "$APPVEYOR_BUILD_FOLDER" "s3://$TEST_REPORT_S3_BUCKET_NAME/appveyor/$APPVEYOR_PROJECT_SLUG/$APPVEYOR_BUILD_ID/$APPVEYOR_JOB_ID/" --recursive --exclude "*" --include "TEST_REPORT-*.json" --region us-west-2 # notify task success - sh: 'export AWS_ACCESS_KEY_ID=$CI_ACCESS_ROLE_AWS_ACCESS_KEY_ID' - sh: 'export AWS_SECRET_ACCESS_KEY=$CI_ACCESS_ROLE_AWS_SECRET_ACCESS_KEY' - sh: 'export AWS_SESSION_TOKEN=$CI_ACCESS_ROLE_AWS_SESSION_TOKEN' - sh: 'aws stepfunctions send-task-success --task-token "$TASK_TOKEN" --task-output "{}" --region us-west-2' for: # Integ testing build - matrix: only: - configuration: BuildIntegTesting test_script: - sh: "pytest -vv tests/integration/buildcmd --ignore=tests/integration/buildcmd/test_build_terraform_applications.py --ignore=tests/integration/buildcmd/test_build_terraform_applications_other_cases.py --json-report --json-report-file=TEST_REPORT-integration-buildcmd.json" # Set JAVA_HOME to java11 - sh: "JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" - sh: "pytest -vv tests/integration/buildcmd/test_build_cmd.py -k test_building_java11_in_process --json-report --json-report-file=TEST_REPORT-integration-buildcmd-java11.json" # Local ZIP Terraform Build integ testing - matrix: only: - configuration: LocalZipTerraformBuildIntegTesting test_script: - sh: "pytest -vv -n 4 tests/integration/buildcmd/test_build_terraform_applications.py::TestBuildTerraformApplicationsWithZipBasedLambdaFunctionAndLocalBackend_0 --json-report --json-report-file=TEST_REPORT-integration-buildcmd.json" # Local ZIP Terraform Build In Container integ testing - matrix: only: - configuration: LocalZipTerraformBuildInContainerIntegTesting test_script: - sh: "pytest -vv -n 4 tests/integration/buildcmd/test_build_terraform_applications.py::TestBuildTerraformApplicationsWithZipBasedLambdaFunctionAndLocalBackend_1 --json-report --json-report-file=TEST_REPORT-integration-buildcmd.json" # S3 ZIP Terraform Build integ testing - matrix: only: - configuration: S3ZipTerraformBuildIntegTesting test_script: - sh: "pytest -vv -n 4 tests/integration/buildcmd/test_build_terraform_applications.py::TestBuildTerraformApplicationsWithZipBasedLambdaFunctionAndS3Backend_0 --json-report --json-report-file=TEST_REPORT-integration-buildcmd.json" # S3 ZIP Terraform Build In Container integ testing - matrix: only: - configuration: S3ZipTerraformBuildInContainerIntegTesting test_script: - sh: "pytest -vv -n 4 tests/integration/buildcmd/test_build_terraform_applications.py::TestBuildTerraformApplicationsWithZipBasedLambdaFunctionAndS3Backend_1 --json-report --json-report-file=TEST_REPORT-integration-buildcmd.json" # Other Terraform Build In Container integ testing - matrix: only: - configuration: OtherTerraformBuildIntegTesting test_script: - sh: "pytest -vv -n 4 tests/integration/buildcmd/test_build_terraform_applications_other_cases.py --json-report --json-report-file=TEST_REPORT-integration-buildcmd.json" # Integ testing deploy - matrix: only: - configuration: DeployIntegTesting test_script: - sh: "pytest -vv tests/integration/deploy -n 4 --reruns 4 --dist=loadgroup --json-report --json-report-file=TEST_REPORT-integration-deploy.json" # Integ testing package - matrix: only: - configuration: PackageIntegTesting test_script: - sh: "pytest -vv tests/integration/package -n 4 --reruns 4 --json-report --json-report-file=TEST_REPORT-integration-package.json" # Integ testing delete - matrix: only: - configuration: DeleteIntegTesting test_script: - sh: "pytest -vv tests/integration/delete -n 4 --reruns 4 --json-report --json-report-file=TEST_REPORT-integration-delete.json" # Integ testing sync - matrix: only: - configuration: SyncIntegTesting test_script: - sh: "pytest -vv tests/integration/sync -n 3 --reruns 3 --dist loadscope --json-report --json-report-file=TEST_REPORT-integration-sync.json" # Integ testing local - matrix: only: - configuration: LocalIntegTesting test_script: - sh: "pytest -vv tests/integration/local --json-report --json-report-file=TEST_REPORT-integration-local.json" # End-to-end testing - matrix: only: - configuration: EndToEndTesting test_script: - sh: "pytest -vv -n 4 --reruns 5 --dist loadscope tests/end_to_end --json-report --json-report-file=TEST_REPORT-end-to-end.json" # Other testing - matrix: only: - configuration: OtherTesting test_script: - sh: "pytest -vv -n 4 --reruns 4 --dist loadgroup tests/integration --ignore=tests/integration/buildcmd --ignore=tests/integration/delete --ignore=tests/integration/deploy --ignore=tests/integration/package --ignore=tests/integration/sync --ignore=tests/integration/local --json-report --json-report-file=TEST_REPORT-integration-others.json" - sh: "pytest -vv tests/regression --json-report --json-report-file=TEST_REPORT-regression.json"