From d0ebd55c466d345feb597ed54105e87435edf802 Mon Sep 17 00:00:00 2001 From: Willie Chalmers III Date: Wed, 23 Sep 2026 20:24:34 -0700 Subject: [PATCH] fix(tooling): Make generated Astro labs pass checks Keep the starter page in a formatted Astro template. A new lab then passes the repository formatting gate without a manual cleanup step. Co-authored-by: Codex --- packages/labs-cli/src/create.ts | 8 +++++-- .../generated-project/site-index.astro | 21 +++++++++++++++++++ .../labs-cli/tests/create-archive.test.ts | 9 +++++++- 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 packages/labs-cli/templates/generated-project/site-index.astro diff --git a/packages/labs-cli/src/create.ts b/packages/labs-cli/src/create.ts index ebd6495..39a23b9 100644 --- a/packages/labs-cli/src/create.ts +++ b/packages/labs-cli/src/create.ts @@ -5,6 +5,11 @@ import { readCreateInput } from './create-input.js'; import { writeProject } from './create-write.js'; import { archiveTemplate } from './create-archive.js'; +const siteIndexTemplate = new URL( + '../templates/generated-project/site-index.astro', + import.meta.url, +); + function assertAvailableSlug(root: string, slug: string): void { const reserved = [ path.join(root, 'apps', slug), @@ -159,8 +164,7 @@ export async function createLab(root: string, args: string[]): Promise { if (site) { files['astro.config.ts'] = `import { defineConfig } from 'astro/config';\nimport tailwindcss from '@tailwindcss/vite';\nexport default defineConfig({site:'https://labs.lasvegasfortransit.org',base:'${base}',build:{format:'directory'},vite:{plugins:[tailwindcss()]}});\n`; - files['src/pages/index.astro'] = - `---\nimport '../styles.css';\nimport LabLifecycleNotice from '@lvbt/ui/astro/lifecycle-notice';\nimport manifest from '../../lab.config';\n---\n{manifest.title}

{manifest.title}

{manifest.summary}

\n`; + files['src/pages/index.astro'] = await readFile(siteIndexTemplate, 'utf8'); } else { files['vite.config.ts'] = `import { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react';\nimport tailwindcss from '@tailwindcss/vite';\nexport default defineConfig({base:'${base}',plugins:[react(),tailwindcss()]});\n`; diff --git a/packages/labs-cli/templates/generated-project/site-index.astro b/packages/labs-cli/templates/generated-project/site-index.astro new file mode 100644 index 0000000..eff5cd2 --- /dev/null +++ b/packages/labs-cli/templates/generated-project/site-index.astro @@ -0,0 +1,21 @@ +--- +import '../styles.css'; +import LabLifecycleNotice from '@lvbt/ui/astro/lifecycle-notice'; +import manifest from '../../lab.config'; +--- + + + + + + + {manifest.title} + + +
+ +

{manifest.title}

+

{manifest.summary}

+
+ + diff --git a/packages/labs-cli/tests/create-archive.test.ts b/packages/labs-cli/tests/create-archive.test.ts index 3f7b715..b480604 100644 --- a/packages/labs-cli/tests/create-archive.test.ts +++ b/packages/labs-cli/tests/create-archive.test.ts @@ -1,4 +1,4 @@ -import { mkdtemp, rm, writeFile } from 'node:fs/promises'; +import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises'; import os from 'node:os'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; @@ -49,6 +49,13 @@ test.each(['site', 'app'])( expect(archive).toContain('createArchiveContext'); expect(archive).toContain('archive.failures'); expect(archive).toContain('page.reload()'); + if (profile === 'site') { + const template = await readFile( + new URL('../templates/generated-project/site-index.astro', import.meta.url), + 'utf8', + ); + expect(files?.['src/pages/index.astro']).toBe(template); + } for (const name of [ 'tests/e2e/home.spec.ts-snapshots/page-desktop-lvbt.png', 'tests/e2e/home.spec.ts-snapshots/page-mobile-lvbt.png',