What the pipeline exists to do, and how you would know it is working.
main0.161.1, Go to 1.22pages with cancel-in-progress: false — deploys never interleaveSources on the left, the build in the middle, the published artifact on the right.
Stages ordered by probability of catching a failure divided by time to run. Everything left of the gate blocks; everything right of it deploys.
hugo --gc --minify succeeding, and the gate is a push to main.
The stage ordering above is the shape the same repository would take once it had tests to run.
Four layers. Everything below the publish layer runs on GitHub-hosted infrastructure; nothing runs on a machine anybody owns.
baseURL, goldmark with unsafe = true, module import
.deb, pinned by HUGO_VERSION ·
Go 1.22 present only so Hugo Modules can resolve the theme ·
Lotus Docs fetched as a Hugo Module, not vendored as a submodule ·
output written to ./public
build then deploy ·
permissions scoped to contents: read, pages: write, id-token: write ·
concurrency group pages serialises deploys ·
upload-pages-artifact@v3 hands ./public to deploy-pages@v4
CNAME to the Pages host
main publishes; no other trigger is requiredworkflow_dispatch for a manual rebuild without a content change<iframe> with no shortcodego.mod file not found — the theme is a moduleresources.Get in the theme's image hook reads assets/, never static/; an image in the wrong directory renders as nothing at allfetch-depth: 0 is required for .GitInfo-derived dates| Aspect | Detail |
|---|---|
| Model | Continuous deployment. Every commit on main that builds is published; there is no release branch and no approval step. |
| Runner | ubuntu-latest, GitHub-hosted. Two jobs: build produces the artifact, deploy consumes it via needs: build. |
| Prerequisites | Pages source set to GitHub Actions in repository settings; a Go toolchain in the runner for module resolution; DNS CNAME for the custom domain. |
| Rollback | git revert and push. Recovery time is one pipeline run, which is the argument for keeping the pipeline short. |
| Failure mode | A failed build leaves the previously deployed site untouched — Pages only swaps once deploy-pages succeeds. |
| Blast radius | The whole site, since it is one artifact. Acceptable because the content is static and the undo path is a commit. |