HerokuDamien MathieuIncident / postmortem
How I Broke `git push heroku main`
Summary
Incident #2105 began during a production deployment of a Go-based Git server after a configuration variable had been set but not transmitted to production instances. Staging deployment completed successfully before the same change was attempted in production. The deployment sent a new code version to one batch, whose unauthenticated calls to a private API produced HTTP 401 responses that were returned publicly; the author paused before deploying the remaining batches and resolved the issue by synchronizing configuration, killing affected processes, and allowing them to restart. The post argues that the failure was enabled by a process requiring separate, infrequent manual actions rather than being solely an individual omission. Its proposed remedy is to combine configuration synchronization with code deployment, or alternatively warn when deployment begins with unsynchronized variables, supported by a blameless retrospective.
Context
A production deployment required separate manual actions to set a configuration variable, transmit it to instances, and deploy code. The variable was set in production but not transmitted before deployment, allowing instances without the required configuration to make unauthenticated calls to a private API.
Approach / What changed
The affected processes were killed so they could restart with synchronized configuration. The longer-term solution is to merge configuration updates and code deployment into one step; an alternative is a confirmation warning when variables are not synchronized.
Takeaways
The Git server runs as a kernel app on virtual servers because it must accept SSH connections, while the Heroku platform provides HTTP routing.
A production batch deployed without the new configuration made unauthenticated private-API calls, causing HTTP 401 responses to be sent back publicly.
The proposed process improvement is to remove the separate synchronization step or add a deployment safeguard, rather than assigning blame for a missed command.
Source and freshness
- Source
- heroku.com
- Published
- Added to Yomu
Summaries are generated from the original by a language model. Check the original before relying on it.
Keep reading
Related reading
The Good Stuff
Paid picks we use ourselves. Links carry a referral code — a subscription through one earns us a commission at no extra cost to you.
The best engineering reads, once a week
One useful email. Unsubscribe anytime.