From 6ca4cbfcdbdf969e23a1292fd8998a6900e89a41 Mon Sep 17 00:00:00 2001 From: Taylor Lee Date: Mon, 11 Nov 2024 08:41:15 -0800 Subject: [PATCH] feat(wrangler): create separate config for workers_dev_previews The current Preview URLs (beta) feature routes to version preview urls based on the status of the `workers_dev` config value. Beta users have requested the ability to enable deployment urls and preview urls separately on `workers.dev`, and the new `previews_enabled` field of the enable-subdomain API will allow that. This change separates the `workers_dev` and `workers_dev_previews` behavior during `wrangler triggers deploy` and `wrangler versions upload`. `wrangler_dev_previews` defaults to true, and does not implicitly depend on routes the way `wrangler_dev` does. --- .changeset/famous-mayflies-knock.md | 8 + .../wrangler/src/__tests__/deploy.test.ts | 94 ++++++++++- .../helpers/mock-workers-subdomain.ts | 14 +- .../versions/versions.upload.test.ts | 6 +- packages/wrangler/src/config/config.ts | 1 + packages/wrangler/src/config/environment.ts | 9 ++ packages/wrangler/src/config/validation.ts | 10 ++ packages/wrangler/src/init.ts | 2 + packages/wrangler/src/triggers/deploy.ts | 146 ++++++++++-------- packages/wrangler/src/versions/upload.ts | 9 +- 10 files changed, 224 insertions(+), 75 deletions(-) create mode 100644 .changeset/famous-mayflies-knock.md diff --git a/.changeset/famous-mayflies-knock.md b/.changeset/famous-mayflies-knock.md new file mode 100644 index 0000000000000..e04e9fdf3f0d5 --- /dev/null +++ b/.changeset/famous-mayflies-knock.md @@ -0,0 +1,8 @@ +--- +"wrangler": minor +--- + +Add `workers_dev_previews` toggle to `wrangler.toml` + + +The current Preview URLs (beta) feature routes to version preview urls based on the status of the `workers_dev` config value. Beta users have requested the ability to enable deployment urls and preview urls separately on `workers.dev`, and the new `previews_enabled` field of the enable-subdomain API will allow that. This change separates the `workers_dev` and `workers_dev_previews` behavior during `wrangler triggers deploy` and `wrangler versions upload`. `wrangler_dev_previews` defaults to true, and does not implicitly depend on routes the way `wrangler_dev` does. diff --git a/packages/wrangler/src/__tests__/deploy.test.ts b/packages/wrangler/src/__tests__/deploy.test.ts index 69bee6971d5cc..d0235066d5272 100644 --- a/packages/wrangler/src/__tests__/deploy.test.ts +++ b/packages/wrangler/src/__tests__/deploy.test.ts @@ -5050,7 +5050,7 @@ addEventListener('fetch', event => {});` expect(std.err).toMatchInlineSnapshot(`""`); }); - it("should not try to enable the workers.dev domain if it has been enabled before", async () => { + it("should not try to enable the workers.dev domain if it has been enabled before and previews are in sync", async () => { writeWranglerToml({ workers_dev: true, }); @@ -5072,6 +5072,53 @@ addEventListener('fetch', event => {});` expect(std.err).toMatchInlineSnapshot(`""`); }); + it("should sync the workers.dev domain if it has been enabled before but previews should be enabled", async () => { + writeWranglerToml({ + workers_dev: true, + }); + writeWorkerSource(); + mockUploadWorkerRequest(); + mockGetWorkerSubdomain({ enabled: true, previews_enabled: false }); + mockSubDomainRequest(); + mockUpdateWorkerSubdomain({ enabled: true, previews_enabled: true }); + + await runWrangler("deploy ./index"); + + expect(std.out).toMatchInlineSnapshot(` + "Total Upload: xx KiB / gzip: xx KiB + Worker Startup Time: 100 ms + Uploaded test-name (TIMINGS) + Deployed test-name triggers (TIMINGS) + https://test-name.test-sub-domain.workers.dev + Current Version ID: Galaxy-Class" + `); + expect(std.err).toMatchInlineSnapshot(`""`); + }); + + it("should sync the workers.dev domain if it has been enabled before but previews should be enabled", async () => { + writeWranglerToml({ + workers_dev: true, + workers_dev_previews: false, + }); + writeWorkerSource(); + mockUploadWorkerRequest(); + mockGetWorkerSubdomain({ enabled: true, previews_enabled: true }); + mockSubDomainRequest(); + mockUpdateWorkerSubdomain({ enabled: true, previews_enabled: false }); + + await runWrangler("deploy ./index"); + + expect(std.out).toMatchInlineSnapshot(` + "Total Upload: xx KiB / gzip: xx KiB + Worker Startup Time: 100 ms + Uploaded test-name (TIMINGS) + Deployed test-name triggers (TIMINGS) + https://test-name.test-sub-domain.workers.dev + Current Version ID: Galaxy-Class" + `); + expect(std.err).toMatchInlineSnapshot(`""`); + }); + it("should disable the workers.dev domain if workers_dev is `false`", async () => { writeWranglerToml({ workers_dev: false, @@ -5093,7 +5140,7 @@ addEventListener('fetch', event => {});` expect(std.err).toMatchInlineSnapshot(`""`); }); - it("should not try to disable the workers.dev domain if it is not already available", async () => { + it("should not try to disable the workers.dev domain if it is not already available and previews are in sync", async () => { writeWranglerToml({ workers_dev: false, }); @@ -5115,6 +5162,49 @@ addEventListener('fetch', event => {});` expect(std.err).toMatchInlineSnapshot(`""`); }); + it("should sync the workers.dev domain if it is not available but previews should be enabled", async () => { + writeWranglerToml({ + workers_dev: false, + }); + writeWorkerSource(); + mockUploadWorkerRequest(); + mockGetWorkerSubdomain({ enabled: false, previews_enabled: false }); + mockUpdateWorkerSubdomain({ enabled: false, previews_enabled: true }); + + await runWrangler("deploy ./index"); + + expect(std.out).toMatchInlineSnapshot(` + "Total Upload: xx KiB / gzip: xx KiB + Worker Startup Time: 100 ms + Uploaded test-name (TIMINGS) + No deploy targets for test-name (TIMINGS) + Current Version ID: Galaxy-Class" + `); + expect(std.err).toMatchInlineSnapshot(`""`); + }); + + it("should sync the workers.dev domain if it is not available but previews should be disabled", async () => { + writeWranglerToml({ + workers_dev: false, + workers_dev_previews: false, + }); + writeWorkerSource(); + mockUploadWorkerRequest(); + mockGetWorkerSubdomain({ enabled: false, previews_enabled: true }); + mockUpdateWorkerSubdomain({ enabled: false, previews_enabled: false }); + + await runWrangler("deploy ./index"); + + expect(std.out).toMatchInlineSnapshot(` + "Total Upload: xx KiB / gzip: xx KiB + Worker Startup Time: 100 ms + Uploaded test-name (TIMINGS) + No deploy targets for test-name (TIMINGS) + Current Version ID: Galaxy-Class" + `); + expect(std.err).toMatchInlineSnapshot(`""`); + }); + it("should disable the workers.dev domain if workers_dev is undefined but overwritten to `false` in environment", async () => { writeWranglerToml({ env: { diff --git a/packages/wrangler/src/__tests__/helpers/mock-workers-subdomain.ts b/packages/wrangler/src/__tests__/helpers/mock-workers-subdomain.ts index c96c9f7e14ccc..3185346ba6d83 100644 --- a/packages/wrangler/src/__tests__/helpers/mock-workers-subdomain.ts +++ b/packages/wrangler/src/__tests__/helpers/mock-workers-subdomain.ts @@ -36,11 +36,13 @@ export function mockSubDomainRequest( /** Create a mock handler to fetch the