feat(ci): Add pre-compiled test binaries for EC2 integration tests #4784
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 Build | |
| on: | |
| workflow_dispatch: | |
| pull_request: | |
| branches: | |
| - main* | |
| - feature* | |
| types: | |
| - opened | |
| - synchronize | |
| - reopened | |
| - ready_for_review | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref_name }} | |
| cancel-in-progress: true | |
| jobs: | |
| changes: | |
| name: Check changes | |
| runs-on: ubuntu-latest | |
| outputs: | |
| build: ${{ steps.filter.outputs.build }} | |
| lint: ${{ steps.filter.outputs.lint }} | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - uses: dorny/paths-filter@v2 | |
| id: filter | |
| with: | |
| list-files: shell | |
| filters: .github/config/file-filters.yml | |
| - name: List all updated files | |
| run: | | |
| for file in ${{ steps.filter.outputs.build_files }}; do | |
| echo "$file" | |
| done | |
| lint: | |
| needs: [changes] | |
| name: Check lint | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Set up Go 1.x | |
| if: needs.changes.outputs.lint == 'true' | |
| uses: actions/setup-go@v4 | |
| with: | |
| go-version: ~1.25 | |
| cache: false | |
| - name: Check out code | |
| if: needs.changes.outputs.lint == 'true' | |
| uses: actions/checkout@v3 | |
| with: | |
| fetch-depth: 0 | |
| - name: Check format | |
| if: needs.changes.outputs.lint == 'true' | |
| run: | | |
| make fmt fmt-sh | |
| if [ ! -z "`git status --porcelain`" ]; then | |
| echo "make fmt changed files" | |
| git status | |
| exit 1 | |
| fi | |
| - name: Check license and imports | |
| if: needs.changes.outputs.lint == 'true' | |
| run: make lint | |
| build: | |
| needs: [lint, changes] | |
| name: Build ${{ matrix.os }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, windows-2022, windows-latest, macos-15] | |
| include: | |
| - os: ubuntu-latest | |
| family: linux | |
| cache-path: | | |
| ~/.cache/go-build | |
| ~/go/pkg/mod | |
| - os: macos-15 | |
| family: darwin | |
| cache-path: | | |
| ~/Library/Caches/go-build | |
| ~/go/pkg/mod | |
| - os: windows-2022 | |
| family: windows | |
| cache-path: | | |
| ~\AppData\Local\go-build | |
| ~\go\pkg\mod | |
| - os: windows-latest | |
| family: windows | |
| cache-path: | | |
| ~\AppData\Local\go-build | |
| ~\go\pkg\mod | |
| steps: | |
| - name: Set up Go 1.x | |
| if: needs.changes.outputs.build == 'true' | |
| uses: actions/setup-go@v4 | |
| with: | |
| go-version: ~1.25 | |
| cache: false | |
| - name: Check out code | |
| if: needs.changes.outputs.build == 'true' | |
| uses: actions/checkout@v3 | |
| - name: Free up disk space | |
| if: needs.changes.outputs.build == 'true' && matrix.family == 'linux' | |
| run: .github/scripts/free-disk-space.sh | |
| - name: Cache binaries | |
| id: cached_binaries | |
| if: needs.changes.outputs.build == 'true' | |
| uses: actions/cache@v3 | |
| with: | |
| key: "cached-binaries-${{ matrix.os }}-${{ github.sha }}" | |
| path: go.mod | |
| - name: Cache build output | |
| if: steps.cached_binaries.outputs.cache-hit != 'true' && needs.changes.outputs.build == 'true' | |
| uses: actions/cache@v3 | |
| with: | |
| path: ${{ matrix.cache-path }} | |
| key: v1-go-pkg-mod-${{ matrix.os }}-${{ hashFiles('**/go.sum') }} | |
| - name: Install make | |
| if: matrix.family == 'windows' && steps.cached_binaries.outputs.cache-hit != 'true' && needs.changes.outputs.build == 'true' | |
| run: choco install make | |
| - name: Unit Test | |
| if: steps.cached_binaries.outputs.cache-hit != 'true' && needs.changes.outputs.build == 'true' | |
| run: make test | |
| - name: Build | |
| if: steps.cached_binaries.outputs.cache-hit != 'true' && needs.changes.outputs.build == 'true' | |
| run: make amazon-cloudwatch-agent-${{ matrix.family }} | |
| test-data-race: | |
| needs: [lint, changes] | |
| name: Test data race | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Set up Go 1.x | |
| if: needs.changes.outputs.build == 'true' | |
| uses: actions/setup-go@v4 | |
| with: | |
| go-version: ~1.25 | |
| cache: false | |
| - name: Check out code | |
| if: needs.changes.outputs.build == 'true' | |
| uses: actions/checkout@v3 | |
| - name: Test data race | |
| if: needs.changes.outputs.build == 'true' | |
| run: make test-data-race | |
| verify-all: | |
| name: Verify All PR Build Jobs | |
| needs: [ changes, lint, build, test-data-race ] | |
| runs-on: ubuntu-latest | |
| if: always() | |
| steps: | |
| - name: Check Job Status | |
| run: | | |
| # Convert needs context to JSON and process with jq | |
| needs_json='${{ toJSON(needs) }}' | |
| 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!" |