#!/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); }