You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ci: fix Check job status to detect skipped results (fixes#2208) (#2210)
* ci: replace 'cancelled||failure' aggregator with CCCL-pattern check_result
Fixes#2208. The previous `Check job status` body only treated a dep's
`result == 'cancelled' || == 'failure'` as failure, letting `'skipped'`
slip through silently. When a `build-*` job fails, the dependent
`test-*` job is set to `'skipped'` by default needs-failure
propagation, and the aggregator passes -- exactly the case demonstrated
by #2209.
Adopt CCCL's `check_result` pattern: explicit `expected="success"` per
dependency, with `expected="skipped"` for legitimate `[doc-only]` skips,
and an early short-circuit for `[no-ci]`. Now any deviation from the
expected status (including `'skipped'` from a failed upstream) fails
the aggregator.
Reference: NVIDIA/cccl ci-workflow-pull-request.yml L463-L526.
* [demo] Re-inject env-vars exit 7 to validate gating-check fix
Mirrors the #2209 reproducer on this branch's new aggregator. Expected
outcome:
- All Build * matrix entries fail at the env-vars build step.
- Downstream Test * jobs are skipped (cascaded needs-failure).
- Check job status now reports failure -- the symmetric, post-fix
counterpart to #2209 (where Check job status reported success despite
the same set of failures).
DO NOT MERGE while this commit is present. Remove before merge.
Refs #2208, #2209.
* Revert "[demo] Re-inject env-vars exit 7 to validate gating-check fix"
This reverts commit 811388c.
Copy file name to clipboardExpand all lines: .github/workflows/ci.yml
+37-47Lines changed: 37 additions & 47 deletions
Original file line number
Diff line number
Diff line change
@@ -432,52 +432,42 @@ jobs:
432
432
steps:
433
433
- name: Exit
434
434
run: |
435
-
# if any dependencies were cancelled or failed, that's a failure
436
-
#
437
-
# see https://docs.github.com/en/actions/reference/workflows-and-actions/expressions#always
438
-
# and https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
439
-
# for why this cannot be encoded in the job-level `if:` field
440
-
#
441
-
# TL; DR: `$REASONS`
442
-
#
443
-
# The intersection of skipped-as-success and required status checks
444
-
# creates a scenario where if you DON'T `always()` run this job, the
445
-
# status check UI will block merging and if you DO `always()` run and
446
-
# a dependency is _cancelled_ (due to a critical failure, which is
447
-
# somehow not considered a failure ¯\_(ツ)_/¯) then the critically
448
-
# failing job(s) will timeout causing a cancellation here and the
449
-
# build to succeed which we don't want (originally this was just
450
-
# 'exit 0')
451
-
#
452
-
# Note: When [doc-only] is in PR title, test jobs are intentionally
453
-
# skipped and should not cause failure.
454
-
#
455
-
# detect-changes gates whether heavy test matrices run at all; if it
456
-
# does not succeed, downstream test jobs are skipped rather than
457
-
# failed, which would otherwise go unnoticed here. Require its
458
-
# success explicitly so a broken gating step cannot masquerade as a
0 commit comments