Skip to content

Migrate Forest website to Workers Build #7648

Description

@LesnyRumcajs

Summary

The action we were relying on is deleted, so now we have to do some manual dance because we're stuck on Direct Upload.

ChainSafe/forest-website#184

This works, but a cleaner solution would be to migrate to something that CF really supports and doesn't put traps on.

Completion Criteria

  • Migrate Forest website to Workers Build

Additional Links & Resources

https://developers.cloudflare.com/workers/static-assets/migration-guides/migrate-from-pages/
https://developers.cloudflare.com/workers/ci-cd/builds/configuration/
https://developers.cloudflare.com/workers/ci-cd/builds/git-integration/

Claude's migration steps (unverified, treat with caution)

Prerequisites (verified)

  • chainsafe.io runs on Cloudflare nameservers (gene/toby.ns.cloudflare.com). Required — Workers custom domains don't support external DNS with a CNAME, unlike Pages. This was the likeliest blocker; it's fine.
  • No functions/, no _headers, no _redirects. Nothing Pages-specific to port.
  • out/404.html exists, so 404 handling maps cleanly.

Steps

  1. Add wrangler.jsonc at repo root. Assets-only Worker, so no main and no ASSETS binding:
    {
    "name": "forest-website",
    "compatibility_date": "2026-09-22",
    "assets": {
    "directory": "./out",
    "not_found_handling": "404-page"
    }
    }

  2. Add wrangler to devDependencies. Verify locally before touching anything remote: yarn build && npx wrangler dev (port 8787, not Pages' 8788), then npx wrangler deploy --dry-run.

  3. In the Cloudflare dashboard, create the Worker and connect the GitHub repo via Workers Builds. Settings:

    • build command yarn build
    • deploy command npx wrangler deploy
    • preview deploy command npx wrangler versions upload (this is what non-production branches get)
    • enable non-production branch builds, so Dependabot branches keep getting previews
    • build variable NODE_VERSION=22 — same wrangler requirement that just failed your run
  4. Confirm it works on *.workers.dev while Pages still serves production. No user impact yet.

  5. Cut over the domain. forest.chainsafe.io can only attach to one of them, so: remove it as a custom domain from the Pages project, then add it as a Custom Domain on the Worker. This is the only step with a downtime window — keep it short and do it deliberately.

  6. Delete .github/workflows/cf-deploy.yaml. Workers Builds does check runs and PR comments natively, so the whole Record GitHub deployment step disappears with it.

  7. Clean up afterwards: delete the Pages project once you're satisfied, and drop CLOUDFLARE_API_TOKEN / CLOUDFLARE_ACCOUNT_ID from the Actions and Dependabot secret stores if nothing else uses them.

Caveats worth knowing before you commit to this

  • The Deployments sidebar probably still won't come back. Docs promise check runs and PR comments; they don't mention GitHub Deployment environment records. Unconfirmed either way — I'd treat the sidebar as gone.
  • forest-landing.pages.dev dies. Preview URLs become version-scoped *.workers.dev URLs.
  • Pages environment variables don't carry over to Workers Builds; reconfigure them there.
  • Workers has no equivalent of Pages' branch deploy controls.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type: TaskDiscrete task to implement

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions