Split the post-deploy smoke probe by what each half can prove - #113
Merged
Merged
Conversation
The step added in #111 turned every deploy on main red. From the runner, the two /.well-known/ paths returned 200 — the fix it was written to guard works — but the / and /feed.xml canaries 403'd through ten retries each. Cloudflare bot protection blocks the runner's datacenter IP on ordinary paths and exempts /.well-known/ by design, so ACME and security.txt keep working. Exactly the paths we care about got through; the canaries could not. Not a site fault: the origin serves all four, and both canary paths return 200 from a residential IP. So the probe splits: - the origin, all paths, for artifact completeness — no bot protection in front of it, and this is the #110 class (a directory silently missing from the artifact) generalized past the two files that happened to expose it - the canonical host, /.well-known/ only, for the Worker's rewrite — the reachable subset, now asserting content types rather than status, since text/plain and application/pgp-keys ARE the requirement from #107 and #109 and a 200 with the wrong type is still a regression Dropping the canaries is not a weakening: they existed to show the site was up, and a 200 from /.well-known/security.txt on that same host already shows it. Rejected a Cloudflare WAF skip rule for GitHub's IP ranges — a manual console change that widens the site's exposure to make a test convenient, covering ground the origin probe already covers. Closes #112
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.
Summary
The post-deploy smoke step from #111 turned every deploy on
mainred. Fixing my own breakage.From the runner, the two paths the step exists to guard passed; the two canaries did not:
//feed.xml/.well-known/security.txt/.well-known/pgp-security.ascCause: Cloudflare bot protection blocks the runner's datacenter IP on ordinary paths and exempts
/.well-known/by design, so ACME andsecurity.txtkeep working. Exactly the paths we care about got through. Not a site fault — verified simultaneously that the Pages origin serves all four, and that both canary paths return 200 from a residential IP.Fix
Split the probe by what each half can actually prove:
/.well-known/only — the Worker's rewrite. Now asserts content types rather than status:text/plain; charset=utf-8andapplication/pgp-keysare the actual requirement from Serve the security contact's PGP key at /.well-known/pgp-security.asc #107/Add /.well-known/security.txt (RFC 9116), with an expiry check so it cannot rot #109, and a 200 with the wrong type is still a regression.Dropping the canaries is not a weakening. They existed to distinguish "site is down" from "well-known is missing", and a 200 from
/.well-known/security.txton that same host already settles the first. The origin half covers both paths for completeness.Rejected: a Cloudflare WAF skip rule for GitHub's IP ranges. A manual console change (
Manual-Setup-Checklist.mdterritory) that widens the site's exposure to make a test convenient, covering ground the origin probe already covers.Closes #112
Test plan
deploy.ymlparses; both steps present in orderfail=0bash -e(the shell Actions uses) against the live site — both types match, and a deliberately missing path correctly yieldsfail=1rather than passing silently or aborting the step