aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Matt Kane <m@mk.gg> 2025-03-19 13:54:21 +0000
committerGravatar GitHub <noreply@github.com> 2025-03-19 13:54:21 +0000
commitd5ad591230918db302edc89c1a98436c16a4e0d2 (patch)
tree0cdc80a178d65c2b05ca45aadeb3e8751a7d6a81
parent53abc9d4c8a63a4cfb4c682ed8a3e265cc87561e (diff)
downloadastro-d5ad591230918db302edc89c1a98436c16a4e0d2.tar.gz
astro-d5ad591230918db302edc89c1a98436c16a4e0d2.tar.zst
astro-d5ad591230918db302edc89c1a98436c16a4e0d2.zip
fix: don't attempt to move files after build with base (#13463)
* fix: don't attempt to move files after build with base * Remove console * Reword changeset * Remove unused import
-rw-r--r--.changeset/eight-eyes-swim.md5
-rw-r--r--packages/integrations/cloudflare/src/index.ts14
-rw-r--r--packages/integrations/cloudflare/test/fixtures/with-base/astro.config.mjs12
-rw-r--r--packages/integrations/cloudflare/test/fixtures/with-base/package.json9
-rw-r--r--packages/integrations/cloudflare/test/fixtures/with-base/src/pages/index.astro4
-rw-r--r--packages/integrations/cloudflare/test/fixtures/with-base/src/pages/static.astro4
-rw-r--r--packages/integrations/cloudflare/test/with-base-path.js22
-rw-r--r--pnpm-lock.yaml9
8 files changed, 66 insertions, 13 deletions
diff --git a/.changeset/eight-eyes-swim.md b/.changeset/eight-eyes-swim.md
new file mode 100644
index 000000000..3810682dc
--- /dev/null
+++ b/.changeset/eight-eyes-swim.md
@@ -0,0 +1,5 @@
+---
+'@astrojs/cloudflare': patch
+---
+
+Fixes a bug that caused builds to fail when a base directory is configured
diff --git a/packages/integrations/cloudflare/src/index.ts b/packages/integrations/cloudflare/src/index.ts
index b0c08cdcf..346cc4021 100644
--- a/packages/integrations/cloudflare/src/index.ts
+++ b/packages/integrations/cloudflare/src/index.ts
@@ -7,7 +7,7 @@ import type {
import type { PluginOption } from 'vite';
import { createReadStream } from 'node:fs';
-import { appendFile, rename, stat } from 'node:fs/promises';
+import { appendFile, stat } from 'node:fs/promises';
import { createInterface } from 'node:readline/promises';
import {
appendForwardSlash,
@@ -260,18 +260,6 @@ export default function createIntegration(args?: Options): AstroIntegration {
},
'astro:build:done': async ({ pages, dir, logger, assets }) => {
await cloudflareModulePlugin.afterBuildCompleted(_config);
- const PLATFORM_FILES = ['_headers', '_redirects', '_routes.json'];
- if (_config.base !== '/') {
- for (const file of PLATFORM_FILES) {
- try {
- await rename(new URL(file, _config.build.client), new URL(file, _config.outDir));
- } catch (_e) {
- logger.error(
- `There was an error moving ${file} to the root of the output directory.`,
- );
- }
- }
- }
let redirectsExists = false;
try {
diff --git a/packages/integrations/cloudflare/test/fixtures/with-base/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/with-base/astro.config.mjs
new file mode 100644
index 000000000..04fce6d57
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-base/astro.config.mjs
@@ -0,0 +1,12 @@
+// @ts-check
+import { defineConfig } from 'astro/config';
+import cloudflare from '@astrojs/cloudflare';
+
+export default defineConfig({
+ base: '/blog/',
+ output: 'server',
+ adapter: cloudflare(),
+ redirects: {
+ '/a/redirect': '/',
+ },
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/with-base/package.json b/packages/integrations/cloudflare/test/fixtures/with-base/package.json
new file mode 100644
index 000000000..66f76081a
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-base/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/astro-cloudflare-with-base",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/cloudflare": "workspace:*",
+ "astro": "workspace:*"
+ }
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/with-base/src/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/with-base/src/pages/index.astro
new file mode 100644
index 000000000..530b283a1
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-base/src/pages/index.astro
@@ -0,0 +1,4 @@
+---
+export const prerender = false;
+---
+<h1>Hello</h1>
diff --git a/packages/integrations/cloudflare/test/fixtures/with-base/src/pages/static.astro b/packages/integrations/cloudflare/test/fixtures/with-base/src/pages/static.astro
new file mode 100644
index 000000000..677d2ccfc
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-base/src/pages/static.astro
@@ -0,0 +1,4 @@
+---
+export const prerender = true;
+---
+<h1>Hello</h1>
diff --git a/packages/integrations/cloudflare/test/with-base-path.js b/packages/integrations/cloudflare/test/with-base-path.js
new file mode 100644
index 000000000..6ea82b2fb
--- /dev/null
+++ b/packages/integrations/cloudflare/test/with-base-path.js
@@ -0,0 +1,22 @@
+// @ts-check
+import * as assert from 'node:assert/strict';
+import { before, describe, it } from 'node:test';
+import { fileURLToPath } from 'node:url';
+import { astroCli } from './_test-utils.js';
+import { existsSync, promises as fs } from 'node:fs';
+
+const root = new URL('./fixtures/with-base/', import.meta.url);
+
+describe('With base', () => {
+ before(async () => {
+ await fs.rm(new URL('dist/', root), { recursive: true, force: true });
+ await astroCli(fileURLToPath(root), 'build');
+ });
+
+ it('generates platform files in the correct directory', async () => {
+ for (const file of ['_redirects', '_routes.json', 'blog/static/index.html']) {
+ assert.ok(existsSync(new URL(`dist/${file}`, root)));
+ }
+ });
+});
+
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f0d28ff48..21368550f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4670,6 +4670,15 @@ importers:
specifier: workspace:*
version: link:../../../../../astro
+ packages/integrations/cloudflare/test/fixtures/with-base:
+ dependencies:
+ '@astrojs/cloudflare':
+ specifier: workspace:*
+ version: link:../../..
+ astro:
+ specifier: workspace:*
+ version: link:../../../../../astro
+
packages/integrations/cloudflare/test/fixtures/with-solid-js:
dependencies:
'@astrojs/cloudflare':