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