Skip to content

Commit 26adce7

Browse files
WC-4047 Respect keep_vars for versions upload (#10865)
Previously, versions uploaded was hardcoded to be false, but users are confused that this behavior differs from deploy. Instead, we should inherit the value from keep_vars, defaulting to false if not provided. This aligns with the deploy behavior.
1 parent f78b77f commit 26adce7

File tree

3 files changed

+126
-2
lines changed

3 files changed

+126
-2
lines changed

.changeset/lovely-spoons-rhyme.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"wrangler": patch
3+
---
4+
5+
Respect keep_vars for wrangler versions upload.

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

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -765,6 +765,125 @@ describe("versions upload", () => {
765765
expect(std.warn).toMatchInlineSnapshot(`""`);
766766
});
767767
});
768+
769+
describe("keep_vars", () => {
770+
beforeEach(() => {
771+
mockGetScript();
772+
mockGetWorkerSubdomain({ enabled: true, previews_enabled: false });
773+
writeWorkerSource();
774+
setIsTTY(false);
775+
});
776+
777+
test("should include plain_text and json in keep_bindings when keep_vars is true", async () => {
778+
const mockUploadVersionCapture = captureRequestsFrom(
779+
http.post(
780+
`*/accounts/:accountId/workers/scripts/:scriptName/versions`,
781+
async () => {
782+
return HttpResponse.json(
783+
createFetchResult({
784+
id: "version-id",
785+
startup_time_ms: 500,
786+
metadata: {
787+
has_preview: false,
788+
},
789+
})
790+
);
791+
}
792+
)
793+
)();
794+
795+
writeWranglerConfig({
796+
name: "test-name",
797+
main: "./index.js",
798+
keep_vars: true,
799+
});
800+
801+
await runWrangler("versions upload");
802+
803+
const request = mockUploadVersionCapture.requests[0];
804+
const formBody = await request.clone().formData();
805+
const metadata = JSON.parse(
806+
await toString(formBody.get("metadata"))
807+
) as WorkerMetadata;
808+
809+
expect(metadata.keep_bindings).toEqual(
810+
expect.arrayContaining(["plain_text", "json"])
811+
);
812+
});
813+
814+
test("should not include plain_text and json in keep_bindings when keep_vars is false", async () => {
815+
const mockUploadVersionCapture = captureRequestsFrom(
816+
http.post(
817+
`*/accounts/:accountId/workers/scripts/:scriptName/versions`,
818+
async () => {
819+
return HttpResponse.json(
820+
createFetchResult({
821+
id: "version-id",
822+
startup_time_ms: 500,
823+
metadata: {
824+
has_preview: false,
825+
},
826+
})
827+
);
828+
}
829+
)
830+
)();
831+
832+
writeWranglerConfig({
833+
name: "test-name",
834+
main: "./index.js",
835+
keep_vars: false,
836+
});
837+
838+
await runWrangler("versions upload");
839+
840+
const request = mockUploadVersionCapture.requests[0];
841+
const formBody = await request.clone().formData();
842+
const metadata = JSON.parse(
843+
await toString(formBody.get("metadata"))
844+
) as WorkerMetadata;
845+
846+
expect(metadata.keep_bindings).not.toEqual(
847+
expect.arrayContaining(["plain_text", "json"])
848+
);
849+
});
850+
851+
test("should not include plain_text and json in keep_bindings when keep_vars is not provided", async () => {
852+
const mockUploadVersionCapture = captureRequestsFrom(
853+
http.post(
854+
`*/accounts/:accountId/workers/scripts/:scriptName/versions`,
855+
async () => {
856+
return HttpResponse.json(
857+
createFetchResult({
858+
id: "version-id",
859+
startup_time_ms: 500,
860+
metadata: {
861+
has_preview: false,
862+
},
863+
})
864+
);
865+
}
866+
)
867+
)();
868+
869+
writeWranglerConfig({
870+
name: "test-name",
871+
main: "./index.js",
872+
});
873+
874+
await runWrangler("versions upload");
875+
876+
const request = mockUploadVersionCapture.requests[0];
877+
const formBody = await request.clone().formData();
878+
const metadata = JSON.parse(
879+
await toString(formBody.get("metadata"))
880+
) as WorkerMetadata;
881+
882+
expect(metadata.keep_bindings).not.toEqual(
883+
expect.arrayContaining(["plain_text", "json"])
884+
);
885+
});
886+
});
768887
});
769888

770889
const mockExecSync = vi.fn();

packages/wrangler/src/versions/upload.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ export const versionsUploadCommand = createCommand({
383383
outDir: args.outdir,
384384
dryRun: args.dryRun,
385385
noBundle: !(args.bundle ?? !config.no_bundle),
386-
keepVars: false,
386+
keepVars: config.keep_vars,
387387
projectRoot: entry.projectRoot,
388388
tag: args.tag,
389389
message: args.message,
@@ -701,7 +701,7 @@ See https://developers.cloudflare.com/workers/platform/compatibility-dates for m
701701
: undefined,
702702
compatibility_date: compatibilityDate,
703703
compatibility_flags: compatibilityFlags,
704-
keepVars: false, // the wrangler.toml should be the source-of-truth for vars
704+
keepVars: props.keepVars ?? false,
705705
keepSecrets: true, // until wrangler.toml specifies secret bindings, we need to inherit from the previous Worker Version
706706
placement,
707707
tail_consumers: config.tail_consumers,

0 commit comments

Comments
 (0)