Cloudflare deploy fails with "binding X cannot be uploaded with pinned secrets" when Worker has a `ratelimits` binding and any secret
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 57/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- typescript
Piste de recherche
Start in void/dist/deploy-DsW-PrRQ.mjs around bindingsFromOutput (about line 1806), where the issue says the binding type switch omits ratelimit; compare the existing cases with the suggested Workers API mapping. Then find the relevant deploy tests and add coverage for a Worker with a ratelimits binding and an existing secret using the pinned uploader. Done means that deployment succeeds and preserves the secret.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Versions
void1.1.11,@void/deploy-cloudflare1.1.11 (latest on npm as of 2026-10-16)void deploy --platform cloudflare(direct Cloudflare target), Node 24, Workers Builds and local
Repro
- Project with a rate limit binding in
void.config.ts:cloudflare: { ratelimits: [ { name: "MY_RATE_LIMIT", namespace_id: "1001", simple: { limit: 30, period: 60 } }, ], } void deploy --platform cloudflare→ succeeds (Worker has no secrets yet).- Set any Worker secret (
void secret put FOO, orwrangler/cf workers secrets put). void deploy --platform cloudflareagain → fails:
Every subsequent deploy fails the same way while any secret exists.■ deploy: Cloudflare Worker Version upload failed (exit 1); production traffic is unchanged. Cloudflare binding MY_RATE_LIMIT cannot be uploaded with pinned secrets.
Root cause
@void/deploy-cloudflare/dist/index.mjs(activateCloudflareVersionWithSecretsFile, ~L1354): when the active version has any secret and no candidate secrets file is passed, Void callspinActiveSecretsand routes the upload throughuploadPinnedCloudflareVersion.- That uploader builds bindings with
bindingsFromOutput(void/dist/deploy-DsW-PrRQ.mjs~L1806–1981), whose switch handles text, json, kv, d1, r2, durable-object, queue, ai, browser, images, hyperdrive, worker, workflow, send-email, analytics-engine-dataset, vectorize, dispatch-namespace, assets, version-metadata — but has noratelimitcase, so it hitsdefault: throw new Error(\Cloudflare binding ${name} cannot be uploaded with pinned secrets.`)`. - Before the first secret, the normal
wrangler versions upload --prebuiltpath is used, which supportsratelimits— hence it only breaks once a secret exists.
Expected
Deploy succeeds and preserves existing secrets, as it does for other binding types.
Suggested fix
Add a ratelimit case to bindingsFromOutput mapping to the Workers API binding:
case "ratelimit":
bindings.push({
name,
type: "ratelimit",
namespace_id: requiredString(value.namespaceId ?? value.namespace_id, name),
simple: { limit: value.simple.limit, period: value.simple.period },
});
break;
(plus a test: Worker with ratelimits + an existing secret deploys via the pinned uploader). It may be worth auditing the switch against all binding types Void can emit (e.g. secrets_store_secrets, mtls_certificates, worker_loaders), and failing in a pre-upload check rather than mid-deploy.
Workaround
Remove ratelimits from the config (or delete all Worker secrets) to deploy.
- Langage dominant
- TypeScript
- Étoiles
- 402
- Forks
- 32
- Merge moyen
- 12 h 1 min
- PR mergées (30 j)
- 80
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de voidzero-dev/void
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
voidzero-dev/void#484 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
voidzero-dev/void#463 ·
Les mainteneurs répondent en général sous 1 jour
-
Deploy after a secret change fails for Workers over ~750 KB: source read-back capped at 1 MiBPeut-être pris @Brooooooklyn l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
voidzero-dev/void#459 · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 1/5 1-3 heures Accessibilité débutants 78/100
voidzero-dev/void#428 ·
Les mainteneurs répondent en général sous 1 jour
-
Allow `npm create void` and `void init` to run without promptsPeut-être pris @ashunar0 l’a pris aujourd’hui. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 57/100
voidzero-dev/void#491 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de voidzero-dev/void
Issues similaires
-
area: aria/combobox gemini-triaged
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
angular/components#33973 ·
Les mainteneurs répondent en général sous 1 jour
-
bug priority: P2
Difficulté 1/5 1-3 heures Accessibilité débutants 84/100
Les mainteneurs répondent en général sous 1 jour
-
[bug] status, list and push crash with an uncaught NotInitializedError stack trace when teamai is not initializedPeut-être pris @jay23606 l’a pris aujourd’hui. Ouvertebug good first issue help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
Tencent/teamai-cli#1227 ·
Les mainteneurs répondent en général sous 1 jour
-
[Tool]: YapOuverte
Difficulté 1/5 1-3 heures Accessibilité débutants 62/100
withkarann/aifoxx#417 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
sindresorhus/eslint-plugin-unicorn#3921 ·
Les mainteneurs répondent en général sous 1 jour