feat: add prepublishOnly checks (#2052)

This commit is contained in:
Brandon Keiji 2025-06-26 23:49:43 +00:00 committed by GitHub
parent d9892ada7f
commit bf873a1d85
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 51 additions and 9 deletions

View File

@ -49,7 +49,8 @@
"publish:npm": "npm publish --workspaces ${NPM_PUBLISH_TAG:+--tag=$NPM_PUBLISH_TAG} ${NPM_DRY_RUN:+--dry-run}",
"publish:release": "npm run build:packages && npm run prepare:cli-packagejson && npm run build:sandbox:fast && npm run publish:sandbox && npm run publish:npm",
"telemetry": "node scripts/telemetry.js",
"start:gcp": "concurrently --raw --kill-others \"npm run telemetry -- --target=gcp\" \"npm start\""
"start:gcp": "concurrently --raw --kill-others \"npm run telemetry -- --target=gcp\" \"npm start\"",
"prepublishOnly": "node scripts/prepublish.js"
},
"bin": {
"gemini": "bundle/gemini.js"

View File

@ -20,7 +20,8 @@
"typecheck": "tsc --noEmit",
"prerelease:version": "node ../../scripts/bind_package_version.js",
"prerelease:deps": "node ../../scripts/bind_package_dependencies.js",
"prepack": "npm run build"
"prepack": "npm run build",
"prepublishOnly": "node ../../scripts/prepublish.js"
},
"files": [
"dist"

View File

@ -16,7 +16,8 @@
"typecheck": "tsc --noEmit",
"prerelease:version": "node ../../scripts/bind_package_version.js",
"prerelease:deps": "node ../../scripts/bind_package_dependencies.js",
"prepack": "npm run build"
"prepack": "npm run build",
"prepublishOnly": "node ../../scripts/prepublish.js"
},
"files": [
"dist"

View File

@ -46,12 +46,6 @@ if (!cliPackageJson.config) {
}
cliPackageJson.config.sandboxImageUri = containerImageUri;
// Remove 'prepublishOnly' from scripts if it exists
if (cliPackageJson.scripts && cliPackageJson.scripts.prepublishOnly) {
delete cliPackageJson.scripts.prepublishOnly;
console.log('Removed prepublishOnly script from packages/cli/package.json');
}
fs.writeFileSync(
cliPackageJsonPath,
JSON.stringify(cliPackageJson, null, 2) + '\n',

45
scripts/prepublish.js Normal file
View File

@ -0,0 +1,45 @@
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import fs from 'fs';
import path from 'path';
const packageJsonPath = path.resolve(process.cwd(), 'package.json');
const readmePath = path.resolve(process.cwd(), 'README.md');
const licensePath = path.resolve(process.cwd(), 'LICENSE');
const errors = [];
// 1. Check for package.json and the 'repository' field
// Required for publishing through wombat-dressing-room
if (!fs.existsSync(packageJsonPath)) {
errors.push(`Error: package.json not found in ${process.cwd()}`);
} else {
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
if (packageJson.repository !== 'google-gemini/gemini-cli') {
errors.push(
`Error: The "repository" field in ${packageJsonPath} must be "google-gemini/gemini-cli".`,
);
}
}
// 2. Check for README.md
if (!fs.existsSync(readmePath)) {
errors.push(`Error: README.md not found in ${process.cwd()}`);
}
// 3. Check for LICENSE
if (!fs.existsSync(licensePath)) {
errors.push(`Error: LICENSE file not found in ${process.cwd()}`);
}
if (errors.length > 0) {
console.error('Pre-publish checks failed:');
errors.forEach((error) => console.error(`- ${error}`));
process.exit(1);
}
console.log('Pre-publish checks passed.');