Skip to content

Commit e7e39ba

Browse files
committed
ci(rc18): promote compatibility run to a release gate
1 parent 700c36d commit e7e39ba

1 file changed

Lines changed: 14 additions & 22 deletions

File tree

.github/workflows/ci.yml

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
# ├─ integration full pytest suite against the regular emulator (7.16)
1111
# ├─ integration-btc bitcoin-only product boundary against a
1212
# │ -DKK_BITCOIN_ONLY=ON emulator (7.16)
13-
# └─ integration-rc18 the same suite against RC18/7.15.0, NON-BLOCKING --
14-
# reports the release-target result without gating
13+
# └─ integration-rc18 the same suite against RC18/7.15.0, a blocking
14+
# release-target compatibility gate
1515

1616
name: CI
1717

@@ -328,25 +328,19 @@ jobs:
328328
runs-on: ubuntu-latest
329329
timeout-minutes: 15
330330

331-
# NON-BLOCKING BY DESIGN, and that is a statement about evidence, not a
332-
# way to hide failures.
333-
#
334331
# The other two integration jobs pin firmware 7.16.0, because parts of
335332
# this suite need firmware that postdates RC18: variant_getName()
336333
# returning "EmulatorBTC", and the Ironwood known-answer vectors. A green
337334
# run there says nothing about the release this PR targets.
338335
#
339336
# This job closes that gap by actually running the suite against
340-
# RC18/7.15.0. It does not gate the merge yet: the 7.15-vs-7.16 delta has
341-
# never been measured at current head, so a first red run is information,
342-
# not a verdict. Promote to blocking (delete continue-on-error) once it is
343-
# green, and treat a regression from green as a real failure.
337+
# RC18/7.15.0. The current-head suite is green against that exact image, so
338+
# this is a blocking release gate: a regression from green is a real
339+
# failure.
344340
#
345341
# Tests that need post-RC18 firmware skip themselves here rather than
346-
# failing: the bitcoin-only module gates on requires_bitcoinOnly(), which
347-
# keys on a variant name RC18 does not report, and the Ironwood tests gate
348-
# on 7.16.0 explicitly.
349-
continue-on-error: true
342+
# failing. Their gates are tied to the implementation history, so RC18 is
343+
# not credited with behavior it never shipped.
350344

351345
steps:
352346
- uses: actions/checkout@v4
@@ -461,9 +455,9 @@ jobs:
461455
if: always()
462456
run: |
463457
XML="keepkey-firmware/deps/python-keepkey/tests/junit-rc18.xml"
464-
echo "## 🔑 python-keepkey — RC18 / 7.15.0 (non-blocking)" >> "$GITHUB_STEP_SUMMARY"
458+
echo "## 🔑 python-keepkey — RC18 / 7.15.0" >> "$GITHUB_STEP_SUMMARY"
465459
echo "" >> "$GITHUB_STEP_SUMMARY"
466-
echo "Release-target result. Does not gate the merge; see the job comment." >> "$GITHUB_STEP_SUMMARY"
460+
echo "Blocking release-target compatibility gate." >> "$GITHUB_STEP_SUMMARY"
467461
echo "" >> "$GITHUB_STEP_SUMMARY"
468462
if [ ! -f "$XML" ]; then
469463
echo "❌ **No test results** — the suite crashed before completion." >> "$GITHUB_STEP_SUMMARY"
@@ -483,9 +477,9 @@ jobs:
483477
echo "| 💥 Errors | $ERRORS |" >> "$GITHUB_STEP_SUMMARY"
484478
echo "" >> "$GITHUB_STEP_SUMMARY"
485479
if [ "$FAILED" -eq 0 ] && [ "$ERRORS" -eq 0 ]; then
486-
echo "RC18 is green at current head — this job can be promoted to blocking by deleting \`continue-on-error\`." >> "$GITHUB_STEP_SUMMARY"
480+
echo "RC18 is green at current head." >> "$GITHUB_STEP_SUMMARY"
487481
else
488-
echo "RC18 differs from 7.16 at current head. Each failure is either a real RC18 regression or a test that needs a version gate." >> "$GITHUB_STEP_SUMMARY"
482+
echo "RC18 compatibility failed at current head." >> "$GITHUB_STEP_SUMMARY"
489483
fi
490484
fi
491485
@@ -499,18 +493,16 @@ jobs:
499493
fail_on_failure: false
500494

501495
# `pytest | tee` makes the run step exit with tee's status, so without
502-
# this the job reports success no matter what RC18 did -- non-blocking
503-
# would have meant invisible. This step fails on a real pytest failure;
504-
# continue-on-error above keeps that from gating the workflow, so the
505-
# job shows RED while the run stays green.
496+
# this the job reports success no matter what RC18 did. This step makes a
497+
# real pytest failure fail the blocking release gate.
506498
- name: Report the RC18 result
507499
if: always()
508500
run: |
509501
STATUS=$(cat keepkey-firmware/deps/python-keepkey/tests/status-rc18 2>/dev/null || echo "1")
510502
if [ "$STATUS" = "0" ]; then
511503
echo "RC18 suite passed."
512504
else
513-
echo "::warning::RC18 (7.15.0) differs from the pinned 7.16 build. This job is non-blocking; see the summary."
505+
echo "::error::RC18 (7.15.0) compatibility failed; see the summary."
514506
exit 1
515507
fi
516508

0 commit comments

Comments
 (0)