From b58e2a37ccfa63f20bb8ffd2cda0f74b8d9176e2 Mon Sep 17 00:00:00 2001 From: L4Ph Date: Sun, 8 Nov 2026 01:42:30 +0900 Subject: [PATCH] fix(deploy): upload Worker Loader bindings when secrets are pinned The pinned-secret uploader converts every binding itself, and bindingsFromOutput had no case for the `worker-loader` binding that cf emits for `worker_loaders`. Any app with a Worker Loader binding and a secret failed with "Cloudflare binding LOADER cannot be uploaded with pinned secrets." Map it to the `worker_loader` binding type and cover it in the pinned upload test. --- packages/void/src/cli/cf-version-api.ts | 3 +++ packages/void/test/unit/cf-version-runner.test.ts | 2 ++ 2 files changed, 5 insertions(+) diff --git a/packages/void/src/cli/cf-version-api.ts b/packages/void/src/cli/cf-version-api.ts index 6678a722b..33b5eae7d 100644 --- a/packages/void/src/cli/cf-version-api.ts +++ b/packages/void/src/cli/cf-version-api.ts @@ -283,6 +283,9 @@ function bindingsFromOutput( case 'version-metadata': bindings.push({ name, type: 'version_metadata' }); break; + case 'worker-loader': + bindings.push({ name, type: 'worker_loader' }); + break; default: throw new Error(`Cloudflare binding ${name} cannot be uploaded with pinned secrets.`); } diff --git a/packages/void/test/unit/cf-version-runner.test.ts b/packages/void/test/unit/cf-version-runner.test.ts index 508c1b8bb..e90e0fc52 100644 --- a/packages/void/test/unit/cf-version-runner.test.ts +++ b/packages/void/test/unit/cf-version-runner.test.ts @@ -1111,6 +1111,7 @@ async function verifyPinnedUpload(atomic: boolean): Promise { vectorize: [{ binding: 'VECTORS', index_name: 'vectors' }], browser: { binding: 'BROWSER' }, images: { binding: 'IMAGES' }, + worker_loaders: [{ binding: 'LOADER' }], dispatch_namespaces: [ { binding: 'DISPATCH', @@ -1287,6 +1288,7 @@ async function verifyPinnedUpload(atomic: boolean): Promise { { name: 'VECTORS', type: 'vectorize', index_name: 'vectors' }, { name: 'BROWSER', type: 'browser' }, { name: 'IMAGES', type: 'images' }, + { name: 'LOADER', type: 'worker_loader' }, { name: 'DISPATCH', type: 'dispatch_namespace',