Python Unit Test Results #359
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
| name: Python Unit Test Results | |
| on: | |
| # zizmor: ignore[dangerous-triggers] - runs in base-branch context and only consumes artifacts uploaded by Python-Unit; never checks out PR code (see note below) | |
| workflow_run: | |
| workflows: ["Python-Unit"] | |
| types: [completed] | |
| # This workflow publishes a check run annotating failing Python unit tests | |
| # inline on the PR diff, using JUnit XML uploaded by the Python-Unit workflow. | |
| # It uses the workflow_run trigger so that it always runs in the base-branch | |
| # context and can safely be granted write permissions, even for PRs from | |
| # forks or Dependabot. | |
| # | |
| # IMPORTANT: This workflow must NEVER check out code from the PR branch. All | |
| # data comes from artifacts uploaded by the Python-Unit workflow. | |
| permissions: | |
| contents: read | |
| checks: write | |
| issues: read | |
| actions: read | |
| jobs: | |
| report: | |
| runs-on: ubuntu-26.04 | |
| timeout-minutes: 10 | |
| if: > | |
| github.event.workflow_run.conclusion == 'success' || | |
| github.event.workflow_run.conclusion == 'failure' | |
| steps: | |
| # Fails soft (continue-on-error) because the source unit-tests job is | |
| # itself gated on change detection: a docs-only PR skips it entirely, | |
| # so there is nothing to download or report on. | |
| - name: Download JUnit results | |
| id: download | |
| continue-on-error: true | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 | |
| with: | |
| # merge-multiple is intentionally omitted: each matrix leg's | |
| # artifact (junit-results-current, junit-results-next) uses the | |
| # same XML filenames, so merging them into one directory would let | |
| # one Python version's results overwrite the other's. Downloading | |
| # into per-artifact subdirectories keeps both, and the glob below | |
| # is recursive so it still picks up every XML file. | |
| pattern: "junit-results-*" | |
| path: artifacts | |
| run-id: ${{ github.event.workflow_run.id }} | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Download event file | |
| id: download-event | |
| if: steps.download.outcome == 'success' | |
| continue-on-error: true | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 | |
| with: | |
| name: "Event File" | |
| path: event | |
| run-id: ${{ github.event.workflow_run.id }} | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Publish test results | |
| if: steps.download.outcome == 'success' && steps.download-event.outcome == 'success' | |
| uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2.24.0 | |
| with: | |
| commit: ${{ github.event.workflow_run.head_sha }} | |
| event_file: event/event.json | |
| event_name: ${{ github.event.workflow_run.event }} | |
| files: "artifacts/**/*.xml" | |
| check_name: "Python Unit Test Results" | |
| comment_mode: "off" |