ci: does a skipped job report a commit status? #1
1 changed files with 92 additions and 0 deletions
92
.forgejo/workflows/skip-status-probe.yml
Normal file
92
.forgejo/workflows/skip-status-probe.yml
Normal file
|
|
@ -0,0 +1,92 @@
|
||||||
|
name: skip-status-probe
|
||||||
|
|
||||||
|
# Does a SKIPPED job report a commit status on this forge?
|
||||||
|
#
|
||||||
|
# open-standards gates expensive path-filtered workflows behind a `relevant`
|
||||||
|
# job: the dependent jobs carry `needs: relevant` + an `if:` on its output, so
|
||||||
|
# they skip when the change does not touch that standard. If a skipped job
|
||||||
|
# reports no status at all, every one of those contexts stays permanently
|
||||||
|
# pending and a branch-protection rule that requires them can never be
|
||||||
|
# satisfied — the PR becomes unmergeable. That is the question this answers,
|
||||||
|
# before the pattern is rolled out past the one workflow that has it.
|
||||||
|
#
|
||||||
|
# Four jobs, and the pairing is the point:
|
||||||
|
# gate-false -> dep-of-false expected SKIP
|
||||||
|
# gate-true -> dep-of-true expected RUN
|
||||||
|
# The second pair is the control. Without it, a skip proves nothing: if
|
||||||
|
# `needs.*.outputs.*` were simply broken here and always read empty, EVERY
|
||||||
|
# dependent would skip and the result would look identical. dep-of-true
|
||||||
|
# running is what makes dep-of-false's skip mean "the output said false".
|
||||||
|
#
|
||||||
|
# dep-literal isolates a job skipped by its own `if: false`, with no `needs`
|
||||||
|
# edge, to tell the two skip causes apart.
|
||||||
|
#
|
||||||
|
# dep-matrix mirrors the real shape under test: wai-pack's dependent jobs are
|
||||||
|
# a three-platform matrix, so the required contexts are per-leg. Whether each
|
||||||
|
# leg reports its own status, or the matrix collapses to one row, decides how
|
||||||
|
# many contexts go missing.
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- ".forgejo/workflows/skip-status-probe.yml"
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- ".forgejo/workflows/skip-status-probe.yml"
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: skip-status-probe-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
gate-false:
|
||||||
|
name: probe · gate emitting false
|
||||||
|
runs-on: linux
|
||||||
|
outputs:
|
||||||
|
touched: ${{ steps.decide.outputs.touched }}
|
||||||
|
steps:
|
||||||
|
- id: decide
|
||||||
|
run: echo "touched=false" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
gate-true:
|
||||||
|
name: probe · gate emitting true
|
||||||
|
runs-on: linux
|
||||||
|
outputs:
|
||||||
|
touched: ${{ steps.decide.outputs.touched }}
|
||||||
|
steps:
|
||||||
|
- id: decide
|
||||||
|
run: echo "touched=true" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
dep-of-false:
|
||||||
|
name: probe · dependent of a false gate (expect SKIP)
|
||||||
|
needs: gate-false
|
||||||
|
if: needs.gate-false.outputs.touched == 'true'
|
||||||
|
runs-on: linux
|
||||||
|
steps:
|
||||||
|
- run: echo "FAIL - this job should not have run"
|
||||||
|
|
||||||
|
dep-of-true:
|
||||||
|
name: probe · dependent of a true gate (expect RUN)
|
||||||
|
needs: gate-true
|
||||||
|
if: needs.gate-true.outputs.touched == 'true'
|
||||||
|
runs-on: linux
|
||||||
|
steps:
|
||||||
|
- run: echo "control - outputs propagate, so a skip above means false"
|
||||||
|
|
||||||
|
dep-literal:
|
||||||
|
name: probe · skipped by its own literal false (expect SKIP)
|
||||||
|
runs-on: linux
|
||||||
|
if: false
|
||||||
|
steps:
|
||||||
|
- run: echo "FAIL - this job should not have run"
|
||||||
|
|
||||||
|
dep-matrix:
|
||||||
|
name: probe · skipped matrix leg ${{ matrix.leg }} (expect SKIP)
|
||||||
|
needs: gate-false
|
||||||
|
if: needs.gate-false.outputs.touched == 'true'
|
||||||
|
runs-on: linux
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
leg: [alpha, beta, gamma]
|
||||||
|
steps:
|
||||||
|
- run: echo "FAIL - this job should not have run"
|
||||||
Loading…
Reference in a new issue