diff --git a/.husky/pre-commit b/.husky/pre-commit index 87ea02a113..cd40e916be 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1 +1,9 @@ -npm run pre-commit +npm run pre-commit || { + echo '' + echo '====================================================' + echo 'pre-commit checks failed. in case of emergency, run:' + echo '' + echo 'git commit --no-verify' + echo '====================================================' + exit 1 +} diff --git a/package.json b/package.json index 8d2fa6167d..42d63e3c2b 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "telemetry": "node scripts/telemetry.js", "check:lockfile": "node scripts/check-lockfile.js", "clean": "node scripts/clean.js", - "pre-commit": "lint-staged" + "pre-commit": "node scripts/pre-commit.js" }, "bin": { "gemini": "bundle/gemini.js" diff --git a/scripts/pre-commit.js b/scripts/pre-commit.js new file mode 100644 index 0000000000..e748ac23d6 --- /dev/null +++ b/scripts/pre-commit.js @@ -0,0 +1,22 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import { execSync } from 'node:child_process'; +import lintStaged from 'lint-staged'; + +try { + // Get repository root + const root = execSync('git rev-parse --show-toplevel').toString().trim(); + + // Run lint-staged with API directly + const passed = await lintStaged({ cwd: root }); + + // Exit with appropriate code + process.exit(passed ? 0 : 1); +} catch { + // Exit with error code + process.exit(1); +}