Files
prowler/ui/scripts/setup-git-hooks.js
T
Pablo Fernandez Guerra (PFE) f2e6a3264d chore(ui): scope prek pre-commit to staged files, drop legacy husky (#11118)
Co-authored-by: Pablo F.G <pablo.fernandez@prowler.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 11:12:25 +02:00

110 lines
2.4 KiB
JavaScript
Executable File

#!/usr/bin/env node
/**
* Setup Git Hooks for Prowler UI
*
* This script checks if prek is managing git hooks.
* If not, it runs the repository's setup script to install prek.
*/
const { execSync } = require("child_process");
const fs = require("fs");
const path = require("path");
/**
* Check if prek framework is managing git hooks
*/
function isPrekInstalled(gitRoot) {
const hookPath = path.join(gitRoot, ".git", "hooks", "pre-commit");
try {
if (!fs.existsSync(hookPath)) return false;
const content = fs.readFileSync(hookPath, "utf8");
return (
content.includes("prek") ||
content.includes("pre-commit") ||
content.includes("INSTALL_PYTHON")
);
} catch {
return false;
}
}
/**
* Get git repository root directory
*/
function getGitRoot() {
try {
return execSync("git rev-parse --show-toplevel", {
encoding: "utf8",
stdio: ["pipe", "pipe", "pipe"],
}).trim();
} catch {
return null;
}
}
/**
* Run the repository setup script
*/
function runSetupScript(gitRoot) {
const setupScript = path.join(gitRoot, "scripts", "setup-git-hooks.sh");
if (!fs.existsSync(setupScript)) {
throw new Error("Setup script not found");
}
execSync(`bash "${setupScript}"`, {
cwd: gitRoot,
stdio: "inherit",
});
}
// Main execution
// Skip in Docker/CI environments
if (
process.env.DOCKER ||
process.env.CI ||
process.env.KUBERNETES_SERVICE_HOST
) {
console.log(
"⚠️ Running in containerized environment. Skipping git hooks setup.",
);
process.exit(0);
}
const gitRoot = getGitRoot();
if (!gitRoot) {
console.log("⚠️ Not in a git repository. Skipping git hooks setup.");
process.exit(0);
}
if (isPrekInstalled(gitRoot)) {
console.log("✅ Git hooks managed by prek framework");
console.log(" UI hooks will be called automatically for UI files");
process.exit(0);
}
// Prek not installed - set it up
console.log("⚠️ Prek hooks not installed");
console.log("📦 Installing prek hooks...");
console.log("");
try {
runSetupScript(gitRoot);
console.log("");
console.log("✅ Prek hooks installed successfully");
} catch (error) {
console.error("❌ Failed to setup git hooks");
console.error(
" Please run manually from repo root: ./scripts/setup-git-hooks.sh",
);
console.error(
" Or install prek manually: https://prek.j178.dev/installation/",
);
process.exit(1);
}