From 576c952ebf554db7d3e115a2df473a7d0d44b156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isaac=20Rold=C3=A1n?= Date: Thu, 2 Apr 2026 12:58:55 +0200 Subject: [PATCH 1/2] fix: regenerate oclif manifests for nightly packaging Co-authored-by: Claude Code --- packages/app/package.json | 2 +- packages/cli/package.json | 2 +- packages/cli/src/cli/repo-health.test.ts | 29 +++++++++++++++++++++++ packages/create-app/package.json | 2 +- packages/plugin-cloudflare/package.json | 2 +- packages/plugin-did-you-mean/package.json | 2 +- packages/theme/package.json | 2 +- 7 files changed, 35 insertions(+), 6 deletions(-) diff --git a/packages/app/package.json b/packages/app/package.json index 2c49e2526d3..e1b43066028 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -49,7 +49,7 @@ "clean": "nx clean", "lint": "nx lint", "lint:fix": "nx lint:fix", - "prepack": "NODE_ENV=production pnpm nx build && cp ../../README.md README.md", + "prepack": "NODE_ENV=production pnpm nx build && pnpm oclif manifest && cp ../../README.md README.md", "vitest": "vitest", "type-check": "nx type-check" }, diff --git a/packages/cli/package.json b/packages/cli/package.json index 022e607d446..42937445fdb 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -47,7 +47,7 @@ "clean": "nx clean", "lint": "nx lint", "lint:fix": "nx lint:fix", - "prepack": "NODE_ENV=production node ../../bin/update-bugsnag cli && cp ../../README.md README.md", + "prepack": "NODE_ENV=production node ../../bin/update-bugsnag cli && pnpm oclif manifest && cp ../../README.md README.md", "vitest": "vitest", "type-check": "nx type-check" }, diff --git a/packages/cli/src/cli/repo-health.test.ts b/packages/cli/src/cli/repo-health.test.ts index 7bfe2651db3..4f77f59f246 100644 --- a/packages/cli/src/cli/repo-health.test.ts +++ b/packages/cli/src/cli/repo-health.test.ts @@ -109,3 +109,32 @@ describe('Node dependency version sync', () => { expect(different, errorMessage).toHaveLength(0) }) }) + +describe('oclif manifest packaging', () => { + test('packages that ship oclif.manifest.json regenerate it in prepack', async () => { + const packageJsonPaths = await glob('packages/*/package.json', {cwd: repoRoot, absolute: true}) + + const missingManifestRefresh: string[] = [] + + for (const packageJsonPath of packageJsonPaths) { + const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')) as { + files?: string[] + scripts?: {prepack?: string} + } + + if (!packageJson.files?.includes('/oclif.manifest.json')) continue + if (!packageJson.scripts?.prepack?.includes('pnpm oclif manifest')) { + missingManifestRefresh.push(path.relative(repoRoot, packageJsonPath)) + } + } + + expect( + missingManifestRefresh, + [ + 'The following packages publish oclif.manifest.json without regenerating it in prepack:\n', + ...missingManifestRefresh.map((packageJsonPath) => ` - ${packageJsonPath}\n`), + '\nAdd `pnpm oclif manifest` to the package prepack script so snapshot/nightly versions do not ship stale manifests.', + ].join(''), + ).toHaveLength(0) + }) +}) diff --git a/packages/create-app/package.json b/packages/create-app/package.json index afc005fa396..6e3476af1a6 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -45,7 +45,7 @@ "clean": "nx clean", "lint": "nx lint", "lint:fix": "nx lint:fix", - "prepack": "NODE_ENV=production node ../../bin/update-bugsnag create-app && cp ../../README.md README.md", + "prepack": "NODE_ENV=production node ../../bin/update-bugsnag create-app && pnpm oclif manifest && cp ../../README.md README.md", "vitest": "vitest", "type-check": "nx type-check" }, diff --git a/packages/plugin-cloudflare/package.json b/packages/plugin-cloudflare/package.json index 5d3799ad404..971e3fb643f 100644 --- a/packages/plugin-cloudflare/package.json +++ b/packages/plugin-cloudflare/package.json @@ -36,7 +36,7 @@ "clean": "nx clean", "lint": "nx lint", "lint:fix": "nx lint:fix", - "prepack": "NODE_ENV=production pnpm nx build && cp ../../README.md README.md", + "prepack": "NODE_ENV=production pnpm nx build && pnpm oclif manifest && cp ../../README.md README.md", "vitest": "vitest", "type-check": "nx type-check" }, diff --git a/packages/plugin-did-you-mean/package.json b/packages/plugin-did-you-mean/package.json index e10a4cb1086..ae3b65d8b47 100644 --- a/packages/plugin-did-you-mean/package.json +++ b/packages/plugin-did-you-mean/package.json @@ -31,7 +31,7 @@ "clean": "nx clean", "lint": "nx lint", "lint:fix": "nx lint:fix", - "prepack": "NODE_ENV=production pnpm nx build && cp ../../README.md README.md", + "prepack": "NODE_ENV=production pnpm nx build && pnpm oclif manifest && cp ../../README.md README.md", "vitest": "vitest", "type-check": "nx type-check" }, diff --git a/packages/theme/package.json b/packages/theme/package.json index 0adac287ea0..b3105e22166 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -31,7 +31,7 @@ "clean": "nx clean", "lint": "nx lint", "lint:fix": "nx lint:fix", - "prepack": "NODE_ENV=production pnpm nx build && cp ../../README.md README.md", + "prepack": "NODE_ENV=production pnpm nx build && pnpm oclif manifest && cp ../../README.md README.md", "vitest": "vitest", "type-check": "nx type-check" }, From 93c70f4762f7887069cba0d7555f5de4647978dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isaac=20Rold=C3=A1n?= Date: Tue, 28 Apr 2026 17:37:35 +0200 Subject: [PATCH 2/2] Add store to manifest regen, soften repo-health matchers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Store package ships /oclif.manifest.json but the prepack didn't regenerate it — same bug the test is meant to catch. Add `pnpm oclif manifest` to store's prepack alongside the other six packages. Per Copilot review feedback, soften the repo-health matchers so the test doesn't miss legitimate variants: - files entries: match any path ending in `oclif.manifest.json` (covers `'oclif.manifest.json'` and globs in addition to `'/oclif.manifest.json'`) - prepack script: match `oclif manifest` via word-boundary regex (covers `pnpm exec oclif manifest`, `pnpm --silent oclif manifest`, etc.) Co-Authored-By: Claude Opus 4.7 (1M context) --- packages/cli/src/cli/repo-health.test.ts | 7 +++++-- packages/store/package.json | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/cli/repo-health.test.ts b/packages/cli/src/cli/repo-health.test.ts index 4f77f59f246..b057bc8c5f2 100644 --- a/packages/cli/src/cli/repo-health.test.ts +++ b/packages/cli/src/cli/repo-health.test.ts @@ -122,8 +122,11 @@ describe('oclif manifest packaging', () => { scripts?: {prepack?: string} } - if (!packageJson.files?.includes('/oclif.manifest.json')) continue - if (!packageJson.scripts?.prepack?.includes('pnpm oclif manifest')) { + const shipsOclifManifest = packageJson.files?.some((file) => + file.replace(/^\.?\//, '').endsWith('oclif.manifest.json'), + ) + if (!shipsOclifManifest) continue + if (!/\boclif\s+manifest\b/.test(packageJson.scripts?.prepack ?? '')) { missingManifestRefresh.push(path.relative(repoRoot, packageJsonPath)) } } diff --git a/packages/store/package.json b/packages/store/package.json index b62c69e1d95..ef7eb47550f 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -30,7 +30,7 @@ "clean": "nx clean", "lint": "nx lint", "lint:fix": "nx lint:fix", - "prepack": "NODE_ENV=production pnpm nx build && cp ../../README.md README.md", + "prepack": "NODE_ENV=production pnpm nx build && pnpm oclif manifest && cp ../../README.md README.md", "vitest": "vitest", "type-check": "nx type-check" },