Skip to content

Deploy to Cloudflare button: source import silently fails — created repo has only README + wrangler config, worker stuck on Hello World placeholder #31

Description

@freefrank

What happened

Clicking a Deploy to Cloudflare button (deploy.workers.cloudflare.com/?url=...) completes with no visible error, but the deployment is broken:

  • The newly created GitHub repo contains only two files: README.md and the wrangler config. All source is missing (src/, package.json, lockfile, everything else).
  • The wrangler config's name field is rewritten to the new worker name, with all other content — including comments — preserved verbatim. So the repo was clearly synthesized from the deploy page's parsed state, not cloned from git.
  • Commit fingerprint of the broken path: Initial commit (adds README.md) + Uploading template. (adds the wrangler config) — instead of the normal single source repo import commit that successful deploys produce.
  • The worker is created but stays on the "Hello World" placeholder (deployments show Source: Upload at flow time). Since the repo has no source, any build would fail anyway.
  • Secrets are provisioned (a Secret Change deployment appears seconds after creation).
  • Workers Builds doesn't appear to be wired up either: later pushes to the created repo trigger no builds and no check-runs (commit status stays pending with zero contexts).
  • The deploy UI reports neither success nor failure — it just returns to the deploy screen.

Evidence this is a service-side intermittent failure (not repo content)

GitHub commit search shows two distinct outcomes happening in parallel, same day:

Path Commits Created repo content
✅ success single source repo import full source tree
❌ fallback Initial commit + Uploading template. README.md + wrangler config only

Same source, different outcomes:

Ruled out (each disproven by at least one observed case):

  • monorepo subdirectory URLs — a fully self-contained standalone repo fails too
  • wrangler.toml vs wrangler.jsonc — plenty of .jsonc victims, including the official template above
  • private repos — all repos involved are public
  • missing template metadata (.gitignore, cloudflare key in package.json, .dev.vars.example) — official templates have all of these and still hit the fallback

Scale: a commit search for "Uploading template." surfaces dozens of affected repos in 2026-07-03 → 07-05 alone. Failures also look sticky per user/session: one user hit it 3× in one day (peterniss/proxycontroller, ...02, ...03), and I hit it twice in one day with two different source repos.

My repro (account a6f98d533d0a0c22b3fdaded5cd8b8b2)

  1. 2026-07-04 ~19:02 UTC?url=https://github.com/Javis603/token-monitor/tree/main/worker (public monorepo subdir) → repo freefrank/token-monitor-hub created with 2 files, worker token-monitor-hub left on the Hello World placeholder.
  2. 2026-07-04 ~19:53 UTC?url=https://github.com/freefrank/token-monitor-hub (standalone, fully self-contained, public — I had pushed the full source into it by then) → repo token-monitor-hub-test created, again with only 2 files.

(I've since recovered manually: pushed the source and ran wrangler deploy — the worker itself runs fine, so the source is not the problem. The -test worker has been deleted.)

Expected behavior

Either the created repo contains the full source (source repo import), or the flow surfaces an error instead of silently committing a placeholder template and leaving a Hello World worker that looks deployed.

Ask

  1. Fix / add retries to the source-import step of the deploy flow.
  2. Surface import failures in the deploy UI — the silent fallback makes users debug their own repos for hours when nothing is wrong with them.

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

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions