How this site ships
One codebase, three long-lived branches, three deployed environments. Merging into a long-lived branch deploys that environment. Moving between environments takes a promotion pull request, so the gate stays visible. This is the same shape as the Salesforce pipeline I run at work, built with the tools GitHub gives you for free.
Where each branch lands
| Environment | Branch | Salesforce analogue | URL |
|---|---|---|---|
| Sandbox | dev | Developer sandbox | alouderback.com/dev/ |
| Testyou are here | qa | Partial or Full Copy sandbox (UAT) | alouderback.com/qa/ |
| Production | main | Production org | alouderback.com/ |
What actually differs between environments
The three deployments are different builds, not the same build painted three colours. Content is gated here, and a flag only reaches Production after it has been promoted through Sandbox and Test.
| Flag | Sandbox | Test | Production |
|---|---|---|---|
| showBuildPanel | on | on | off |
| showWipSections | on | off | off |
| showReleaseCandidate | on | on | off |
| showOrgSwitcher | on | on | on |
| showDoraDashboard | on | on | on |
The workflows behind it
- ci.ymlPull requests, and pushes to dev, qa, mainLint, format check, typecheck, then build all three environments and check every internal link.
- deploy.ymlPush to dev, qa, or mainBuilds the environment that branch owns and publishes it into its own folder on gh-pages, then records a GitHub deployment.
- promote.ymlManualOpens a promotion pull request, dev into qa or qa into main, with the commit list being promoted.
- agentic-review.ymlPull requestsClaude reviews the diff and comments. Skipped cleanly when no API key is configured.
- agentic-release-notes.ymlSuccessful Production deployWrites release notes and cuts a GitHub Release. Falls back to generated notes without a key.
- dora.ymlNightly, and after each Production deployComputes DORA metrics from the deployment history and publishes them for this page to read.
DORA metrics for this repository
Computed from this repository's own deployment history by dora.yml, not typed in by hand. Numbers appear once the pipeline has enough deployments to measure.
Deployment frequency
pending
Waiting on the first deployments.
Lead time for changes
pending
Waiting on the first deployments.
Change failure rate
pending
Waiting on the first deployments.
Time to restore
pending
Waiting on the first deployments.
Not yet generated. The nightly job publishes the first set.