diff --git a/.changeset/c3-frameworks-update-16342.md b/.changeset/c3-frameworks-update-16342.md new file mode 100644 index 00000000000..b1bee05f5b3 --- /dev/null +++ b/.changeset/c3-frameworks-update-16342.md @@ -0,0 +1,11 @@ +--- +"create-cloudflare": patch +--- + +Use create-astro 5.3.0 for new Astro projects. If your Node.js version is older than 22.22.0, C3 now explains the required upgrade before starting the Astro generator. + +The following dependency versions have been updated: + +| Dependency | From | To | +| ------------ | ----- | ----- | +| create-astro | 5.2.6 | 5.3.0 | diff --git a/packages/create-cloudflare/src/frameworks/__tests__/index.test.ts b/packages/create-cloudflare/src/frameworks/__tests__/index.test.ts index 501f3b2ce56..c0daba36ca7 100644 --- a/packages/create-cloudflare/src/frameworks/__tests__/index.test.ts +++ b/packages/create-cloudflare/src/frameworks/__tests__/index.test.ts @@ -3,6 +3,7 @@ import { join, resolve } from "node:path"; import { runCommand } from "@cloudflare/cli-shared-helpers/command"; import { runInTempDir } from "@cloudflare/workers-utils/test-helpers"; import { mockPackageManager } from "helpers/__tests__/mocks"; +import astro from "templates/astro/c3"; import nuxt from "templates/nuxt/c3"; import { afterEach, describe, test, vi } from "vitest"; import { getFrameworkCli, runFrameworkGenerator } from ".."; @@ -62,6 +63,50 @@ describe("framework CLI Node.js requirements", () => { vi.unstubAllGlobals(); }); + describe.each(Object.entries(astro.platformVariants))( + "Astro (%s)", + (_, template) => { + test.for(["22.0.0", "22.21.99"])( + "rejects Node.js %s before running create-astro", + async (nodeVersion, { expect }) => { + vi.stubGlobal("process", { + ...process, + versions: { ...process.versions, node: nodeVersion }, + }); + const ctx = createTestContext(); + ctx.template = template; + + await expect( + runFrameworkGenerator(ctx, [ctx.project.name]) + ).rejects.toThrow( + `Astro requires Node.js >=22.22.0. You are using Node.js ${nodeVersion}. Please upgrade Node.js and try again.` + ); + expect(runCommand).not.toHaveBeenCalled(); + } + ); + + test.for(["22.22.0", "24.0.0", "26.0.0"])( + "runs create-astro on Node.js %s", + async (nodeVersion, { expect }) => { + vi.stubGlobal("process", { + ...process, + versions: { ...process.versions, node: nodeVersion }, + }); + mockPackageManager("pnpm"); + const ctx = createTestContext(); + ctx.template = template; + + await runFrameworkGenerator(ctx, [ctx.project.name]); + + expect(runCommand).toHaveBeenCalledWith( + ["pnpx", getFrameworkCli(ctx), ctx.project.name], + { env: {} } + ); + } + ); + } + ); + describe.each(Object.entries(nuxt.platformVariants))( "Nuxt (%s)", (_, template) => { diff --git a/packages/create-cloudflare/src/frameworks/package.json b/packages/create-cloudflare/src/frameworks/package.json index 8eee034a396..a6b87690835 100644 --- a/packages/create-cloudflare/src/frameworks/package.json +++ b/packages/create-cloudflare/src/frameworks/package.json @@ -4,7 +4,7 @@ "@angular/create": "22.2.2", "@tanstack/cli": "0.71.1", "create-analog": "2.8.1", - "create-astro": "5.2.6", + "create-astro": "5.3.0", "create-docusaurus": "3.10.2", "create-hono": "0.19.5", "create-next-app": "16.4.1", diff --git a/packages/create-cloudflare/templates/astro/pages/c3.ts b/packages/create-cloudflare/templates/astro/pages/c3.ts index 2242faf5c8b..5ecf103fc20 100644 --- a/packages/create-cloudflare/templates/astro/pages/c3.ts +++ b/packages/create-cloudflare/templates/astro/pages/c3.ts @@ -75,6 +75,7 @@ const config: TemplateConfig = { configVersion: 1, id: "astro", frameworkCli: "create-astro", + frameworkCliNodeVersion: ">=22.22.0", platform: "pages", hidden: true, displayName: "Astro", diff --git a/packages/create-cloudflare/templates/astro/workers/c3.ts b/packages/create-cloudflare/templates/astro/workers/c3.ts index 3afe411f614..7bb997963fb 100644 --- a/packages/create-cloudflare/templates/astro/workers/c3.ts +++ b/packages/create-cloudflare/templates/astro/workers/c3.ts @@ -37,6 +37,7 @@ const config: TemplateConfig = { configVersion: 1, id: "astro", frameworkCli: "create-astro", + frameworkCliNodeVersion: ">=22.22.0", platform: "workers", displayName: "Astro", copyFiles: {