Skip to content

Deno 2.7.12 regression breaks Wrangler asset uploads in GitHub ActionsΒ #33266

@motss

Description

@motss

Summary

A Deno 2.7.12 regression appears to break Wrangler asset uploads in GitHub Actions. The deploy gets as far as Cloudflare API access and then fails during the static asset upload phase with repeated TypeError: fetch failed errors.

Related Cloudflare report:

Exact versions from the failing run

  • Deno: 2.7.12
  • Wrangler: 4.82.1

The Cloudflare log shared in the linked issue was captured with Wrangler 4.82.1. I also confirmed in that issue thread that Deno 2.7.11 works, while 2.7.12 is the failing version.

How I ran it

In GitHub Actions, I used denoland/setup-deno@v2, pinned Deno to v2.7.12, and ran:

deno run -A npm:wrangler deploy --env canary

Observed behavior

The deploy gets as far as Cloudflare API access and then fails while uploading assets:

  • GET /workers/services/... succeeds
  • GET /workers/scripts/.../deployments succeeds
  • asset upload session creation succeeds
  • the POST to .../workers/assets/upload?base64=true fails repeatedly with TypeError: fetch failed

Relevant log excerpt from Wrangler:

πŸŒ€ Starting asset upload...
πŸŒ€ Found 20 new or modified static assets to upload. Proceeding with upload...
Asset upload failed. Retrying...
TypeError: fetch failed
✘ [ERROR] fetch failed

Expected behavior

Wrangler should upload the generated assets and complete the deploy.

Notes

  • DNS resolution for api.cloudflare.com succeeds in the runner.
  • curl -I https://api.cloudflare.com also succeeds, so this does not look like a basic network or DNS outage.
  • The failure is specific to the asset upload path.

If helpful, I can provide the full Wrangler log and the exact GitHub Actions workflow used for the reproduction.

Simplified repro details

Here is the smallest version I could reduce it to while still keeping the relevant deploy path. The YAML below is a simplified version of what I have in my repo.

wrangler.jsonc

{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "assets": {
    "binding": "ASSETS",
    "directory": "./build/client",
    "html_handling": "drop-trailing-slash"
  },
  "base_dir": "./build",
  "compatibility_date": "2026-04-13",
  "compatibility_flags": [
    "enable_request_signal",
    "nodejs_als",
    "nodejs_compat",
    "pedantic_wpt",
    "request_signal_passthrough"
  ],
  "find_additional_modules": true,
  "main": "./build/worker.js",
  "minify": false,
  "no_bundle": true,
  "preserve_file_names": true,
  "rules": [
    {
      "globs": ["assets/**/*.js"],
      "type": "ESModule"
    }
  ],
  "workers_dev": true
}

GitHub Actions snippet

- uses: actions/checkout@v6

- name: Setup Deno
  uses: denoland/setup-deno@v2
  with:
    deno-version: v2.7.12
    cache: true

- name: Install Dependencies
  run: deno install

- name: Build Canary
  run: deno task build:worker:canary

- name: Deploy Canary
  env:
    CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
    SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
    SENTRY_DSN: ${{ vars.SENTRY_DSN }}
    SENTRY_RELEASE: ${{ github.sha }}
    VITE_SENTRY_DSN: ${{ vars.VITE_SENTRY_DSN }}
  run: deno run -A npm:wrangler deploy --env canary

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions