From e400d994a1efb670fcadf61882e87176c7983749 Mon Sep 17 00:00:00 2001 From: Daniel Rivas <1887507+danielrs@users.noreply.github.com> Date: Wed, 3 Sep 2025 18:33:51 -0500 Subject: [PATCH 1/2] wrangler: test: fix e2e tests regarding recent preview_urls defaulting to false Fixes existing tests, and adds a new test for `preview_urls = true`. --- packages/wrangler/e2e/versions.test.ts | 52 +++++++++++++++++++++----- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/packages/wrangler/e2e/versions.test.ts b/packages/wrangler/e2e/versions.test.ts index ad3b6cb221db..07525adf9adf 100644 --- a/packages/wrangler/e2e/versions.test.ts +++ b/packages/wrangler/e2e/versions.test.ts @@ -37,7 +37,6 @@ describe.skipIf(!CLOUDFLARE_ACCOUNT_ID)( name = "${workerName}" main = "src/index.ts" compatibility_date = "2023-01-01" - preview_urls = true `, "src/index.ts": dedent` export default { @@ -70,7 +69,6 @@ describe.skipIf(!CLOUDFLARE_ACCOUNT_ID)( Worker Startup Time: (TIMINGS) Uploaded tmp-e2e-worker-00000000-0000-0000-0000-000000000000 (TIMINGS) Worker Version ID: 00000000-0000-0000-0000-000000000000 - Version Preview URL: https://tmp-e2e-worker-PREVIEW-URL.SUBDOMAIN.workers.dev To deploy this version to production traffic use the command wrangler versions deploy Changes to non-versioned settings (config properties 'logpush' or 'tail_consumers') take effect after your next deployment using the command wrangler versions deploy Changes to triggers (routes, custom domains, cron schedules, etc) must be applied with the command wrangler triggers deploy" @@ -186,7 +184,6 @@ describe.skipIf(!CLOUDFLARE_ACCOUNT_ID)( Worker Startup Time: (TIMINGS) Uploaded tmp-e2e-worker-00000000-0000-0000-0000-000000000000 (TIMINGS) Worker Version ID: 00000000-0000-0000-0000-000000000000 - Version Preview URL: https://tmp-e2e-worker-PREVIEW-URL.SUBDOMAIN.workers.dev To deploy this version to production traffic use the command wrangler versions deploy Changes to non-versioned settings (config properties 'logpush' or 'tail_consumers') take effect after your next deployment using the command wrangler versions deploy Changes to triggers (routes, custom domains, cron schedules, etc) must be applied with the command wrangler triggers deploy" @@ -590,7 +587,6 @@ describe.skipIf(!CLOUDFLARE_ACCOUNT_ID)( Worker Startup Time: (TIMINGS) Uploaded tmp-e2e-worker-00000000-0000-0000-0000-000000000000 (TIMINGS) Worker Version ID: 00000000-0000-0000-0000-000000000000 - Version Preview URL: https://tmp-e2e-worker-PREVIEW-URL.SUBDOMAIN.workers.dev To deploy this version to production traffic use the command wrangler versions deploy Changes to non-versioned settings (config properties 'logpush' or 'tail_consumers') take effect after your next deployment using the command wrangler versions deploy Changes to triggers (routes, custom domains, cron schedules, etc) must be applied with the command wrangler triggers deploy" @@ -632,7 +628,6 @@ describe.skipIf(!CLOUDFLARE_ACCOUNT_ID)( Worker Startup Time: (TIMINGS) Uploaded tmp-e2e-worker-00000000-0000-0000-0000-000000000000 (TIMINGS) Worker Version ID: 00000000-0000-0000-0000-000000000000 - Version Preview URL: https://tmp-e2e-worker-PREVIEW-URL.SUBDOMAIN.workers.dev To deploy this version to production traffic use the command wrangler versions deploy Changes to non-versioned settings (config properties 'logpush' or 'tail_consumers') take effect after your next deployment using the command wrangler versions deploy Changes to triggers (routes, custom domains, cron schedules, etc) must be applied with the command wrangler triggers deploy" @@ -653,6 +648,45 @@ describe.skipIf(!CLOUDFLARE_ACCOUNT_ID)( `); }); + it("should upload version of Worker with preview_urls enabled", async () => { + await helper.seed({ + "wrangler.toml": dedent` + name = "${workerName}" + main = "src/index.ts" + compatibility_date = "2023-01-01" + preview_urls = true + `, + "src/index.ts": dedent` + export default { + fetch(request) { + return new Response("Hello World!") + } + } + `, + "package.json": dedent` + { + "name": "${workerName}", + "version": "0.0.0", + "private": true + } + `, + }); + await helper.run("wrangler triggers deploy"); + const upload = await helper.run( + `wrangler versions upload --message "Upload via e2e test" --tag "e2e-version-with-preview"` + ); + expect(normalize(upload.stdout)).toMatchInlineSnapshot(` + "Total Upload: xx KiB / gzip: xx KiB + Worker Startup Time: (TIMINGS) + Uploaded tmp-e2e-worker-00000000-0000-0000-0000-000000000000 (TIMINGS) + Worker Version ID: 00000000-0000-0000-0000-000000000000 + Version Preview URL: https://tmp-e2e-worker-PREVIEW-URL.SUBDOMAIN.workers.dev + To deploy this version to production traffic use the command wrangler versions deploy + Changes to non-versioned settings (config properties 'logpush' or 'tail_consumers') take effect after your next deployment using the command wrangler versions deploy + Changes to triggers (routes, custom domains, cron schedules, etc) must be applied with the command wrangler triggers deploy" + `); + }); + it("should include version preview url in output file", async () => { const outputFile = path.join(helper.tmpPath, "output.jsonnd"); const upload = await helper.run( @@ -678,10 +712,10 @@ describe.skipIf(!CLOUDFLARE_ACCOUNT_ID)( const { stdout } = await helper.run(`wrangler delete`); expect(normalize(stdout)).toMatchInlineSnapshot(` - "? Are you sure you want to delete tmp-e2e-worker-00000000-0000-0000-0000-000000000000? This action cannot be undone. - 🤖 Using fallback value in non-interactive context: yes - Successfully deleted tmp-e2e-worker-00000000-0000-0000-0000-000000000000" - `); + "? Are you sure you want to delete tmp-e2e-worker-00000000-0000-0000-0000-000000000000? This action cannot be undone. + 🤖 Using fallback value in non-interactive context: yes + Successfully deleted tmp-e2e-worker-00000000-0000-0000-0000-000000000000" + `); }); } ); From 58bc92b504926e04d9fff13d97a3a15d6caeb128 Mon Sep 17 00:00:00 2001 From: Daniel Rivas <1887507+danielrs@users.noreply.github.com> Date: Fri, 5 Sep 2025 13:16:50 -0500 Subject: [PATCH 2/2] wrangler: feat: do not show subdomain status mismatch warnings on first deploy These warnings are just noise on a first deploy, not really necessary. --- .changeset/real-regions-crash.md | 5 + packages/wrangler/e2e/deploy.test.ts | 130 +++++++++++++++++++++++ packages/wrangler/src/deploy/deploy.ts | 1 + packages/wrangler/src/triggers/deploy.ts | 11 +- 4 files changed, 143 insertions(+), 4 deletions(-) create mode 100644 .changeset/real-regions-crash.md create mode 100644 packages/wrangler/e2e/deploy.test.ts diff --git a/.changeset/real-regions-crash.md b/.changeset/real-regions-crash.md new file mode 100644 index 000000000000..286868f8a23a --- /dev/null +++ b/.changeset/real-regions-crash.md @@ -0,0 +1,5 @@ +--- +"wrangler": patch +--- + +Do not show subdomain status mismatch warnings on first deploy. diff --git a/packages/wrangler/e2e/deploy.test.ts b/packages/wrangler/e2e/deploy.test.ts new file mode 100644 index 000000000000..3d0af2d3bf84 --- /dev/null +++ b/packages/wrangler/e2e/deploy.test.ts @@ -0,0 +1,130 @@ +import dedent from "ts-dedent"; +import { afterAll, beforeAll, describe, expect, it } from "vitest"; +import { CLOUDFLARE_ACCOUNT_ID } from "./helpers/account-id"; +import { WranglerE2ETestHelper } from "./helpers/e2e-wrangler-test"; +import { generateResourceName } from "./helpers/generate-resource-name"; +import { normalizeOutput } from "./helpers/normalize"; + +const TIMEOUT = 50_000; +const workerName = generateResourceName(); +const normalize = (str: string) => + normalizeOutput(str, { + [CLOUDFLARE_ACCOUNT_ID]: "CLOUDFLARE_ACCOUNT_ID", + }).replaceAll(/^Author:.*$/gm, "Author: person@example.com"); + +describe.skipIf(!CLOUDFLARE_ACCOUNT_ID)("deploy", { timeout: TIMEOUT }, () => { + let helper: WranglerE2ETestHelper; + beforeAll(async () => { + helper = new WranglerE2ETestHelper(); + }); + + describe("subdomain warnings", () => { + beforeAll(async () => { + await helper.seed({ + "wrangler.toml": dedent` + name = "${workerName}" + main = "src/index.ts" + compatibility_date = "2023-01-01" + `, + "src/index.ts": dedent` + export default { + fetch(request) { + return new Response("Hello World!") + } + } + `, + "package.json": dedent` + { + "name": "${workerName}", + "version": "0.0.0", + "private": true + } + `, + }); + }); + + afterAll(async () => { + await helper.run(`wrangler delete`); + }); + + it("omit subdomain warnings on 1st deploy", async () => { + const deploy = await helper.run("wrangler deploy"); + expect(normalize(deploy.stdout)).toMatchInlineSnapshot(` + "Total Upload: xx KiB / gzip: xx KiB + Uploaded tmp-e2e-worker-00000000-0000-0000-0000-000000000000 (TIMINGS) + Deployed tmp-e2e-worker-00000000-0000-0000-0000-000000000000 triggers (TIMINGS) + https://tmp-e2e-worker-00000000-0000-0000-0000-000000000000.SUBDOMAIN.workers.dev + Current Version ID: 00000000-0000-0000-0000-000000000000" + `); + expect(normalize(deploy.stderr)).toMatchInlineSnapshot(`""`); + }); + + it("show subdomain warnings on 2nd deploy, remote enabled", async () => { + // Set remote state. + await helper.seed({ + "wrangler.toml": dedent` + name = "${workerName}" + main = "src/index.ts" + compatibility_date = "2023-01-01" + workers_dev = true + preview_urls = true + `, + }); + await helper.run("wrangler triggers deploy"); + // Run deploy. + await helper.seed({ + "wrangler.toml": dedent` + name = "${workerName}" + main = "src/index.ts" + compatibility_date = "2023-01-01" + `, + }); + const deploy = await helper.run("wrangler deploy"); + expect(normalize(deploy.stdout)).toMatchInlineSnapshot(` + "Total Upload: xx KiB / gzip: xx KiB + Uploaded tmp-e2e-worker-00000000-0000-0000-0000-000000000000 (TIMINGS) + Deployed tmp-e2e-worker-00000000-0000-0000-0000-000000000000 triggers (TIMINGS) + https://tmp-e2e-worker-00000000-0000-0000-0000-000000000000.SUBDOMAIN.workers.dev + Current Version ID: 00000000-0000-0000-0000-000000000000" + `); + expect(normalize(deploy.stderr)).toMatchInlineSnapshot(` + "▲ [WARNING] Worker has preview URLs enabled, but 'preview_urls' is not in the config. + Using fallback value 'preview_urls = false'." + `); + }); + + it("show subdomain warnings on 3rd deploy, remote disabled", async () => { + // Set remote state. + await helper.seed({ + "wrangler.toml": dedent` + name = "${workerName}" + main = "src/index.ts" + compatibility_date = "2023-01-01" + workers_dev = false + preview_urls = false + `, + }); + await helper.run("wrangler triggers deploy"); + // Run deploy. + await helper.seed({ + "wrangler.toml": dedent` + name = "${workerName}" + main = "src/index.ts" + compatibility_date = "2023-01-01" + `, + }); + const deploy = await helper.run("wrangler deploy"); + expect(normalize(deploy.stdout)).toMatchInlineSnapshot(` + "Total Upload: xx KiB / gzip: xx KiB + Uploaded tmp-e2e-worker-00000000-0000-0000-0000-000000000000 (TIMINGS) + Deployed tmp-e2e-worker-00000000-0000-0000-0000-000000000000 triggers (TIMINGS) + https://tmp-e2e-worker-00000000-0000-0000-0000-000000000000.SUBDOMAIN.workers.dev + Current Version ID: 00000000-0000-0000-0000-000000000000" + `); + expect(normalize(deploy.stderr)).toMatchInlineSnapshot(` + "▲ [WARNING] Worker has workers.dev disabled, but 'workers_dev' is not in the config. + Using fallback value 'workers_dev = true'." + `); + }); + }); +}); diff --git a/packages/wrangler/src/deploy/deploy.ts b/packages/wrangler/src/deploy/deploy.ts index cc165d25748c..011947d0005d 100644 --- a/packages/wrangler/src/deploy/deploy.ts +++ b/packages/wrangler/src/deploy/deploy.ts @@ -1098,6 +1098,7 @@ See https://developers.cloudflare.com/workers/platform/compatibility-dates for m // deploy triggers const targets = await triggersDeploy({ ...props, + firstDeploy: !workerExists, routes: allDeploymentRoutes, }); diff --git a/packages/wrangler/src/triggers/deploy.ts b/packages/wrangler/src/triggers/deploy.ts index fbc51905c55b..670b7d29d327 100644 --- a/packages/wrangler/src/triggers/deploy.ts +++ b/packages/wrangler/src/triggers/deploy.ts @@ -30,6 +30,7 @@ type Props = { legacyEnv: boolean | undefined; dryRun: boolean | undefined; assetsOptions: AssetsOptions | undefined; + firstDeploy?: boolean; }; export default async function triggersDeploy( @@ -90,7 +91,8 @@ export default async function triggersDeploy( envName, workerUrl, routes, - deployments + deployments, + props.firstDeploy ?? false ); if (!wantWorkersDev && workersDevInSync && routes.length !== 0) { @@ -315,7 +317,8 @@ async function subdomainDeploy( envName: string, workerUrl: string, routes: Route[], - deployments: Array> + deployments: Array>, + firstDeploy: boolean ) { const { config } = props; @@ -338,7 +341,7 @@ async function subdomainDeploy( // Warn about mismatching config and current values. - if (config.workers_dev == undefined && !workersDevInSync) { + if (!firstDeploy && config.workers_dev == undefined && !workersDevInSync) { const currWorkersDevStatus = currWorkersDev ? "enabled" : "disabled"; logger.warn( [ @@ -348,7 +351,7 @@ async function subdomainDeploy( ); } - if (config.preview_urls == undefined && !previewsInSync) { + if (!firstDeploy && config.preview_urls == undefined && !previewsInSync) { const currPreviewsStatus = currPreviews ? "enabled" : "disabled"; logger.warn( [