From 0280de11daea61567fb46147b730aa4c1ba7132a Mon Sep 17 00:00:00 2001 From: Geza Lore Date: Sun, 5 Oct 2025 07:44:49 +0100 Subject: [PATCH] CI: Adjust reusable-build workflow parameters Add an explicit 'sha' parameter to reusable-build, to define which commit to build. This will be needed for PR coverage jobs. Consequently use the 'archive' output from reusable-build to simplify retrieving the resulting artifact in dependent jobs. Also fetch full history in coverage builds. --- .github/workflows/build-test.yml | 10 +++++++++ .github/workflows/coverage.yml | 16 ++++++++------ .github/workflows/reusable-build.yml | 32 +++++++++++++++++++++------- .github/workflows/reusable-test.yml | 15 ++++++++----- 4 files changed, 53 insertions(+), 20 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index e4aa6f712..49906bb70 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -32,6 +32,7 @@ jobs: name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }} uses: ./.github/workflows/reusable-build.yml with: + sha: ${{ github.sha }} os: ${{ matrix.os }} os-name: linux cc: ${{ matrix.cc }} @@ -47,6 +48,7 @@ jobs: name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }} uses: ./.github/workflows/reusable-build.yml with: + sha: ${{ github.sha }} os: ${{ matrix.os }} os-name: linux cc: ${{ matrix.cc }} @@ -62,6 +64,7 @@ jobs: name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }} uses: ./.github/workflows/reusable-build.yml with: + sha: ${{ github.sha }} os: ${{ matrix.os }} os-name: linux cc: ${{ matrix.cc }} @@ -77,6 +80,7 @@ jobs: name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }} uses: ./.github/workflows/reusable-build.yml with: + sha: ${{ github.sha }} os: ${{ matrix.os }} os-name: linux cc: ${{ matrix.cc }} @@ -92,6 +96,7 @@ jobs: name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }} uses: ./.github/workflows/reusable-build.yml with: + sha: ${{ github.sha }} os: ${{ matrix.os }} os-name: osx cc: ${{ matrix.cc }} @@ -107,6 +112,7 @@ jobs: name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }} uses: ./.github/workflows/reusable-build.yml with: + sha: ${{ github.sha }} os: ${{ matrix.os }} os-name: osx cc: ${{ matrix.cc }} @@ -159,6 +165,7 @@ jobs: needs: build-2404-gcc uses: ./.github/workflows/reusable-test.yml with: + archive: ${{ needs.build-2404-gcc.outputs.archive }} os: ${{ matrix.os }} cc: ${{ matrix.cc }} reloc: ${{ matrix.reloc }} @@ -182,6 +189,7 @@ jobs: needs: build-2404-clang uses: ./.github/workflows/reusable-test.yml with: + archive: ${{ needs.build-2404-clang.outputs.archive }} os: ${{ matrix.os }} cc: ${{ matrix.cc }} reloc: ${{ matrix.reloc }} @@ -205,6 +213,7 @@ jobs: needs: build-2204-gcc uses: ./.github/workflows/reusable-test.yml with: + archive: ${{ needs.build-2204-gcc.outputs.archive }} os: ${{ matrix.os }} cc: ${{ matrix.cc }} reloc: ${{ matrix.reloc }} @@ -228,6 +237,7 @@ jobs: needs: build-2204-clang uses: ./.github/workflows/reusable-test.yml with: + archive: ${{ needs.build-2204-clang.outputs.archive }} os: ${{ matrix.os }} cc: ${{ matrix.cc }} reloc: ${{ matrix.reloc }} diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index eeb04e26c..b2a7029fc 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -20,6 +20,7 @@ jobs: if: ${{ github.event_name != 'schedule' || vars.ENABLE_SCHEDULED_JOBS == 'true' }} uses: ./.github/workflows/reusable-build.yml with: + sha: ${{ github.sha }} os: ubuntu-24.04 os-name: linux cc: gcc @@ -31,6 +32,7 @@ jobs: needs: build uses: ./.github/workflows/reusable-test.yml with: + archive: ${{ needs.build.outputs.archive }} os: ubuntu-24.04 cc: gcc reloc: 0 @@ -79,22 +81,22 @@ jobs: prepare-report: name: Prepare HTML report - needs: test + needs: [build, test] runs-on: ubuntu-24.04 - env: - VERILATOR_ARCHIVE: verilator-${{ github.sha }}-ubuntu-24.04-gcc.tar.gz steps: - name: Install dependencies run: sudo apt install lcov - - name: Download tar archive + - name: Download repository archive uses: actions/download-artifact@v5 with: - name: ${{ env.VERILATOR_ARCHIVE }} + name: ${{ needs.build.outputs.archive }} path: ${{ github.workspace }} - - name: Unpack tar archive - run: tar -x -z -f ${{ env.VERILATOR_ARCHIVE }} + - name: Unpack repository archive + run: | + tar -x -z -f ${{ needs.build.outputs.archive }} + ls -lsha - name: Download code coverage data uses: actions/download-artifact@v5 diff --git a/.github/workflows/reusable-build.yml b/.github/workflows/reusable-build.yml index 0bac983b6..9fcf16032 100644 --- a/.github/workflows/reusable-build.yml +++ b/.github/workflows/reusable-build.yml @@ -7,6 +7,10 @@ name: reusable-build on: workflow_call: inputs: + sha: + description: "Commit SHA to build" + required: true + type: string os: # e.g. ubuntu-24.04 required: true type: string @@ -22,6 +26,10 @@ on: dev-gcov: required: true type: number + outputs: + archive: + description: "Name of the built repository archive artifact" + value: ${{ jobs.build.outputs.archive }} env: CI_OS_NAME: ${{ inputs.os-name }} @@ -39,8 +47,10 @@ defaults: jobs: build: - runs-on: ${{ inputs.os }} name: Build + runs-on: ${{ inputs.os }} + outputs: + archive: ${{ steps.create-archive.outputs.archive }} env: CI_BUILD_STAGE_NAME: build CI_DEV_ASAN: ${{ inputs.dev-asan }} @@ -50,12 +60,13 @@ jobs: CXX: ${{ inputs.cc == 'clang' && 'clang++' || 'g++' }} CACHE_BASE_KEY: build-${{ inputs.os }}-${{ inputs.cc }} CCACHE_MAXSIZE: 1000M # Per build matrix entry (* 5 = 5000M in total) - VERILATOR_ARCHIVE: verilator-${{ github.sha }}-${{ inputs.os }}-${{ inputs.cc }}.tar.gz steps: - name: Checkout uses: actions/checkout@v5 with: path: repo + ref: ${{ inputs.sha }} + fetch-depth: ${{ inputs.dev-gcov && '0' || '1' }} # Coverage flow needs full history - name: Cache $CCACHE_DIR uses: actions/cache@v4 @@ -63,7 +74,7 @@ jobs: CACHE_KEY: ${{ env.CACHE_BASE_KEY }}-ccache with: path: ${{ env.CCACHE_DIR }} - key: ${{ env.CACHE_KEY }}-${{ github.sha }} + key: ${{ env.CACHE_KEY }}-${{ inputs.sha }} restore-keys: | ${{ env.CACHE_KEY }}- @@ -73,12 +84,17 @@ jobs: - name: Build run: ./ci/ci-script.bash - - name: Tar up repository + - name: Create repository archive + id: create-archive working-directory: ${{ github.workspace }} - run: tar --posix -c -z -f ${{ env.VERILATOR_ARCHIVE }} repo + run: | + # Name of the archive must be unique based on the build parameters + ARCHIVE=verilator-${{ inputs.sha }}-${{ inputs.os }}-${{ inputs.cc }}-${{ inputs.dev-asan }}-${{ inputs.dev-gcov }}.tar.gz + tar --posix -c -z -f $ARCHIVE repo + echo "archive=$ARCHIVE" >> "$GITHUB_OUTPUT" - - name: Upload tar archive + - name: Upload repository archive uses: actions/upload-artifact@v4 with: - path: ${{ github.workspace }}/${{ env.VERILATOR_ARCHIVE }} - name: ${{ env.VERILATOR_ARCHIVE }} + path: ${{ github.workspace }}/${{ steps.create-archive.outputs.archive }} + name: ${{ steps.create-archive.outputs.archive }} diff --git a/.github/workflows/reusable-test.yml b/.github/workflows/reusable-test.yml index 2832edc1b..79b49be91 100644 --- a/.github/workflows/reusable-test.yml +++ b/.github/workflows/reusable-test.yml @@ -7,6 +7,10 @@ name: reusable-test on: workflow_call: inputs: + archive: + description: "Name of the repository archive artifact from reusable-build" + required: true + type: string os: # e.g. ubuntu-24.04 required: true type: string @@ -49,18 +53,19 @@ jobs: CXX: ${{ inputs.cc == 'clang' && 'clang++' || 'g++' }} CACHE_BASE_KEY: test-${{ inputs.os }}-${{ inputs.cc }}-${{inputs.reloc }}-${{ inputs.suite }} CCACHE_MAXSIZE: 100M # Per build per suite (* 5 * 5 = 2500M in total) - VERILATOR_ARCHIVE: verilator-${{ github.sha }}-${{ inputs.os }}-${{ inputs.cc }}.tar.gz steps: - - name: Download tar archive + - name: Download repository archive uses: actions/download-artifact@v5 with: - name: ${{ env.VERILATOR_ARCHIVE }} + name: ${{ inputs.archive }} path: ${{ github.workspace }} - - name: Unpack tar archive + - name: Unpack repository archive working-directory: ${{ github.workspace }} - run: tar -x -z -f ${{ env.VERILATOR_ARCHIVE }} + run: | + tar -x -z -f ${{ inputs.archive }} + ls -lsha - name: Cache $CCACHE_DIR uses: actions/cache@v4