diff --git a/.github/workflows/bootstrap-release.yml b/.github/workflows/bootstrap-release.yml index 09c7d786..4f569c57 100644 --- a/.github/workflows/bootstrap-release.yml +++ b/.github/workflows/bootstrap-release.yml @@ -84,6 +84,8 @@ jobs: run: bun run test:coverage - name: Browser smoke tests run: bun run test:browser + - name: Remove generated delivery-size evidence + run: git restore --worktree -- test-results/delivery-size/size-report.json - name: Assert source remains clean run: test -z "$(git status --porcelain --untracked-files=all)" diff --git a/scripts/release-workflow.test.ts b/scripts/release-workflow.test.ts index 4f138389..d7d2cf09 100644 --- a/scripts/release-workflow.test.ts +++ b/scripts/release-workflow.test.ts @@ -7,6 +7,7 @@ import { PUBLISHABLE_PACKAGE_ORDER } from "./workspace-tooling.js"; const repositoryRoot = resolve(import.meta.dir, ".."); const workflowPath = resolve(repositoryRoot, ".github/workflows/release.yml"); +const bootstrapWorkflowPath = resolve(repositoryRoot, ".github/workflows/bootstrap-release.yml"); type Step = { name?: string; run?: string; uses?: string; with?: Record }; type Job = { @@ -43,6 +44,21 @@ function artifact(name: string): ReleasePackageArtifact { }; } +describe("bootstrap release workflow", () => { + it("removes generated size evidence before enforcing a clean source tree", async () => { + const source = await readFile(bootstrapWorkflowPath, "utf8"); + const qualityGate = source.indexOf("bun run verify:release-quality"); + const restore = source.indexOf( + "git restore --worktree -- test-results/delivery-size/size-report.json", + ); + const cleanGate = source.indexOf('test -z "$(git status --porcelain --untracked-files=all)"'); + + expect(qualityGate).toBeGreaterThan(-1); + expect(restore).toBeGreaterThan(qualityGate); + expect(cleanGate).toBeGreaterThan(restore); + }); +}); + describe("stage-only release workflow", () => { it("requires an exact commit and version and serializes release runs", async () => { const { parsed } = await workflow(); diff --git a/scripts/size-report.ts b/scripts/size-report.ts index 38106d6d..cc6a7bcb 100644 --- a/scripts/size-report.ts +++ b/scripts/size-report.ts @@ -975,6 +975,7 @@ async function writeReport(report: SizeReport): Promise { await mkdir(dirname(reportPath), { recursive: true }); await rm(join(evidenceRoot, "failure.json"), { force: true }); await writeFile(reportPath, `${JSON.stringify(report, null, 2)}\n`); + await runCommand(["bunx", "biome", "format", "--write", reportPath]); } async function writeFailure(error: unknown): Promise {