feat(clean): reap leaked AMP integ-test workspaces #3055
Workflow file for this run
This file contains hidden or 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: PR Test | |
| permissions: | |
| id-token: write | |
| contents: read | |
| env: | |
| TERRAFORM_AWS_ASSUME_ROLE: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE }} | |
| TERRAFORM_AWS_ASSUME_ROLE_DURATION: 14400 # 4 hours | |
| 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: "main" | |
| KEY_NAME: ${{ secrets.KEY_NAME }} | |
| PRIVATE_KEY: ${{ secrets.AWS_PRIVATE_KEY }} | |
| S3_INTEGRATION_BUCKET: ${{ vars.S3_INTEGRATION_BUCKET }} | |
| on: | |
| workflow_dispatch: | |
| pull_request: | |
| branches: | |
| - main* | |
| - feature* | |
| - feature/** | |
| types: | |
| - opened | |
| - synchronize | |
| - reopened | |
| - ready_for_review | |
| - labeled | |
| - unlabeled | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref_name }} | |
| cancel-in-progress: true | |
| jobs: | |
| CheckLabel: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| should_run: ${{ steps.check.outputs.has_label }} | |
| steps: | |
| - id: check | |
| env: | |
| PR_FORK: ${{ github.event.pull_request.head.repo.fork }} | |
| HAS_LABEL: ${{ contains(github.event.pull_request.labels.*.name, 'ready for testing') }} | |
| run: | | |
| # Fork PRs never receive secrets or id-token permissions, so the | |
| # integration tests cannot run even if the label is added. Maintainers | |
| # must push the branch to this repo to run them. | |
| if [[ "$PR_FORK" == "true" ]]; then | |
| echo "Fork PR - integration tests cannot run (no access to secrets)." | |
| echo "has_label=false" >> $GITHUB_OUTPUT | |
| elif [[ "$HAS_LABEL" == "true" ]]; then | |
| echo "has_label=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "has_label=false" >> $GITHUB_OUTPUT | |
| fi | |
| BuildAndUpload: | |
| needs: [ CheckLabel ] | |
| if: needs.CheckLabel.outputs.should_run == 'true' | |
| 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 }} | |
| OutputEnvVariables: | |
| name: 'OutputEnvVariables' | |
| needs: [ CheckLabel ] | |
| if: needs.CheckLabel.outputs.should_run == 'true' | |
| runs-on: ubuntu-latest | |
| outputs: | |
| CWA_GITHUB_TEST_REPO_NAME: ${{ steps.set-outputs.outputs.CWA_GITHUB_TEST_REPO_NAME }} | |
| CWA_GITHUB_TEST_REPO_URL: ${{ steps.set-outputs.outputs.CWA_GITHUB_TEST_REPO_URL }} | |
| CWA_GITHUB_TEST_REPO_BRANCH: ${{ steps.set-outputs.outputs.CWA_GITHUB_TEST_REPO_BRANCH }} | |
| steps: | |
| - name: SetOutputs | |
| id: set-outputs | |
| run: | | |
| CWA_GITHUB_TEST_REPO_BRANCH=${{ env.CWA_GITHUB_TEST_REPO_BRANCH }} | |
| echo "CWA_GITHUB_TEST_REPO_NAME=${{ env.CWA_GITHUB_TEST_REPO_NAME }}" >> "$GITHUB_OUTPUT" | |
| echo "CWA_GITHUB_TEST_REPO_URL=${{ env.CWA_GITHUB_TEST_REPO_URL }}" >> "$GITHUB_OUTPUT" | |
| echo "CWA_GITHUB_TEST_REPO_BRANCH=${CWA_GITHUB_TEST_REPO_BRANCH:-${{ env.CWA_GITHUB_TEST_REPO_BRANCH }}}" >> "$GITHUB_OUTPUT" | |
| - name: Echo test variables | |
| env: | |
| GITHUB_SHA_VAL: ${{ github.sha }} | |
| OUT_REPO_NAME: ${{ steps.set-outputs.outputs.CWA_GITHUB_TEST_REPO_NAME }} | |
| OUT_REPO_URL: ${{ steps.set-outputs.outputs.CWA_GITHUB_TEST_REPO_URL }} | |
| OUT_REPO_BRANCH: ${{ steps.set-outputs.outputs.CWA_GITHUB_TEST_REPO_BRANCH }} | |
| run: | | |
| echo "build_id: $GITHUB_SHA_VAL" | |
| echo "CWA_GITHUB_TEST_REPO_NAME: $OUT_REPO_NAME" | |
| echo "CWA_GITHUB_TEST_REPO_URL: $OUT_REPO_URL" | |
| echo "CWA_GITHUB_TEST_REPO_BRANCH: $OUT_REPO_BRANCH" | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| with: | |
| repository: ${{ steps.set-outputs.outputs.CWA_GITHUB_TEST_REPO_NAME }} | |
| ref: ${{ steps.set-outputs.outputs.CWA_GITHUB_TEST_REPO_BRANCH }} | |
| - name: Set up Go 1.x | |
| uses: actions/setup-go@7b8cf10d4e4a01d4992d18a89f4d7dc5a3e6d6f4 # v4.3.0 | |
| with: | |
| go-version: ~1.26.4 | |
| StartLocalStack: | |
| name: 'StartLocalStack' | |
| needs: [ CheckLabel, OutputEnvVariables ] | |
| if: needs.CheckLabel.outputs.should_run == 'true' | |
| uses: ./.github/workflows/start-localstack.yml | |
| secrets: inherit | |
| permissions: | |
| id-token: write | |
| contents: read | |
| with: | |
| region: us-west-2 | |
| test_repo_name: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_NAME }} | |
| test_repo_branch: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_BRANCH }} | |
| terraform_assume_role: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE }} | |
| test_repo_url: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_URL }} | |
| github_sha: ${{ github.sha }} | |
| s3_integration_bucket: ${{ vars.S3_INTEGRATION_BUCKET }} | |
| GenerateTestMatrix: | |
| name: 'GenerateTestMatrix' | |
| needs: [ CheckLabel, OutputEnvVariables ] | |
| if: needs.CheckLabel.outputs.should_run == 'true' | |
| runs-on: ubuntu-latest | |
| outputs: | |
| ec2_linux_matrix_0: ${{ steps.paginate-matrix.outputs.ec2_linux_matrix_0 }} | |
| ec2_linux_matrix_1: ${{ steps.paginate-matrix.outputs.ec2_linux_matrix_1 }} | |
| ec2_linux_matrix_2: ${{ steps.paginate-matrix.outputs.ec2_linux_matrix_2 }} | |
| ec2_linux_matrix_3: ${{ steps.paginate-matrix.outputs.ec2_linux_matrix_3 }} | |
| ec2_linux_matrix_4: ${{ steps.paginate-matrix.outputs.ec2_linux_matrix_4 }} | |
| ec2_linux_matrix_page_count: ${{ steps.paginate-matrix.outputs.ec2_linux_matrix_page_count }} | |
| ec2_selinux_matrix: ${{ steps.set-matrix.outputs.ec2_selinux_matrix }} | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| 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@7b8cf10d4e4a01d4992d18a89f4d7dc5a3e6d6f4 # v4.3.0 | |
| with: | |
| go-version: ~1.26.4 | |
| - name: Install jq | |
| run: sudo apt-get install -y jq | |
| - name: Generate matrix | |
| id: set-matrix | |
| run: | | |
| go run --tags=generator generator/test_case_generator.go | |
| # Convert the output to valid JSON and filter out metric_value_benchmark tests | |
| jq -c '[.[] | select(.test_dir != "./test/metric_value_benchmark")]' generator/resources/ec2_linux_complete_test_matrix.json > filtered_matrix.json | |
| # Escape the JSON for GitHub Actions | |
| MATRIX=$(jq -c -r '@json' filtered_matrix.json) | |
| echo "ec2_linux_matrix=$MATRIX" >> $GITHUB_OUTPUT | |
| jq -c '[.[] | select(.test_dir != "./test/metric_value_benchmark")]' generator/resources/ec2_selinux_complete_test_matrix.json > filtered_matrix_selinux.json | |
| # Escape the JSON for GitHub Actions | |
| MATRIX=$(jq -c -r '@json' filtered_matrix_selinux.json) | |
| echo "ec2_selinux_matrix=$MATRIX" >> $GITHUB_OUTPUT | |
| - name: Paginate ec2_linux_matrix | |
| id: paginate-matrix | |
| run: | | |
| # GitHub Actions matrix limit is 256 jobs per workflow run. | |
| # Use 200 per page for headroom. Up to 5 pages supported (1000 tests). | |
| # Read the filtered matrix from the file written by the "Generate matrix" | |
| # step instead of a step-level env var: the matrix can exceed the | |
| # kernel's ARG_MAX (~2 MiB) on execve, which would prevent bash from | |
| # starting for this step. | |
| PAGE_SIZE=200 | |
| FULL_MATRIX=$(cat filtered_matrix.json) | |
| TOTAL=$(echo "$FULL_MATRIX" | jq 'length') | |
| PAGE_COUNT=$(( (TOTAL + PAGE_SIZE - 1) / PAGE_SIZE )) | |
| if [ "$PAGE_COUNT" -gt 5 ]; then | |
| echo "::error::ec2_linux_matrix has $TOTAL entries requiring $PAGE_COUNT pages, but only 5 are supported. Add more static page slots." | |
| exit 1 | |
| fi | |
| echo "ec2_linux total=$TOTAL pages=$PAGE_COUNT" | |
| echo "ec2_linux_matrix_page_count=${PAGE_COUNT}" >> "$GITHUB_OUTPUT" | |
| for (( i=0; i<PAGE_COUNT; i++ )); do | |
| START=$(( i * PAGE_SIZE )) | |
| PAGE=$(echo "$FULL_MATRIX" | jq -c ".[$START:$START+$PAGE_SIZE]" | jq -c -r '@json') | |
| echo "ec2_linux_matrix_${i}=${PAGE}" >> "$GITHUB_OUTPUT" | |
| done | |
| - name: Echo test plan matrix | |
| env: | |
| EC2_LINUX_PAGE_COUNT: ${{ steps.paginate-matrix.outputs.ec2_linux_matrix_page_count }} | |
| EC2_SELINUX_MATRIX: ${{ steps.set-matrix.outputs.ec2_selinux_matrix }} | |
| run: | | |
| echo "ec2_linux_matrix pages: $EC2_LINUX_PAGE_COUNT" | |
| echo "ec2_selinux_matrix: $EC2_SELINUX_MATRIX" | |
| EC2LinuxIntegrationTest-0: | |
| name: 'EC2LinuxTests-0' | |
| needs: [ CheckLabel, GenerateTestMatrix, OutputEnvVariables, StartLocalStack, BuildAndUpload ] | |
| if: needs.CheckLabel.outputs.should_run == 'true' | |
| uses: ./.github/workflows/ec2-integration-test.yml | |
| permissions: | |
| id-token: write | |
| contents: read | |
| with: | |
| build_id: ${{ github.sha }} | |
| test_dir: terraform/ec2/linux | |
| job_id: ec2-linux-integration-test-0 | |
| test_props: ${{ needs.GenerateTestMatrix.outputs.ec2_linux_matrix_0 }} | |
| test_repo_name: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_NAME }} | |
| test_repo_url: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_URL }} | |
| test_repo_branch: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_BRANCH }} | |
| localstack_host: ${{ needs.StartLocalStack.outputs.local_stack_host_name }} | |
| region: us-west-2 | |
| terraform_assume_role: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE }} | |
| s3_integration_bucket: ${{ vars.S3_INTEGRATION_BUCKET }} | |
| is_selinux_test: false | |
| secrets: inherit | |
| EC2LinuxIntegrationTest-1: | |
| name: 'EC2LinuxTests-1' | |
| needs: [ CheckLabel, GenerateTestMatrix, OutputEnvVariables, StartLocalStack, BuildAndUpload ] | |
| if: ${{ needs.CheckLabel.outputs.should_run == 'true' && needs.GenerateTestMatrix.outputs.ec2_linux_matrix_page_count > 1 }} | |
| uses: ./.github/workflows/ec2-integration-test.yml | |
| permissions: | |
| id-token: write | |
| contents: read | |
| with: | |
| build_id: ${{ github.sha }} | |
| test_dir: terraform/ec2/linux | |
| job_id: ec2-linux-integration-test-1 | |
| test_props: ${{ needs.GenerateTestMatrix.outputs.ec2_linux_matrix_1 }} | |
| test_repo_name: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_NAME }} | |
| test_repo_url: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_URL }} | |
| test_repo_branch: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_BRANCH }} | |
| localstack_host: ${{ needs.StartLocalStack.outputs.local_stack_host_name }} | |
| region: us-west-2 | |
| terraform_assume_role: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE }} | |
| s3_integration_bucket: ${{ vars.S3_INTEGRATION_BUCKET }} | |
| is_selinux_test: false | |
| secrets: inherit | |
| EC2LinuxIntegrationTest-2: | |
| name: 'EC2LinuxTests-2' | |
| needs: [ CheckLabel, GenerateTestMatrix, OutputEnvVariables, StartLocalStack, BuildAndUpload ] | |
| if: ${{ needs.CheckLabel.outputs.should_run == 'true' && needs.GenerateTestMatrix.outputs.ec2_linux_matrix_page_count > 2 }} | |
| uses: ./.github/workflows/ec2-integration-test.yml | |
| permissions: | |
| id-token: write | |
| contents: read | |
| with: | |
| build_id: ${{ github.sha }} | |
| test_dir: terraform/ec2/linux | |
| job_id: ec2-linux-integration-test-2 | |
| test_props: ${{ needs.GenerateTestMatrix.outputs.ec2_linux_matrix_2 }} | |
| test_repo_name: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_NAME }} | |
| test_repo_url: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_URL }} | |
| test_repo_branch: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_BRANCH }} | |
| localstack_host: ${{ needs.StartLocalStack.outputs.local_stack_host_name }} | |
| region: us-west-2 | |
| terraform_assume_role: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE }} | |
| s3_integration_bucket: ${{ vars.S3_INTEGRATION_BUCKET }} | |
| is_selinux_test: false | |
| secrets: inherit | |
| EC2LinuxIntegrationTest-3: | |
| name: 'EC2LinuxTests-3' | |
| needs: [ CheckLabel, GenerateTestMatrix, OutputEnvVariables, StartLocalStack, BuildAndUpload ] | |
| if: ${{ needs.CheckLabel.outputs.should_run == 'true' && needs.GenerateTestMatrix.outputs.ec2_linux_matrix_page_count > 3 }} | |
| uses: ./.github/workflows/ec2-integration-test.yml | |
| permissions: | |
| id-token: write | |
| contents: read | |
| with: | |
| build_id: ${{ github.sha }} | |
| test_dir: terraform/ec2/linux | |
| job_id: ec2-linux-integration-test-3 | |
| test_props: ${{ needs.GenerateTestMatrix.outputs.ec2_linux_matrix_3 }} | |
| test_repo_name: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_NAME }} | |
| test_repo_url: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_URL }} | |
| test_repo_branch: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_BRANCH }} | |
| localstack_host: ${{ needs.StartLocalStack.outputs.local_stack_host_name }} | |
| region: us-west-2 | |
| terraform_assume_role: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE }} | |
| s3_integration_bucket: ${{ vars.S3_INTEGRATION_BUCKET }} | |
| is_selinux_test: false | |
| secrets: inherit | |
| EC2LinuxIntegrationTest-4: | |
| name: 'EC2LinuxTests-4' | |
| needs: [ CheckLabel, GenerateTestMatrix, OutputEnvVariables, StartLocalStack, BuildAndUpload ] | |
| if: ${{ needs.CheckLabel.outputs.should_run == 'true' && needs.GenerateTestMatrix.outputs.ec2_linux_matrix_page_count > 4 }} | |
| uses: ./.github/workflows/ec2-integration-test.yml | |
| permissions: | |
| id-token: write | |
| contents: read | |
| with: | |
| build_id: ${{ github.sha }} | |
| test_dir: terraform/ec2/linux | |
| job_id: ec2-linux-integration-test-4 | |
| test_props: ${{ needs.GenerateTestMatrix.outputs.ec2_linux_matrix_4 }} | |
| test_repo_name: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_NAME }} | |
| test_repo_url: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_URL }} | |
| test_repo_branch: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_BRANCH }} | |
| localstack_host: ${{ needs.StartLocalStack.outputs.local_stack_host_name }} | |
| region: us-west-2 | |
| terraform_assume_role: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE }} | |
| s3_integration_bucket: ${{ vars.S3_INTEGRATION_BUCKET }} | |
| is_selinux_test: false | |
| secrets: inherit | |
| EC2SELinuxIntegrationTest: | |
| name: 'EC2SELinuxTests' | |
| needs: [ CheckLabel, GenerateTestMatrix, OutputEnvVariables, StartLocalStack, BuildAndUpload ] | |
| if: needs.CheckLabel.outputs.should_run == 'true' | |
| uses: ./.github/workflows/ec2-integration-test.yml | |
| permissions: | |
| id-token: write | |
| contents: read | |
| with: | |
| build_id: ${{ github.sha }} | |
| test_dir: terraform/ec2/linux | |
| job_id: ec2-linux-integration-test | |
| test_props: ${{ needs.GenerateTestMatrix.outputs.ec2_selinux_matrix }} | |
| test_repo_name: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_NAME }} | |
| test_repo_url: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_URL }} | |
| test_repo_branch: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_BRANCH }} | |
| localstack_host: ${{ needs.StartLocalStack.outputs.local_stack_host_name }} | |
| region: us-west-2 | |
| terraform_assume_role: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE }} | |
| s3_integration_bucket: ${{ vars.S3_INTEGRATION_BUCKET }} | |
| is_selinux_test: true | |
| secrets: inherit | |
| StopLocalStack: | |
| name: 'StopLocalStack' | |
| needs: [ CheckLabel, StartLocalStack, EC2LinuxIntegrationTest-0, EC2LinuxIntegrationTest-1, EC2LinuxIntegrationTest-2, EC2LinuxIntegrationTest-3, EC2LinuxIntegrationTest-4, OutputEnvVariables ] | |
| if: ${{ always() && needs.StartLocalStack.result == 'success' && needs.CheckLabel.outputs.should_run == 'true'}} | |
| uses: ./.github/workflows/stop-localstack.yml | |
| secrets: inherit | |
| permissions: | |
| id-token: write | |
| contents: read | |
| with: | |
| region: us-west-2 | |
| test_repo_name: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_NAME }} | |
| test_repo_branch: ${{ needs.OutputEnvVariables.outputs.CWA_GITHUB_TEST_REPO_BRANCH }} | |
| terraform_assume_role: ${{ vars.TERRAFORM_AWS_ASSUME_ROLE }} | |
| github_sha: ${{ github.sha }} | |
| s3_integration_bucket: ${{ vars.S3_INTEGRATION_BUCKET }} | |
| IntegrationTestGate: | |
| name: Check ready for testing label | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check for ready for testing label | |
| env: | |
| PR_FORK: ${{ github.event.pull_request.head.repo.fork }} | |
| PR_DRAFT: ${{ github.event.pull_request.draft }} | |
| HAS_SKIP_TESTING: ${{ contains(github.event.pull_request.labels.*.name, 'skip testing') }} | |
| HAS_READY_FOR_TESTING: ${{ contains(github.event.pull_request.labels.*.name, 'ready for testing') }} | |
| run: | | |
| if [[ "$PR_FORK" == "true" ]]; then | |
| echo "Fork PR - integration tests skipped (no access to secrets). Push branch to this repo to run them." | |
| exit 0 | |
| fi | |
| if [[ "$PR_DRAFT" == "true" ]]; then | |
| echo "Draft PR - skipping label check." | |
| exit 0 | |
| fi | |
| if [[ "$HAS_SKIP_TESTING" == "true" ]]; then | |
| echo "'skip testing' label found - bypassing integration test requirement." | |
| exit 0 | |
| fi | |
| if [[ "$HAS_READY_FOR_TESTING" != "true" ]]; then | |
| echo "Missing 'ready for testing' label. Please add before merging." | |
| exit 1 | |
| fi | |
| echo "'ready for testing' label found!" | |
| verify-all: | |
| name: Verify All PR Test Jobs | |
| needs: [IntegrationTestGate, CheckLabel, BuildAndUpload, OutputEnvVariables, StartLocalStack, | |
| GenerateTestMatrix, EC2LinuxIntegrationTest-0, EC2LinuxIntegrationTest-1, | |
| EC2LinuxIntegrationTest-2, EC2LinuxIntegrationTest-3, EC2LinuxIntegrationTest-4, | |
| EC2SELinuxIntegrationTest, StopLocalStack] | |
| runs-on: ubuntu-latest | |
| if: always() | |
| steps: | |
| - name: Check Job Status | |
| env: | |
| NEEDS_JSON: ${{ toJSON(needs) }} | |
| run: | | |
| failed_jobs=() | |
| successful_jobs=() | |
| # Loop through all jobs in needs context | |
| for job in $(echo "$NEEDS_JSON" | jq -r 'keys[]'); do | |
| result=$(echo "$NEEDS_JSON" | jq -r ".[\"$job\"].result") | |
| if [[ "$result" == "failure" ]]; then | |
| failed_jobs+=("$job") | |
| elif [[ "$result" == "success" ]]; then | |
| successful_jobs+=("$job") | |
| fi | |
| done | |
| echo "Successfully validated jobs:" | |
| printf '%s\n' "${successful_jobs[@]}" | |
| if [ ${#failed_jobs[@]} -ne 0 ]; then | |
| echo -e "\nFailed jobs:" | |
| printf '%s\n' "${failed_jobs[@]}" | |
| exit 1 | |
| fi | |
| echo -e "\nAll required jobs completed without failures!" |