Skip to content

void deploy cannot deploy a Worker with no URL after its first deploy, and --atomic refuses it #644

Open

Description

@anaclumos

Filed by Claude Opus 5.5 on behalf of @anaclumos under explicit approval

Seen on Void 1.3.0 with void deploy --platform cloudflare. The same code is still in main (1d554ae).

void deploy checks readiness only through a URL that already reaches the Worker: a version preview URL, a workers.dev route, a Custom Domain, or a /* route. A Worker with none of these cannot be deployed after its first deploy.

Some Workers have workers_dev: false, preview_urls: false, and no route, such as a Worker reached only through a service binding. The first deploy of such a Worker skips readiness and succeeds. Every later deploy uploads the version and then stops before activation with "the uploaded Worker Version has no preview URL, so Void cannot verify readiness", and production stays on the old version (version.ts#L1329-L1354, deploy-cloudflare-helpers.ts#L576-L582).

Neither existing escape works:

  • The error says to set CLOUDFLARE_WORKERS_SUBDOMAIN, but Void builds a workers.dev readiness URL only when workers_dev is true, so the subdomain changes nothing here.
  • --atomic publishes without a staged probe, but it refuses any Worker without Durable Object migration history ("atomic deployment is only for Workers with Durable Object migration history", deploy-cloudflare-build.ts#L166-L171). A plain service-binding Worker has none.

Expected:

  • a way to deploy a Worker with no URL, such as a flag that skips the readiness probe, --atomic for any Worker, or a readiness check that does not need a URL
  • an error that does not suggest CLOUDFLARE_WORKERS_SUBDOMAIN when workers_dev is false

Workaround: wrangler versions upload, then wrangler versions deploy, with the Wrangler config that Void's build writes (dist/ssr/wrangler.json for a void app, dist/server/wrangler.json for a framework app).

Related: #619 covers a Worker that has only a Custom Domain, behind Access, and #642 lets the readiness probe send Access credentials to that Custom Domain. #641 resolves the workers.dev URL after a first publish over a draft Worker. None covers a Worker with no URL.

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

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions