Skip to content

Show deploys as they run: live statuses on commits and a summary on each run - #414

Merged
demegire merged 2 commits into
mainfrom
feat/deploy-progress
Oct 13, 2026
Merged

demegire merged 2 commits into
mainfrom
feat/deploy-progress

Conversation

@demegire

Copy link
Copy Markdown
Contributor

What and why

Deploys were only visible in the Actions log and GitHub's Deployments list. Pull requests now show a deploy as it runs, the way hosting previews do.

  • Branch deploys (deploy-staging): the PR's staging check shows Deploying to staging… with a link to the run, then Deployed with a link to staging, or failed with a link to the log. A small resolve job finds the commit first. The jobs that post statuses run none of the branch's code, as before.
  • Merges (deploy): the merged commit gets deploy/staging and deploy/production statuses, each going deploying → deployed / failed. A paused production deploy (PROD_AUTO_DEPLOY=false) shows as an error status, "Paused because PROD_AUTO_DEPLOY is false". Production only reports once its guard has passed.
  • Run summary: every deploy writes its release, previous release, migrations, host setup and startup time to the run page (.github/scripts/deploy-summary.sh). activate_release.sh now prints how long startup took after the restart began.

Verification

  • actionlint passes on deploy.yml, deploy-staging.yml and staging-check.yml.
  • The summary script, run on a real deploy log from today and on a synthetic failed one, gives the right rows. It only adds "Stopped" when the deploy failed, and doesn't pick up squid's harmless TLS warning.

Tested on staging

Pushed this branch to staging; that run uses this branch's deploy-staging.yml, so it shows the new statuses on this PR. The run's result is posted on this PR. The deploy.yml changes take effect on the first merge after this one.

🤖 Generated with Claude Code

https://claude.ai/code/session_018r2AXjCexMfNqKFCgC53LU

…ach run

A branch deploy now shows Deploying, then Deployed or failed, in the pull request's
checks, linking the run and then staging. Merged commits get deploy/staging and
deploy/production statuses the same way. Each deploy writes its release, previous
release, migrations, host setup and startup time to the run page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018r2AXjCexMfNqKFCgC53LU
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018r2AXjCexMfNqKFCgC53LU
@demegire

Copy link
Copy Markdown
Contributor Author

Tested on staging. Pushed this branch to staging (run 38423031374). The staging check went Deploying to staging… (linking the run) → Deployed to staging by demegire (linking app.staging.tin.computer), and all four jobs passed.

The first try (run 38422640405) deployed fine but failed the job: the summary script isn't on main yet, and branch deploys use main's copy. Summary steps now never fail a deploy and skip when the script is missing. The deploy/staging and deploy/production statuses on merged commits take effect with the first merge after this one.

@demegire
demegire merged commit 95821d4 into main Oct 13, 2026
17 checks passed

This branch was previously deployed

1 inactive deployment
staging — bf425af1 Deployed Oct 13, 2026 by demegire via deploy #11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant