Run Integration Tests #945
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | |
# SPDX-License-Identifier: MIT | |
name: Run Integration Tests | |
env: | |
PRIVATE_KEY: ${{ secrets.AWS_PRIVATE_KEY }} | |
TERRAFORM_AWS_ASSUME_ROLE: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE }} | |
TERRAFORM_AWS_ASSUME_ROLE_DURATION: 14400 # 4 hours | |
S3_INTEGRATION_BUCKET: ${{ vars.S3_INTEGRATION_BUCKET }} | |
KEY_NAME: ${{ secrets.KEY_NAME }} | |
CF_IAM_ROLE: ${{ secrets.CF_IAM_ROLE }} | |
CF_KEY_NAME: ${{ secrets.CF_KEY_NAME }} | |
ECR_INTEGRATION_TEST_REPO: "cwagent-integration-test" | |
CWA_GITHUB_TEST_REPO_NAME: "aws/amazon-cloudwatch-agent-test" | |
CWA_GITHUB_TEST_REPO_URL: "https://github.com/aws/amazon-cloudwatch-agent-test.git" | |
CWA_GITHUB_TEST_REPO_BRANCH: "MacOSEC2Test" | |
TERRAFORM_AWS_ASSUME_ROLE_ITAR: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE_ITAR }} | |
S3_INTEGRATION_BUCKET_ITAR: ${{ vars.S3_INTEGRATION_BUCKET_ITAR }} | |
TERRAFORM_AWS_ASSUME_ROLE_CN: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE_CN }} | |
S3_INTEGRATION_BUCKET_CN: ${{ vars.S3_INTEGRATION_BUCKET_CN }} | |
on: | |
push: | |
branches: | |
- main* | |
paths-ignore: | |
- '**/*.md' | |
- 'NOTICE' | |
- 'RELEASE_NOTES' | |
- 'THIRD-PARTY' | |
- 'LICENSE' | |
- '.github/**' | |
- '!.github/workflows/integration-test.yml' | |
workflow_dispatch: | |
inputs: | |
plugins: | |
description: 'Comma delimited list of plugins to test. Default is empty, and tests everything' | |
required: false | |
default: '' | |
type: string | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref_name }} | |
cancel-in-progress: true | |
jobs: | |
BuildAndUpload: | |
uses: ./.github/workflows/test-build.yml | |
secrets: inherit | |
permissions: | |
id-token: write | |
contents: read | |
with: | |
BucketKey: "integration-test/binary/${{ github.sha }}" | |
PackageBucketKey: "integration-test/packaging/${{ github.sha }}" | |
TerraformAWSAssumeRole: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE }} | |
Bucket: ${{ vars.S3_INTEGRATION_BUCKET }} | |
BuildAndUploadPackages: | |
uses: ./.github/workflows/test-build-packages.yml | |
needs: [BuildAndUpload] | |
secrets: inherit | |
permissions: | |
id-token: write | |
contents: read | |
with: | |
BucketKey: "integration-test/binary/${{ github.sha }}" | |
PackageBucketKey: "integration-test/packaging/${{ github.sha }}" | |
TerraformAWSAssumeRole: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE }} | |
Bucket: ${{ vars.S3_INTEGRATION_BUCKET }} | |
BuildDocker: | |
needs: [BuildAndUpload] | |
uses: ./.github/workflows/test-build-docker.yml | |
secrets: inherit | |
permissions: | |
id-token: write | |
contents: read | |
with: | |
ContainerRepositoryNameAndTag: "cwagent-integration-test:${{ github.sha }}" | |
BucketKey: "integration-test/binary/${{ github.sha }}" | |
PackageBucketKey: "integration-test/packaging/${{ github.sha }}" | |
BuildAndUploadITAR: | |
uses: ./.github/workflows/test-build.yml | |
secrets: inherit | |
permissions: | |
id-token: write | |
contents: read | |
with: | |
BucketKey: "integration-test/binary/${{ github.sha }}" | |
PackageBucketKey: "integration-test/packaging/${{ github.sha }}" | |
Region: "us-gov-east-1" | |
TerraformAWSAssumeRole: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE_ITAR }} | |
Bucket: ${{ vars.S3_INTEGRATION_BUCKET_ITAR }} | |
BuildAndUploadCN: | |
uses: ./.github/workflows/test-build.yml | |
secrets: inherit | |
permissions: | |
id-token: write | |
contents: read | |
with: | |
BucketKey: "integration-test/binary/${{ github.sha }}" | |
PackageBucketKey: "integration-test/packaging/${{ github.sha }}" | |
Region: "cn-north-1" | |
TerraformAWSAssumeRole: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE_CN }} | |
Bucket: ${{ vars.S3_INTEGRATION_BUCKET_CN }} | |
GenerateTestMatrix: | |
name: 'GenerateTestMatrix' | |
runs-on: ubuntu-latest | |
outputs: | |
ec2_gpu_matrix: ${{ steps.set-matrix.outputs.ec2_gpu_matrix }} | |
ec2_linux_matrix: ${{ steps.set-matrix.outputs.ec2_linux_matrix }} | |
ec2_windows_matrix: ${{ steps.set-matrix.outputs.ec2_windows_matrix }} | |
ec2_mac_matrix: ${{ steps.set-matrix.outputs.ec2_mac_matrix }} | |
ec2_performance_matrix: ${{steps.set-matrix.outputs.ec2_performance_matrix}} | |
ec2_windows_performance_matrix: ${{steps.set-matrix.outputs.ec2_windows_performance_matrix}} | |
ec2_stress_matrix: ${{steps.set-matrix.outputs.ec2_stress_matrix}} | |
ec2_windows_stress_matrix: ${{steps.set-matrix.outputs.ec2_windows_stress_matrix}} | |
ecs_ec2_launch_daemon_matrix: ${{ steps.set-matrix.outputs.ecs_ec2_launch_daemon_matrix }} | |
ecs_fargate_matrix: ${{ steps.set-matrix.outputs.ecs_fargate_matrix }} | |
eks_daemon_matrix: ${{ steps.set-matrix.outputs.eks_daemon_matrix }} | |
eks_deployment_matrix: ${{ steps.set-matrix.outputs.eks_deployment_matrix }} | |
ec2_linux_itar_matrix: ${{ steps.set-matrix.outputs.ec2_linux_itar_matrix }} | |
ec2_linux_china_matrix: ${{ steps.set-matrix.outputs.ec2_linux_china_matrix }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
repository: ${{env.CWA_GITHUB_TEST_REPO_NAME}} | |
ref: ${{env.CWA_GITHUB_TEST_REPO_BRANCH}} | |
- name: Set up Go 1.x | |
uses: actions/setup-go@v4 | |
with: | |
go-version: ~1.21.1 | |
- name: Generate matrix | |
id: set-matrix | |
run: | | |
go run --tags=generator generator/test_case_generator.go | |
echo "::set-output name=ec2_gpu_matrix::$(echo $(cat generator/resources/ec2_gpu_complete_test_matrix.json))" | |
echo "::set-output name=ec2_linux_matrix::$(echo $(cat generator/resources/ec2_linux_complete_test_matrix.json))" | |
echo "::set-output name=ec2_windows_matrix::$(echo $(cat generator/resources/ec2_windows_complete_test_matrix.json))" | |
echo "::set-output name=ec2_mac_matrix::$(echo $(cat generator/resources/ec2_mac_complete_test_matrix.json))" | |
echo "::set-output name=ec2_performance_matrix::$(echo $(cat generator/resources/ec2_performance_complete_test_matrix.json))" | |
echo "::set-output name=ec2_windows_performance_matrix::$(echo $(cat generator/resources/ec2_windows_performance_complete_test_matrix.json))" | |
echo "::set-output name=ec2_stress_matrix::$(echo $(cat generator/resources/ec2_stress_complete_test_matrix.json))" | |
echo "::set-output name=ec2_windows_stress_matrix::$(echo $(cat generator/resources/ec2_windows_stress_complete_test_matrix.json))" | |
echo "::set-output name=ecs_ec2_launch_daemon_matrix::$(echo $(cat generator/resources/ecs_ec2_daemon_complete_test_matrix.json))" | |
echo "::set-output name=ecs_fargate_matrix::$(echo $(cat generator/resources/ecs_fargate_complete_test_matrix.json))" | |
echo "::set-output name=eks_daemon_matrix::$(echo $(cat generator/resources/eks_daemon_complete_test_matrix.json))" | |
echo "::set-output name=eks_deployment_matrix::$(echo $(cat generator/resources/eks_deployment_complete_test_matrix.json))" | |
echo "::set-output name=ec2_linux_itar_matrix::$(echo $(cat generator/resources/ec2_linux_itar_complete_test_matrix.json))" | |
echo "::set-output name=ec2_linux_china_matrix::$(echo $(cat generator/resources/ec2_linux_china_complete_test_matrix.json))" | |
- name: Echo test plan matrix | |
run: | | |
echo "ec2_gpu_matrix: ${{ steps.set-matrix.outputs.ec2_gpu_matrix }}" | |
echo "ec2_linux_matrix: ${{ steps.set-matrix.outputs.ec2_linux_matrix }}" | |
echo "ec2_windows_matrix: ${{ steps.set-matrix.outputs.ec2_windows_matrix }}" | |
echo "ec2_mac_matrix: ${{ steps.set-matrix.outputs.ec2_mac_matrix }}" | |
echo "ec2_performance_matrix: ${{ steps.set-matrix.outputs.ec2_performance_matrix}}" | |
echo "ec2_windows_performance_matrix: ${{ steps.set-matrix.outputs.ec2_windows_performance_matrix}}" | |
echo "ec2_stress_matrix: ${{ steps.set-matrix.outputs.ec2_stress_matrix}}" | |
echo "ec2_windows_stress_matrix: ${{ steps.set-matrix.outputs.ec2_windows_stress_matrix}}" | |
echo "ecs_ec2_launch_daemon_matrix: ${{ steps.set-matrix.outputs.ecs_ec2_launch_daemon_matrix }}" | |
echo "ecs_fargate_matrix: ${{ steps.set-matrix.outputs.ecs_fargate_matrix }}" | |
echo "eks_daemon_matrix: ${{ steps.set-matrix.outputs.eks_daemon_matrix }}" | |
echo "eks_deployment_matrix: ${{ steps.set-matrix.outputs.eks_deployment_matrix }}" | |
echo "ec2_linux_itar_matrix: ${{ steps.set-matrix.outputs.ec2_linux_itar_matrix }}" | |
echo "ec2_linux_china_matrix: ${{ steps.set-matrix.outputs.ec2_linux_china_matrix }}" | |
EC2WinIntegrationTest: | |
needs: [BuildAndUpload, BuildAndUploadPackages, GenerateTestMatrix] | |
name: 'EC2WinIntegrationTest' | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
arrays: ${{ fromJson(needs.GenerateTestMatrix.outputs.ec2_windows_matrix) }} | |
permissions: | |
id-token: write | |
contents: read | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
repository: ${{env.CWA_GITHUB_TEST_REPO_NAME}} | |
ref: ${{env.CWA_GITHUB_TEST_REPO_BRANCH}} | |
- name: Configure AWS Credentials | |
uses: aws-actions/configure-aws-credentials@v2 | |
with: | |
role-to-assume: ${{ env.TERRAFORM_AWS_ASSUME_ROLE }} | |
aws-region: us-west-2 | |
role-duration-seconds: ${{ env.TERRAFORM_AWS_ASSUME_ROLE_DURATION }} | |
- name: Cache if success | |
id: ec2-win-integration-test | |
uses: actions/cache@v3 | |
with: | |
path: go.mod | |
key: ec2-win-integration-test-${{ github.sha }}-${{ matrix.arrays.os }}-${{ matrix.arrays.arc }}-${{ matrix.arrays.test_dir }} | |
- name: Echo Test Info | |
run: echo run on ec2 instance os ${{ matrix.arrays.os }} use ssm ${{ matrix.arrays.useSSM }} test ${{ matrix.arrays.test_dir }} | |
- name: Verify Terraform version | |
run: terraform --version | |
# nick-fields/retry@v2 starts at base dir | |
- name: Terraform apply | |
uses: nick-fields/retry@v2 | |
with: | |
max_attempts: 3 | |
timeout_minutes: 30 | |
retry_wait_seconds: 5 | |
command: | | |
if [ "${{ matrix.arrays.terraform_dir }}" != "" ]; then | |
cd "${{ matrix.arrays.terraform_dir }}" | |
else | |
cd terraform/ec2/win | |
fi | |
terraform init | |
if terraform apply --auto-approve \ | |
-var="ec2_instance_type=${{ matrix.arrays.instanceType }}" \ | |
-var="ssh_key_value=${PRIVATE_KEY}" -var="ssh_key_name=${KEY_NAME}" \ | |
-var="test_name=${{ matrix.arrays.os }}" \ | |
-var="cwa_github_sha=${GITHUB_SHA}" \ | |
-var="test_dir=${{ matrix.arrays.test_dir }}" \ | |
-var="ami=${{ matrix.arrays.ami }}" \ | |
-var="use_ssm=${{ matrix.arrays.useSSM }}" \ | |
-var="s3_bucket=${S3_INTEGRATION_BUCKET}" ; then | |
terraform destroy -auto-approve | |
else | |
terraform destroy -auto-approve && exit 1 | |
fi | |
#This is here just in case workflow cancel | |
- name: Terraform destroy | |
if: ${{ cancelled() || failure() }} | |
uses: nick-fields/retry@v2 | |
with: | |
max_attempts: 3 | |
timeout_minutes: 8 | |
retry_wait_seconds: 5 | |
command: | | |
if [ "${{ matrix.arrays.terraform_dir }}" != "" ]; then | |
cd "${{ matrix.arrays.terraform_dir }}" | |
else | |
cd terraform/ec2/win | |
fi | |
terraform destroy --auto-approve | |
EC2DarwinIntegrationTest: | |
needs: [BuildAndUpload, BuildAndUploadPackages, GenerateTestMatrix] | |
name: 'EC2DarwinIntegrationTest' | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
arrays: ${{ fromJson(needs.GenerateTestMatrix.outputs.ec2_mac_matrix) }} | |
permissions: | |
id-token: write | |
contents: read | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
repository: ${{env.CWA_GITHUB_TEST_REPO_NAME}} | |
ref: ${{env.CWA_GITHUB_TEST_REPO_BRANCH}} | |
- name: Configure AWS Credentials | |
uses: aws-actions/configure-aws-credentials@v2 | |
with: | |
role-to-assume: ${{ env.TERRAFORM_AWS_ASSUME_ROLE }} | |
aws-region: us-west-2 | |
role-duration-seconds: ${{ env.TERRAFORM_AWS_ASSUME_ROLE_DURATION }} | |
- name: Cache if success | |
id: ec2-mac-integration-test | |
uses: actions/cache@v3 | |
with: | |
path: go.mod | |
key: ec2-mac-integration-test-${{ github.sha }}-${{ matrix.arrays.os }}-${{ matrix.arrays.arc }}-${{ matrix.arrays.test_dir }} | |
- name: Echo OS | |
run: echo run on ec2 instance os ${{ matrix.arrays.os }} | |
- name: Verify Terraform version | |
run: terraform --version | |
# nick-fields/retry@v2 starts at base dir | |
- name: Terraform apply | |
uses: nick-fields/retry@v2 | |
with: | |
max_attempts: 1 | |
timeout_minutes: 30 | |
retry_wait_seconds: 5 | |
command: | | |
if [ "${{ matrix.arrays.terraform_dir }}" != "" ]; then | |
cd "${{ matrix.arrays.terraform_dir }}" | |
else | |
cd terraform/ec2/mac | |
fi | |
terraform init | |
if terraform apply --auto-approve \ | |
-var="ssh_key_value=${PRIVATE_KEY}" -var="ssh_key_name=${KEY_NAME}" \ | |
-var="arc=${{ matrix.arrays.arc }}" \ | |
-var="ec2_instance_type=${{ matrix.arrays.instanceType }}" \ | |
-var="cwa_github_sha=${GITHUB_SHA}" -var="ami=${{ matrix.arrays.ami }}" \ | |
-var="test_dir=${{ matrix.arrays.test_dir }}" \ | |
-var="license_manager_arn=${{ env.LICENSE_MANAGER_ARN }}" \ | |
-var="s3_bucket=${S3_INTEGRATION_BUCKET}" ; then | |
terraform destroy -auto-approve | |
else | |
terraform destroy -auto-approve && exit 1 | |
fi | |
#This is here just in case workflow cancel | |
- name: Terraform destroy | |
if: ${{ cancelled() || failure() }} | |
uses: nick-fields/retry@v2 | |
with: | |
max_attempts: 3 | |
timeout_minutes: 8 | |
retry_wait_seconds: 5 | |
command: | | |
if [ "${{ matrix.arrays.terraform_dir }}" != "" ]; then | |
cd "${{ matrix.arrays.terraform_dir }}" | |
else | |
cd terraform/ec2/mac | |
fi | |
terraform destroy --auto-approve | |