From 7efd1034dc51cec8032ec3dd82668872ffff81f7 Mon Sep 17 00:00:00 2001 From: Will Taylor Date: Fri, 7 Feb 2025 09:30:30 -0500 Subject: [PATCH] Inherit bindings in versions secret put --- .changeset/kind-sloths-speak.md | 5 +++ .../__tests__/versions/secrets/bulk.test.ts | 5 +++ .../__tests__/versions/secrets/delete.test.ts | 3 ++ .../__tests__/versions/secrets/put.test.ts | 40 +++++++++++++++++++ .../src/__tests__/versions/secrets/utils.ts | 5 +++ .../wrangler/src/versions/secrets/index.ts | 21 +++++----- 6 files changed, 68 insertions(+), 11 deletions(-) create mode 100644 .changeset/kind-sloths-speak.md diff --git a/.changeset/kind-sloths-speak.md b/.changeset/kind-sloths-speak.md new file mode 100644 index 0000000000000..82522ed41fda0 --- /dev/null +++ b/.changeset/kind-sloths-speak.md @@ -0,0 +1,5 @@ +--- +"wrangler": minor +--- + +Bugfix: Modified versions secret put to inherit all known bindings, which circumvents a limitation in the API which does not return all fields for all bindings. diff --git a/packages/wrangler/src/__tests__/versions/secrets/bulk.test.ts b/packages/wrangler/src/__tests__/versions/secrets/bulk.test.ts index 25aeb7e196e93..6e6ab84635d64 100644 --- a/packages/wrangler/src/__tests__/versions/secrets/bulk.test.ts +++ b/packages/wrangler/src/__tests__/versions/secrets/bulk.test.ts @@ -49,6 +49,7 @@ describe("versions secret bulk", () => { mockSetupApiCalls(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "secret_text", name: "SECRET_1", text: "secret-1" }, { type: "secret_text", name: "SECRET_2", text: "secret-2" }, { type: "secret_text", name: "SECRET_3", text: "secret-3" }, @@ -119,6 +120,7 @@ describe("versions secret bulk", () => { mockSetupApiCalls(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "secret_text", name: "SECRET_1", text: "secret-1" }, { type: "secret_text", name: "SECRET_2", text: "secret-2" }, { type: "secret_text", name: "SECRET_3", text: "secret-3" }, @@ -164,6 +166,7 @@ describe("versions secret bulk", () => { mockSetupApiCalls(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "secret_text", name: "SECRET_1", text: "secret-1" }, { type: "secret_text", name: "SECRET_2", text: "secret-2" }, { type: "secret_text", name: "SECRET_3", text: "secret-3" }, @@ -205,6 +208,7 @@ describe("versions secret bulk", () => { mockSetupApiCalls(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "secret_text", name: "SECRET_1", text: "secret-1" }, { type: "secret_text", name: "SECRET_2", text: "secret-2" }, { type: "secret_text", name: "SECRET_3", text: "secret-3" }, @@ -249,6 +253,7 @@ describe("versions secret bulk", () => { mockSetupApiCalls(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "secret_text", name: "SECRET_1", text: "secret-1" }, { type: "secret_text", name: "SECRET_2", text: "secret-2" }, { type: "secret_text", name: "SECRET_3", text: "secret-3" }, diff --git a/packages/wrangler/src/__tests__/versions/secrets/delete.test.ts b/packages/wrangler/src/__tests__/versions/secrets/delete.test.ts index 53a6b3d60d21b..c41b9c7cdabfe 100644 --- a/packages/wrangler/src/__tests__/versions/secrets/delete.test.ts +++ b/packages/wrangler/src/__tests__/versions/secrets/delete.test.ts @@ -32,6 +32,7 @@ describe("versions secret delete", () => { mockPostVersion((metadata) => { // We should have all secrets except the one being deleted expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "inherit", name: "ANOTHER_SECRET" }, { type: "inherit", name: "YET_ANOTHER_SECRET" }, ]); @@ -55,6 +56,7 @@ describe("versions secret delete", () => { mockGetVersion(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "inherit", name: "ANOTHER_SECRET" }, { type: "inherit", name: "YET_ANOTHER_SECRET" }, ]); @@ -82,6 +84,7 @@ describe("versions secret delete", () => { mockGetVersion(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "inherit", name: "ANOTHER_SECRET" }, { type: "inherit", name: "YET_ANOTHER_SECRET" }, ]); diff --git a/packages/wrangler/src/__tests__/versions/secrets/put.test.ts b/packages/wrangler/src/__tests__/versions/secrets/put.test.ts index 2c13b5761c832..efee90d798a87 100644 --- a/packages/wrangler/src/__tests__/versions/secrets/put.test.ts +++ b/packages/wrangler/src/__tests__/versions/secrets/put.test.ts @@ -35,6 +35,7 @@ describe("versions secret put", () => { mockSetupApiCalls(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "secret_text", name: "NEW_SECRET", text: "the-secret" }, ]); expect(metadata.keep_bindings).toStrictEqual([ @@ -97,6 +98,7 @@ describe("versions secret put", () => { mockSetupApiCalls(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "secret_text", name: "NEW_SECRET", text: "the-secret" }, ]); expect(metadata.keep_bindings).toStrictEqual([ @@ -138,6 +140,7 @@ describe("versions secret put", () => { mockSetupApiCalls(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "secret_text", name: "NEW_SECRET", text: "the-secret" }, ]); expect(metadata.keep_bindings).toStrictEqual([ @@ -178,6 +181,7 @@ describe("versions secret put", () => { mockSetupApiCalls(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "secret_text", name: "NEW_SECRET", text: "the-secret" }, ]); expect(metadata.keep_bindings).toStrictEqual([ @@ -208,6 +212,7 @@ describe("versions secret put", () => { mockSetupApiCalls(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "secret_text", name: "NEW_SECRET", text: "the-secret" }, ]); expect(metadata.keep_bindings).toStrictEqual([ @@ -245,6 +250,7 @@ describe("versions secret put", () => { mockSetupApiCalls(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "secret_text", name: "NEW_SECRET", text: "the-secret" }, ]); expect(metadata.keep_bindings).toStrictEqual([ @@ -273,6 +279,38 @@ describe("versions secret put", () => { expect(std.err).toMatchInlineSnapshot(`""`); }); + test("all non-secret bindings are inherited", async () => { + setIsTTY(true); + + mockSetupApiCalls(); + + mockPrompt({ + text: "Enter a secret value:", + options: { isSecret: true }, + result: "the-secret", + }); + + mockPostVersion((metadata, formData) => { + expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, + { type: "secret_text", name: "SECRET", text: "the-secret" }, + ]); + expect(metadata.keep_bindings).toStrictEqual([ + "secret_key", + "secret_text", + ]); + expect(metadata.annotations).not.toBeUndefined(); + }); + await runWrangler("versions secret put SECRET --name script-name"); + + expect(std.out).toMatchInlineSnapshot(` + "🌀 Creating the secret for the Worker \\"script-name\\" + ✨ Success! Created version id with secret SECRET. + ➡️ To deploy this version with secret SECRET to production traffic use the command \\"wrangler versions deploy\\"." + `); + expect(std.err).toMatchInlineSnapshot(`""`); + }); + test("can update an existing secret", async () => { setIsTTY(true); @@ -285,6 +323,7 @@ describe("versions secret put", () => { mockSetupApiCalls(); mockPostVersion((metadata) => { expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "secret_text", name: "SECRET", text: "the-secret" }, ]); expect(metadata.keep_bindings).toStrictEqual([ @@ -361,6 +400,7 @@ describe("versions secret put", () => { expect((formData.get("module.wasm") as File).size).equal(10); expect(metadata.bindings).toStrictEqual([ + { type: "inherit", name: "do-binding" }, { type: "secret_text", name: "SECRET", text: "the-secret" }, ]); expect(metadata.keep_bindings).toStrictEqual([ diff --git a/packages/wrangler/src/__tests__/versions/secrets/utils.ts b/packages/wrangler/src/__tests__/versions/secrets/utils.ts index 2f074c26fd626..74d0e2240ddd6 100644 --- a/packages/wrangler/src/__tests__/versions/secrets/utils.ts +++ b/packages/wrangler/src/__tests__/versions/secrets/utils.ts @@ -59,6 +59,11 @@ export function mockGetVersion(versionInfo?: VersionDetails) { name: "YET_ANOTHER_SECRET", text: "Yet another secret shhhhh", }, + { + name: "do-binding", + type: "durable_object_namespace", + namespace_id: "some-namespace-id", + }, ], script: { etag: "etag", diff --git a/packages/wrangler/src/versions/secrets/index.ts b/packages/wrangler/src/versions/secrets/index.ts index e7e4931f087f4..b98ed25e0e320 100644 --- a/packages/wrangler/src/versions/secrets/index.ts +++ b/packages/wrangler/src/versions/secrets/index.ts @@ -122,18 +122,17 @@ export async function copyWorkerVersionWithNewSecrets({ ); // Filter out secrets because we're gonna inherit them - const bindings: WorkerMetadataBinding[] = - versionInfo.resources.bindings.filter( - (binding) => binding.type !== "secret_text" - ); + let bindings: WorkerMetadataBinding[] = versionInfo.resources.bindings.filter( + (binding) => binding.type !== "secret_text" + ); - // We cannot upload a DO with a namespace_id so remove it - for (const binding of bindings) { - if (binding.type === "durable_object_namespace") { - // @ts-expect-error - it doesn't exist within wrangler but does in the API - delete binding.namespace_id; - } - } + // Inherit all of the existing bindings + bindings = bindings.map((binding) => { + return { + name: binding.name, + type: "inherit", + }; + }); // Add the new secrets for (const secret of secrets) {