The custom-domain cutover is complete. The production smoke test passed on
20 October 2026. GitHub Pages is disabled, and the legacy deployment and preview
workflows have been removed. GitHub Pages rollback is no longer required;
gh-pages can be deleted without archiving it. Cloudflare deployments do not
depend on that branch.
The original cutover procedure below is retained as historical context. Its GitHub Pages preservation and manual-workflow instructions no longer apply. The production verification command remains useful after Cloudflare deployments.
The workflow change prepares Cloudflare production; merging it does not switch
docs.celestia.org. Complete the steps below in order. Do not remove the existing
GitHub Pages deployment until the custom domain has been verified.
- Confirm the repository secrets
CLOUDFLARE_API_TOKENandCLOUDFLARE_ACCOUNT_IDcan manage Pages in the intended account. The token needs Account → Cloudflare Pages → Edit. Local Wrangler authentication is separate from GitHub Actions secrets. - Choose the permanent project name (
celestia-docsby default). If needed, setCLOUDFLARE_PAGES_PROJECTbefore running the workflow. Do not leave it pointing at the temporarycelestia-docs-vocs-testproject. - Push the PR and check the Cloudflare deployment run. It creates the project if
absent with
mainas production branch; an existing project with a different production branch fails validation. Record the actual project hostname from the run summary. Verify the PR preview, including search, navigation, tabs, RPC interactions and mobile layouts. - Record the existing DNS record (target, proxy setting and TTL), GitHub Pages
settings and the
gh-pagescommit SHA. Retain a copy of the published artifact or branch. The migration makes the old workflows manual-only, preserving it. - Merge the migration to
main. Check the production deployment and smoke-test result in Actions. Inspect the immutable Pages deployment URL before changing DNS. Its HTML intentionally uses the future custom-domain origin; use the PR preview for isolated navigation tests until the domain switches.
-
In the intended Pages project, select Custom domains → Set up a domain and associate
docs.celestia.org. Cloudflare-managed DNS can update the record during this step, so treat it as the start of the traffic switch. -
If DNS is managed elsewhere, update the
docsCNAME to the project's actual<pages_project_host>after associating the domain. Do not merely change DNS without adding the domain to Pages. See Cloudflare's custom-domain instructions. -
Wait for the custom domain and HTTPS certificate to become active. Run:
node scripts/check-cloudflare-deployment.mjs https://docs.celestia.org
-
The Worker now supplies discovery headers and the API catalog media type. Disable only the two redundant
docs.celestia.orgresponse-header rules using Cris's saved IDs, then rerun the smoke test. Keep those IDs for rollback. No paid Markdown for Agents rule is required: the Worker serves generated Markdown itself. The smoke test checks HTML → Markdown → HTML,Vary: Accept, cache isolation, the catalog and MCP tools. -
Verify existing bookmarked URLs, redirects, search, tabs, RPC interactions, mobile navigation, markdown and assets in a browser. Confirm production has no preview noindex metadata and
robots.txtallows indexing. Check canonical URLs andsitemap.xmlusehttps://docs.celestia.org. -
Record the production deployment ID and verification results. Only then remove
deploy.ymlandpreview.yamlin a follow-up change, clean up old preview artifacts and retire the unused preview secret/project. Preserve the rollback artifact and DNS record details through the agreed rollback window.
- Before DNS changes: the old GitHub site still serves production. Fix the Cloudflare workflow and rerun it; do not switch traffic on a failed smoke test.
- After DNS changes: restore the recorded DNS target and settings to return
traffic to the retained GitHub Pages artifact. Re-enable the two saved
discovery/header rules. Confirm HTTPS, static
.mdfiles and the old site. Do not run the manual GitHub deployment unless intentionally replacing that retained artifact with a newly built Vocs site. - After a later bad Cloudflare release: use a known-good production deployment in Pages for rollback; retain the failed deployment ID for diagnosis.
- Wrong project/branch: check
CLOUDFLARE_PAGES_PROJECTand the project's production branch. The workflow refuses to deploy when it is notmain. - No fork preview: expected; fork PRs do not receive deployment secrets.
- Local authentication expired: run
bunx wrangler logininteractively or configure a scopedCLOUDFLARE_API_TOKEN. Do not print or commit credentials. - Crawler challenges: inspect Cloudflare Security Events for the scanner timestamp and Ray ID. Adjust only the responsible rule and rescan; a successful Pages deployment does not resolve WAF challenges.
- DNS or certificate failure: check domain association, CNAME, CAA restrictions and any conflicting Cloudflare rules before retrying.