@@ -233,42 +233,33 @@ jobs:
233233 done
234234
235235 # ---------------------------------------------------------------------
236- # Job 3: refresh the published dashboard. Every successful ingest lands
237- # new evidence in GCS, so the GP5 dashboard (evidence-dashboard-publish)
238- # must re-render to surface it — otherwise the site is stale until the
239- # next unrelated push to main. The push-to-main ingest path already
240- # re-triggers the dashboard via its own `push:` trigger, but the
241- # first-party UAT path is a NESTED workflow_call (up to four levels deep:
242- # uat-run -> uat-{aws,gcp,azure} -> evidence-ingest), which emits no
243- # top-level run event and cannot nest a fifth reusable workflow. A
244- # workflow_dispatch decouples cleanly: it starts a fresh top-level run
245- # regardless of how deep this ingest was invoked.
236+ # Job 3: trigger downstream evidence consumers. Every successful ingest lands
237+ # verified evidence in GCS, so the static dashboard must re-render and the
238+ # live TestGrid publisher must receive the same digest-pinned bundle ref.
246239 #
247- # Held in a SEPARATE job so the GCS-credentialed publish job never also
248- # carries actions:write. `needs: publish` inherits the produced gate — a
249- # skipped/failed publish skips this too, so the dashboard only re-renders
250- # after evidence is actually in the bucket. The dashboard's own
251- # concurrency group ("pages", cancel-in-progress:false) coalesces the
252- # flurry from a multi-cell nightly batch into a single queued rebuild
253- # that the newest dispatch supersedes.
240+ # The first-party UAT path is a nested workflow_call (uat-run -> cloud UAT ->
241+ # evidence-ingest), where workflow_run chaining is suppressed for nightly runs
242+ # initiated by GITHUB_TOKEN. Explicit workflow_dispatch starts fresh top-level
243+ # runs regardless of nesting depth or the original UAT actor.
254244 #
255- # The refresh is BEST-EFFORT: the evidence is already in the bucket and the
256- # dashboard self-heals on the next ingest or push to main, so a transient
257- # dispatch failure must never fail this workflow_call chain — otherwise the
258- # nightly controller would record a fully-successful, multi-hour UAT cell as
259- # a failed leg. The dispatch step retries, then warns (never fails), so
260- # staleness is surfaced but not fatal — the same not-cry-wolf posture as
261- # uat-superseded-notice.yaml.
245+ # Held in a separate job so the GCS-credentialed publish job never also
246+ # carries actions:write. `needs: publish` ensures downstream consumers are
247+ # triggered only after verified evidence is persisted.
248+ #
249+ # Dispatch is best-effort: evidence is already durable, and a transient
250+ # dispatch failure must not turn a successful multi-hour UAT cell red. Each
251+ # dispatch retries and emits a visible warning on exhaustion. The dashboard
252+ # self-heals on the next ingest; TestGrid can be backfilled by bundle ref.
262253 # ---------------------------------------------------------------------
263- trigger-dashboard :
264- name : Trigger dashboard publish
254+ trigger-publishes :
255+ name : Trigger evidence publishes
265256 needs : publish
266257 if : github.repository == 'nvidia/aicr'
267258 runs-on : ubuntu-latest
268259 timeout-minutes : 5
269260 permissions :
270261 contents : read
271- actions : write # dispatch evidence- dashboard-publish.yaml
262+ actions : write # dispatch dashboard and TestGrid workflows
272263 steps :
273264 - name : Dispatch dashboard publish
274265 env :
@@ -293,3 +284,26 @@ jobs:
293284 sleep 5
294285 done
295286 echo "::warning::could not dispatch Evidence: Dashboard Publish after 3 attempts; the dashboard will refresh on the next ingest or push to main"
287+
288+ - name : Dispatch TestGrid publish
289+ if : >-
290+ inputs.bundle_ref != '' &&
291+ (github.ref_name == 'main' || startsWith(github.ref_name, 'release/'))
292+ env :
293+ BUNDLE_REF : ${{ inputs.bundle_ref }}
294+ GH_TOKEN : ${{ github.token }}
295+ REPO : ${{ github.repository }}
296+ run : |
297+ set -euo pipefail
298+ for attempt in 1 2 3; do
299+ if gh workflow run testgrid-publish.yml \
300+ --repo "${REPO}" --ref main \
301+ -f bundle_ref="${BUNDLE_REF}" \
302+ -f environment=prod; then
303+ echo "dispatched TestGrid Publish on main"
304+ exit 0
305+ fi
306+ echo "dispatch attempt ${attempt} failed; retrying in 5s..."
307+ sleep 5
308+ done
309+ echo "::warning::could not dispatch TestGrid Publish after 3 attempts; backfill bundle ${BUNDLE_REF} manually"
0 commit comments