diff --git a/.github/workflows/rtlmeter.yml b/.github/workflows/rtlmeter.yml index e5d632b9f..8390c28af 100644 --- a/.github/workflows/rtlmeter.yml +++ b/.github/workflows/rtlmeter.yml @@ -26,6 +26,9 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.event_name != 'schedule' }} +env: + RUN_TAGS: gcc clang gcc-hier + jobs: start: name: Start @@ -235,18 +238,19 @@ jobs: name: Combine results needs: [run-gcc, run-clang, run-gcc-hier] # Skip if cancelled. - # On PRs, run if something succeded and nothign failed. - # On non-PRs, run if anything succeded or failed (so partial results are still publided). + # On PRs, run if something succeeded and nothing failed. + # On non-PRs, run if anything succeeded or failed (so partial results are still published). if: >- ${{ !cancelled() && ( (github.event_name == 'pull_request' && (contains(needs.*.result, 'success') && !contains(needs.*.result, 'failure'))) || (github.event_name != 'pull_request' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure'))) )}} runs-on: ubuntu-24.04 - strategy: - fail-fast: false - matrix: - tag: [gcc, clang, gcc-hier] + env: + GH_TOKEN: ${{ github.token }} + # 'gh' resolves the repo from git otherwise, but this job has no checkout + # of this repo at the workspace root + GH_REPO: ${{ github.repository }} steps: - name: Checkout RTLMeter uses: actions/checkout@v6 @@ -259,20 +263,24 @@ jobs: run: make venv - name: Download all results - uses: actions/download-artifact@v8 - with: - pattern: rtlmeter-${{ matrix.tag }}-results-* - path: all-results-${{ matrix.tag }} - merge-multiple: true + run: | + for tag in $RUN_TAGS; do + mkdir artifacts all-results-$tag + gh run download ${{ github.run_id }} --pattern "rtlmeter-$tag-results-*" --dir artifacts + mv $(find artifacts -name "*.json") all-results-$tag/ + rm -rf artifacts + done - name: Combine results working-directory: rtlmeter run: | - ./rtlmeter collate ../all-results-${{ matrix.tag }}/*.json > ../all-results-${{ matrix.tag }}.json + for tag in $RUN_TAGS; do + ./rtlmeter collate ../all-results-$tag/*.json > ../all-results-$tag.json + done - name: Upload combined results uses: actions/upload-artifact@v7 with: - path: all-results-${{ matrix.tag }}.json - name: all-results-${{ matrix.tag }} + path: all-results-*.json + name: all-results overwrite: true retention-days: 30 @@ -280,22 +288,26 @@ jobs: # 'build-*-old' jobs run and the run jobs produce '*-reference-*' artifacts. - name: Download reference results if: ${{ github.event_name == 'pull_request' }} - uses: actions/download-artifact@v8 - with: - pattern: rtlmeter-${{ matrix.tag }}-reference-* - path: all-reference-${{ matrix.tag }} - merge-multiple: true + run: | + for tag in $RUN_TAGS; do + mkdir artifacts all-reference-$tag + gh run download ${{ github.run_id }} --pattern "rtlmeter-$tag-reference-*" --dir artifacts + mv $(find artifacts -name "*.json") all-reference-$tag/ + rm -rf artifacts + done - name: Combine reference results if: ${{ github.event_name == 'pull_request' }} working-directory: rtlmeter run: | - ./rtlmeter collate ../all-reference-${{ matrix.tag }}/*.json > ../all-reference-${{ matrix.tag }}.json + for tag in $RUN_TAGS; do + ./rtlmeter collate ../all-reference-$tag/*.json > ../all-reference-$tag.json + done - name: Upload reference results if: ${{ github.event_name == 'pull_request' }} uses: actions/upload-artifact@v7 with: - path: all-reference-${{ matrix.tag }}.json - name: all-reference-${{ matrix.tag }} + path: all-reference-*.json + name: all-reference overwrite: true retention-days: 30 @@ -313,9 +325,8 @@ jobs: - name: Download combined results uses: actions/download-artifact@v8 with: - pattern: all-results-* + name: all-results path: results - merge-multiple: true - name: Upload published results uses: actions/upload-artifact@v7 with: @@ -359,7 +370,7 @@ jobs: prepare-pr-results: name: Prepare Pull Request results needs: combine-results - if: ${{ github.event_name == 'pull_request' && github.repository == 'verilator/verilator' && contains(needs.*.result, 'success') && !cancelled() }} + if: ${{ github.event_name == 'pull_request' && github.repository == 'verilator/verilator' && needs.combine-results.result == 'success' }} runs-on: ubuntu-24.04 permissions: actions: read @@ -387,7 +398,7 @@ jobs: ln -s ../rtlmeter rtlmeter gh repo set-default ${{ github.repository }} # Compare to last successful scheduled run - ci/ci-rtlmeter-report.bash ${{ github.run_id }} ${{ github.sha }} gcc clang gcc-hier + ci/ci-rtlmeter-report.bash ${{ github.run_id }} ${{ github.sha }} $RUN_TAGS # Create the report artifact mkdir ../report-artifact mv rtlmeter-report/report ../report-artifact/ diff --git a/ci/ci-rtlmeter-report.bash b/ci/ci-rtlmeter-report.bash index 29380d472..8e0b8b47c 100755 --- a/ci/ci-rtlmeter-report.bash +++ b/ci/ci-rtlmeter-report.bash @@ -4,7 +4,7 @@ # SPDX-FileCopyrightText: 2026 Wilson Snyder # SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 -# This scipt builds the content of the response comment posten on PRs +# This script builds the content of the response comment posted on PRs # at the end of RTLMeter runs. # Developer note: You should be able to run this script in your local checkout @@ -31,27 +31,15 @@ mkdir rtlmeter-report pushd rtlmeter-report &> /dev/null TMP_DIR=$(readlink -f .) -# Artifacts to download -DOWNLOAD_NEW_ARTIFACTS="" -DOWNLOAD_REF_ARTIFACTS="" -for r in $RUNS; do - DOWNLOAD_NEW_ARTIFACTS="$DOWNLOAD_NEW_ARTIFACTS --name all-results-$r" - DOWNLOAD_REF_ARTIFACTS="$DOWNLOAD_REF_ARTIFACTS --name all-reference-$r" -done - -# Download reference artifacts -mkdir ref -REF_DIR=$(readlink -f ref) -gh run download ${RUN_ID} $DOWNLOAD_REF_ARTIFACTS --dir $REF_DIR -mv $REF_DIR/*/*.json $REF_DIR/ -find $REF_DIR -mindepth 1 -type d -delete - -# Download new version artifacts -mkdir new +# Download the combined results. 'combine-results' uploads a single artifact +# for each version, holding the per-tag JSON files (e.g. all-results-gcc.json): +# - 'all-results' for the new version +# - 'all-reference' for the old reference version +mkdir new ref NEW_DIR=$(readlink -f new) -gh run download ${RUN_ID} $DOWNLOAD_NEW_ARTIFACTS --dir $NEW_DIR -mv $NEW_DIR/*/*.json $NEW_DIR/ -find $NEW_DIR -mindepth 1 -type d -delete +REF_DIR=$(readlink -f ref) +gh run download ${RUN_ID} --name all-results --dir $NEW_DIR +gh run download ${RUN_ID} --name all-reference --dir $REF_DIR # Get Some metadata about the runs RUN_URL=$(gh run view $RUN_ID --json url --jq ".url")