Skip to content

Commit 5d9990e

Browse files
authored
[wrangler] Fix first-deploy guidance for required secrets (#14332)
1 parent 0118db0 commit 5d9990e

4 files changed

Lines changed: 33 additions & 7 deletions

File tree

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
"wrangler": patch
3+
---
4+
5+
Fix misleading error guidance when deploying a new Worker with `secrets.required`
6+
7+
When a Worker declares `secrets.required` and has never been deployed before, the previous error message suggested running `wrangler secret put <NAME>`, which doesn't work because the Worker doesn't exist yet.
8+
9+
The one path that does work — `wrangler deploy --secrets-file <path>` — was not mentioned anywhere in the error output.
10+
11+
The pre-deploy error now explains that `wrangler secret put` cannot be used for a new Worker, and directs users to the `--secrets-file` flag instead. The post-deploy error for existing Workers now also mentions `--secrets-file` alongside `wrangler secret put`.

packages/deploy-helpers/src/deploy/helpers/secrets-validation.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,12 @@ export function addRequiredSecretsInheritBindings(
3434
if (options.type === "deploy" && !options.workerExists) {
3535
throw new UserError(
3636
`The following required secrets have not been set: ${inheritedSecrets.join(", ")}\n` +
37-
`Use \`wrangler secret put <NAME>\` to set secrets before deploying.\n` +
37+
`This Worker does not exist yet, so secrets cannot be set in advance with \`wrangler secret put\`.\n` +
38+
`To deploy a new Worker with secrets, supply them via a secrets file:\n` +
39+
` wrangler deploy --secrets-file <path-to-file>\n` +
40+
`where the file contains lines in the format \`SECRET_NAME=value\` (or JSON).\n` +
3841
`See https://developers.cloudflare.com/workers/configuration/secrets/#secrets-on-deployed-workers for more information.`,
39-
{ telemetryMessage: "required secrets missing before deploy" }
42+
{ telemetryMessage: "required secrets missing before first deploy" }
4043
);
4144
}
4245

@@ -68,9 +71,13 @@ export function handleMissingSecretsError(
6871

6972
if (missingSecretNames.length > 0) {
7073
err.preventReport();
74+
const secretPutCommand = `wrangler ${options.type === "deploy" ? "" : "versions "}secret put`;
75+
const secretsFileCommand = `wrangler ${options.type === "deploy" ? "deploy" : "versions upload"} --secrets-file <path-to-file>`;
76+
const action = options.type === "deploy" ? "deploying" : "uploading";
7177
throw new UserError(
7278
`The following required secrets have not been set: ${missingSecretNames.join(", ")}\n` +
73-
`Use \`wrangler ${options.type === "deploy" ? "secret put" : "versions secret put"} <NAME>\` to set secrets before ${options.type === "deploy" ? "deploying" : "uploading"}.\n` +
79+
`Use \`${secretPutCommand} <NAME>\` to set secrets before ${action},\n` +
80+
`or supply them when ${action} with \`${secretsFileCommand}\`.\n` +
7481
`See https://developers.cloudflare.com/workers/configuration/secrets/#secrets-on-deployed-workers for more information.`,
7582
{ telemetryMessage: "required secrets missing during upload or deploy" }
7683
);

packages/wrangler/src/__tests__/deploy/secrets.test.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,8 @@ SECRET3=value3`
338338
runWrangler("deploy index.js")
339339
).rejects.toThrowErrorMatchingInlineSnapshot(
340340
`[Error: The following required secrets have not been set: API_KEY, DB_PASSWORD
341-
Use \`wrangler secret put <NAME>\` to set secrets before deploying.
341+
Use \`wrangler secret put <NAME>\` to set secrets before deploying,
342+
or supply them when deploying with \`wrangler deploy --secrets-file <path-to-file>\`.
342343
See https://developers.cloudflare.com/workers/configuration/secrets/#secrets-on-deployed-workers for more information.]`
343344
);
344345
});
@@ -358,7 +359,10 @@ See https://developers.cloudflare.com/workers/configuration/secrets/#secrets-on-
358359
runWrangler("deploy index.js")
359360
).rejects.toThrowErrorMatchingInlineSnapshot(
360361
`[Error: The following required secrets have not been set: API_KEY, DB_PASSWORD
361-
Use \`wrangler secret put <NAME>\` to set secrets before deploying.
362+
This Worker does not exist yet, so secrets cannot be set in advance with \`wrangler secret put\`.
363+
To deploy a new Worker with secrets, supply them via a secrets file:
364+
wrangler deploy --secrets-file <path-to-file>
365+
where the file contains lines in the format \`SECRET_NAME=value\` (or JSON).
362366
See https://developers.cloudflare.com/workers/configuration/secrets/#secrets-on-deployed-workers for more information.]`
363367
);
364368
});
@@ -432,7 +436,10 @@ See https://developers.cloudflare.com/workers/configuration/secrets/#secrets-on-
432436
runWrangler(`deploy --secrets-file ${secretsFile}`)
433437
).rejects.toThrowErrorMatchingInlineSnapshot(
434438
`[Error: The following required secrets have not been set: SECRET2, SECRET3
435-
Use \`wrangler secret put <NAME>\` to set secrets before deploying.
439+
This Worker does not exist yet, so secrets cannot be set in advance with \`wrangler secret put\`.
440+
To deploy a new Worker with secrets, supply them via a secrets file:
441+
wrangler deploy --secrets-file <path-to-file>
442+
where the file contains lines in the format \`SECRET_NAME=value\` (or JSON).
436443
See https://developers.cloudflare.com/workers/configuration/secrets/#secrets-on-deployed-workers for more information.]`
437444
);
438445
});

packages/wrangler/src/__tests__/versions/secrets.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,8 @@ SECRET3=value3`
331331
runWrangler(`versions upload --name ${workerName}`)
332332
).rejects.toThrowErrorMatchingInlineSnapshot(
333333
`[Error: The following required secrets have not been set: API_KEY, DB_PASSWORD
334-
Use \`wrangler versions secret put <NAME>\` to set secrets before uploading.
334+
Use \`wrangler versions secret put <NAME>\` to set secrets before uploading,
335+
or supply them when uploading with \`wrangler versions upload --secrets-file <path-to-file>\`.
335336
See https://developers.cloudflare.com/workers/configuration/secrets/#secrets-on-deployed-workers for more information.]`
336337
);
337338
});

0 commit comments

Comments
 (0)