feat(site): deploy to GitHub Pages (phase 4) - #24
Merged
Merged
Conversation
…ard meta and a 404 Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
CodeQL: the expected og:image URL went into a RegExp with its dots unescaped, so a look-alike host would have passed. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 4: deploy. Merging this publishes the site at https://tmhsdigital.github.io/plumbline/.
Pages was already enabled with
build_type: workflow(source: GitHub Actions, not a branch). Nothing had been deployed, so no settings change was needed.site.ymlnow has three jobs:parity(name unchanged, so required checks are unaffected): the fixture check, the build, and the floor.js parity check. It then uploads the assembled site withupload-pages-artifact@v5. On a PR, that artifact is a downloadable preview.docs(new, needsparity): runs the renderer self-test, then unpacks the exact archive that gets deployed and runsscripts/check_site_links.mjson it.deploy(needsparityanddocs): runs only on push to main orworkflow_dispatchon main, never on pull requests. It haspages: writeandid-token: write, thegithub-pagesenvironment, and its own non-cancellingpagesconcurrency group.scripts/check_site_links.mjs(standard library only) takes a directory or a URL. It starts from the explainer, follows every internal link, and fails on:#anchorwith no matching id;<a>links are fine);og:*ortwitter:*tags, or whose canonical andog:urldon't name that page;og.pngthat isn't a 1200x630 PNG;Tested locally: a missing page, a bad anchor, a CDN stylesheet and a wrong
og:urlwere each reported, and the real build passes (11 pages).Meta. Every page has
<link rel="canonical">plus Open Graph and Twittersummary_large_imagetags pointing attmhsdigital.github.io/plumbline. The doc pages get them frombuild_site.social_meta. The explainer, which is static HTML, has the same tags generated from that function once and committed.Card image.
site/og.pngis 1200x630 and 45 KB. It was rendered fromscripts/og_image.htmlin a headless browser, and that file says how to regenerate it. It shows the title, the worked example's ECE (0.074) and the floor's 95th percentile (0.111) on a scale at their true positions, and "105 rows: inconclusive, not a pass". It is plain, with no emojis and no external image service.404.
404.htmluses absolute/plumbline/paths, since Pages serves it at any depth. It links back to the explainer and the docs, and it isnoindex.README. A link to the site sits right under the one-line description.
Checked locally: ruff, format,
mypy --strict, the renderer self-test (15 cases), the build, the parity check, the site checker, and the em dash guard all pass.After merge I will set the repo's About homepage and verify the live site.
🤖 Generated with Claude Code