@@ -541,12 +541,31 @@ jobs:
541541 env :
542542 RAILWAY_TOKEN : ${{ secrets.RAILWAY_TOKEN }}
543543 SERVICES_CSV : ${{ steps.changed.outputs.services }}
544+ # Bridge the per-service redeploy summary to showcase_deploy.yml's
545+ # `enforce-redeploy-gate` (consumed via the `redeploy-summary`
546+ # artifact, extracted to `.redeploy/summary.json`). redeploy-env.ts
547+ # writes this path atomically (.tmp → rename) but does NOT create
548+ # parent dirs, so the step below mkdir's `.redeploy` first.
549+ REDEPLOY_SUMMARY_JSON : .redeploy/summary.json
544550 run : |
545551 # Staging is non-blocking by design: the script always exits 0
546552 # and writes per-service failures into $GITHUB_STEP_SUMMARY. The
547553 # verify-deploy workflow is the real release gate.
554+ mkdir -p .redeploy
548555 npx tsx showcase/scripts/redeploy-env.ts staging --services "$SERVICES_CSV"
549556
557+ - name : Upload redeploy summary
558+ if : steps.changed.outputs.services != '' && hashFiles('.redeploy/summary.json') != ''
559+ uses : actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
560+ with :
561+ # Artifact name MUST stay `redeploy-summary`: showcase_deploy.yml's
562+ # `resolve-matrix` job downloads it by this exact name and reads
563+ # `.redeploy/summary.json` inside.
564+ name : redeploy-summary
565+ path : .redeploy/summary.json
566+ if-no-files-found : error
567+ retention-days : 7
568+
550569 notify-all-builds-failed :
551570 name : Notify all builds failed (staging unchanged)
552571 needs : [detect-changes, build, aggregate-build-results]
0 commit comments