detect-secrets-js
Version:
A JavaScript implementation of Yelp's detect-secrets tool - no Python required
137 lines (123 loc) • 4.97 kB
JavaScript
const { exec } = require('child_process');
const os = require('os');
const util = require('util');
const execAsync = util.promisify(exec);
async function installGitleaks() {
const platform = os.platform();
try {
console.log('Attempting to install Gitleaks...');
if (platform === 'win32') {
try {
await execAsync('choco -v');
console.log('Installing Gitleaks using Chocolatey...');
await execAsync('choco install gitleaks -y');
return;
} catch {
// If Chocolatey isn't available, show manual installation instructions
console.log('\n⚠️ Chocolatey is not installed on your system.');
console.log('\nTo install Gitleaks, you have several options:');
console.log('\n1. Install using Chocolatey (Recommended):');
console.log(
' a. First install Chocolatey by following instructions at:'
);
console.log(' https://chocolatey.org/install');
console.log(' b. Then run: choco install gitleaks -y');
console.log('\n2. Manual Installation:');
console.log(
' a. Visit: https://github.com/gitleaks/gitleaks/releases'
);
console.log(
' b. Download the latest Windows zip file (gitleaks_8.24.2_windows_x64.zip)'
);
console.log(' c. Extract the gitleaks.exe file');
console.log(
' d. Add it to your PATH or copy it to a directory in your PATH'
);
console.log(' (e.g., C:\\Windows\\System32)');
console.log('\n3. Using Scoop (Alternative):');
console.log(' a. Install Scoop from https://scoop.sh');
console.log(' b. Run: scoop install gitleaks');
console.log('\nAfter installation, verify by running:');
console.log('gitleaks version');
throw new Error(
'Please install Gitleaks using one of the methods above and try again.'
);
}
} else if (platform === 'darwin') {
// macOS - try Homebrew
try {
await execAsync('brew -v');
console.log('Installing Gitleaks using Homebrew...');
await execAsync('brew install gitleaks');
} catch {
throw new Error(
'Homebrew is not installed. Please install Gitleaks manually:\n' +
'1. Install Homebrew (https://brew.sh/)\n' +
'2. Then run: brew install gitleaks'
);
}
} else {
// Linux - try different package managers
try {
// Try apt-get (Debian/Ubuntu)
await execAsync('apt-get -v');
console.log('Installing Gitleaks using apt...');
await execAsync(
'sudo apt-get update && sudo apt-get install -y gitleaks'
);
} catch {
try {
// Try yum (RHEL/CentOS)
await execAsync('yum -v');
console.log('Installing Gitleaks using yum...');
await execAsync('sudo yum install -y gitleaks');
} catch {
throw new Error(
'Could not install Gitleaks automatically. Please install manually:\n' +
'Visit: https://github.com/gitleaks/gitleaks#installation'
);
}
}
}
console.log('Gitleaks installed successfully!');
} catch (error) {
if (error.message.includes('Please install Gitleaks')) {
// This is our custom error with instructions, exit gracefully
process.exit(1);
}
// For unexpected errors, show general guidance
console.error('\n❌ Failed to install Gitleaks automatically.');
console.log('\nPlease install Gitleaks manually:');
if (platform === 'win32') {
console.log('\nWindows Installation Options:');
console.log('1. Download the latest release from:');
console.log(' https://github.com/gitleaks/gitleaks/releases');
console.log('2. Extract the zip file');
console.log('3. Add gitleaks.exe to your system PATH');
console.log('\nOr use a package manager:');
console.log('- Chocolatey: choco install gitleaks');
console.log('- Scoop: scoop install gitleaks');
} else if (platform === 'darwin') {
console.log('\nmacOS Installation:');
console.log('1. Using Homebrew (recommended):');
console.log(' brew install gitleaks');
console.log('\n2. Manual installation:');
console.log(
' Download from https://github.com/gitleaks/gitleaks/releases'
);
} else {
console.log('\nLinux Installation:');
console.log(
'1. Download from https://github.com/gitleaks/gitleaks/releases'
);
console.log('2. Extract and move to /usr/local/bin:');
console.log(' sudo mv gitleaks /usr/local/bin/');
console.log(' sudo chmod +x /usr/local/bin/gitleaks');
}
console.log('\nAfter installation, verify by running:');
console.log('gitleaks version');
process.exit(1);
}
}
// Run the installation
installGitleaks().catch(console.error);