fix(ci): keep a diagnostics failure from failing bundle smoke

The macOS x64 dmg chat in run 35629258153 passed. The job went red
only when actions/upload-artifact got a 403 on FinalizeArtifact. That
one red matrix cell made smoke-darwin a failure, so publish-channel
skipped and the channel head did not move.

Stop screen recording and Upload smoke diagnostics run after the chat
and only collect evidence. continue-on-error keeps a failed stop or a
failed upload from failing the job. The install and chat steps still
fail the job, and publication still requires every smoke job to succeed.
This commit is contained in:
ethernet
2026-09-21 19:29:39 -04:00
parent dd9efff98b
commit 95b005fde3
2 changed files with 12 additions and 0 deletions

View File

@@ -193,6 +193,8 @@ jobs:
- name: Stop screen recording
if: always()
# Evidence only. A failed stop must not fail a chat that already passed.
continue-on-error: true
uses: ./.github/actions/e2e-screen-record
with:
mode: stop
@@ -209,6 +211,8 @@ jobs:
- name: Upload smoke diagnostics
if: always()
# Evidence only. A 403 from the artifact store must not fail the smoke.
continue-on-error: true
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: desktop-smoke-${{ inputs.platform }}-${{ inputs.arch }}-${{ inputs.format }}-${{ github.run_id }}-${{ github.run_attempt }}

View File

@@ -173,6 +173,14 @@ def test_smoke_matrix_native_routes_and_driver_only_dependencies():
assert 'save-cache' not in recording['with']
upload = next(step for step in job['steps'] if 'actions/upload-artifact@' in step.get('uses', ''))
assert upload['if'] == 'always()' and upload['with']['path'].endswith('/out')
# The chat steps are the smoke verdict. Recording stop and artifact
# upload run after that and are evidence; a 403 there must not fail
# the job or skip channel publication.
stop = next(step for step in job['steps'] if step.get('name') == 'Stop screen recording')
assert stop['continue-on-error'] is True and upload['continue-on-error'] is True
for verdict in ('Install and chat on macOS', 'Install and chat on Windows'):
chat = next(step for step in job['steps'] if step.get('name') == verdict)
assert 'continue-on-error' not in chat
recorder = hermes_yaml.safe_load((ROOT / '.github/actions/e2e-screen-record/action.yml').read_text())
assert all(not step.get('uses', '').startswith('actions/cache') for step in recorder['runs']['steps'])