Skip to content

Commit

Permalink
Provide unsafe metadata for wrangler versions secret put (#8037)
Browse files Browse the repository at this point in the history
  • Loading branch information
WillTaylorDev authored Feb 7, 2025
1 parent ca5e942 commit 71fd250
Show file tree
Hide file tree
Showing 6 changed files with 166 additions and 1 deletion.
5 changes: 5 additions & 0 deletions .changeset/wise-pants-raise.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"wrangler": minor
---

Provides unsafe.metadata configurations when using wrangler versions secret put.
90 changes: 90 additions & 0 deletions packages/wrangler/src/__tests__/versions/secrets/bulk.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { mockConsoleMethods } from "../../helpers/mock-console";
import { clearDialogs } from "../../helpers/mock-dialogs";
import { runInTempDir } from "../../helpers/run-in-tmp";
import { runWrangler } from "../../helpers/run-wrangler";
import { writeWranglerConfig } from "../../helpers/write-wrangler-config";
import { mockPostVersion, mockSetupApiCalls } from "./utils";
import type { Interface } from "node:readline";

Expand Down Expand Up @@ -184,4 +185,93 @@ describe("versions secret bulk", () => {
"
`);
});

test("unsafe metadata is provided", async () => {
writeWranglerConfig({
name: "script-name",
unsafe: { metadata: { build_options: { stable_id: "foo/bar" } } },
});

await writeFile(
"secrets.json",
JSON.stringify({
SECRET_1: "secret-1",
SECRET_2: "secret-2",
SECRET_3: "secret-3",
}),
{ encoding: "utf8" }
);

mockSetupApiCalls();
mockPostVersion((metadata) => {
expect(metadata.bindings).toStrictEqual([
{ 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" },
]);
expect(metadata.keep_bindings).toStrictEqual([
"secret_key",
"secret_text",
]);
expect(metadata.keep_assets).toBeTruthy();
expect(metadata["build_options"]).toStrictEqual({ stable_id: "foo/bar" });
});

await runWrangler(`versions secret bulk secrets.json --name script-name`);
expect(std.out).toMatchInlineSnapshot(
`
"🌀 Creating the secrets for the Worker \\"script-name\\"
✨ Successfully created secret for key: SECRET_1
✨ Successfully created secret for key: SECRET_2
✨ Successfully created secret for key: SECRET_3
✨ Success! Created version id with 3 secrets.
➡️ To deploy this version to production traffic use the command \\"wrangler versions deploy\\"."
`
);
expect(std.err).toMatchInlineSnapshot(`""`);
});

test("unsafe metadata not included if not in wrangler.toml", async () => {
writeWranglerConfig({
name: "script-name",
});

await writeFile(
"secrets.json",
JSON.stringify({
SECRET_1: "secret-1",
SECRET_2: "secret-2",
SECRET_3: "secret-3",
}),
{ encoding: "utf8" }
);

mockSetupApiCalls();
mockPostVersion((metadata) => {
expect(metadata.bindings).toStrictEqual([
{ 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" },
]);
expect(metadata.keep_bindings).toStrictEqual([
"secret_key",
"secret_text",
]);
expect(metadata.keep_assets).toBeTruthy();
expect(metadata["build_options"]).toBeUndefined();
});

await runWrangler(`versions secret bulk secrets.json --name script-name`);
expect(std.out).toMatchInlineSnapshot(
`
"🌀 Creating the secrets for the Worker \\"script-name\\"
✨ Successfully created secret for key: SECRET_1
✨ Successfully created secret for key: SECRET_2
✨ Successfully created secret for key: SECRET_3
✨ Success! Created version id with 3 secrets.
➡️ To deploy this version to production traffic use the command \\"wrangler versions deploy\\"."
`
);
expect(std.err).toMatchInlineSnapshot(`""`);
});
});
62 changes: 62 additions & 0 deletions packages/wrangler/src/__tests__/versions/secrets/put.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,68 @@ describe("versions secret put", () => {
expect(std.err).toMatchInlineSnapshot(`""`);
});

test("unsafe metadata is provided", async () => {
writeWranglerConfig({
name: "script-name",
unsafe: { metadata: { build_options: { stable_id: "foo/bar" } } },
});

setIsTTY(true);

mockPrompt({
text: "Enter a secret value:",
options: { isSecret: true },
result: "the-secret",
});

mockSetupApiCalls();
mockPostVersion((metadata) => {
expect(metadata["build_options"]).toStrictEqual({ stable_id: "foo/bar" });
});
await runWrangler("versions secret put NEW_SECRET --name script-name");

expect(std.out).toMatchInlineSnapshot(`
"🌀 Creating the secret for the Worker \\"script-name\\"
✨ Success! Created version id with secret NEW_SECRET.
➡️ To deploy this version with secret NEW_SECRET to production traffic use the command \\"wrangler versions deploy\\"."
`);
expect(std.err).toMatchInlineSnapshot(`""`);
});

test("unsafe metadata not included if not in wrangler.toml", async () => {
writeWranglerConfig({
name: "script-name",
});

setIsTTY(true);

mockPrompt({
text: "Enter a secret value:",
options: { isSecret: true },
result: "the-secret",
});

mockSetupApiCalls();
mockPostVersion((metadata) => {
expect(metadata.bindings).toStrictEqual([
{ type: "secret_text", name: "NEW_SECRET", text: "the-secret" },
]);
expect(metadata.keep_bindings).toStrictEqual([
"secret_key",
"secret_text",
]);
expect(metadata["build_options"]).toBeUndefined();
});
await runWrangler("versions secret put NEW_SECRET --name script-name");

expect(std.out).toMatchInlineSnapshot(`
"🌀 Creating the secret for the Worker \\"script-name\\"
✨ Success! Created version id with secret NEW_SECRET.
➡️ To deploy this version with secret NEW_SECRET to production traffic use the command \\"wrangler versions deploy\\"."
`);
expect(std.err).toMatchInlineSnapshot(`""`);
});

test("no wrangler configuration warnings shown", async () => {
await writeFile("wrangler.json", JSON.stringify({ invalid_field: true }));
setIsTTY(true);
Expand Down
1 change: 1 addition & 0 deletions packages/wrangler/src/versions/secrets/bulk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ export const versionsSecretBulkCommand = createCommand({
versionMessage: args.message ?? `Bulk updated ${secrets.length} secrets`,
versionTag: args.tag,
sendMetrics: config.send_metrics,
unsafeMetadata: config.unsafe.metadata,
});

for (const secret of secrets) {
Expand Down
8 changes: 7 additions & 1 deletion packages/wrangler/src/versions/secrets/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ interface ScriptSettings {
observability: Observability;
}

type CfUnsafeMetadata = Record<string, unknown>;

interface CopyLatestWorkerVersionArgs {
accountId: string;
scriptName: string;
Expand All @@ -87,6 +89,7 @@ interface CopyLatestWorkerVersionArgs {
versionTag?: string;
sendMetrics?: boolean;
overrideAllSecrets?: boolean; // Used for delete - this will make sure we do not inherit any
unsafeMetadata?: CfUnsafeMetadata | undefined;
}

// TODO: This is a naive implementation, replace later
Expand All @@ -98,6 +101,7 @@ export async function copyWorkerVersionWithNewSecrets({
versionMessage,
versionTag,
sendMetrics,
unsafeMetadata,
overrideAllSecrets,
}: CopyLatestWorkerVersionArgs) {
// Grab the specific version info
Expand Down Expand Up @@ -157,7 +161,9 @@ export async function copyWorkerVersionWithNewSecrets({
const worker: CfWorkerInit = {
name: scriptName,
main: mainModule,
bindings: {} as CfWorkerInit["bindings"], // handled in rawBindings
bindings: {
unsafe: { metadata: unsafeMetadata }, // pass along unsafe metadata
} as CfWorkerInit["bindings"], // handled in rawBindings
rawBindings: bindings,
modules,
sourceMaps: sourceMaps,
Expand Down
1 change: 1 addition & 0 deletions packages/wrangler/src/versions/secrets/put.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ export const versionsSecretPutCommand = createCommand({
versionMessage: args.message ?? `Updated secret "${args.key}"`,
versionTag: args.tag,
sendMetrics: config.send_metrics,
unsafeMetadata: config.unsafe.metadata,
});

logger.log(
Expand Down

0 comments on commit 71fd250

Please sign in to comment.