vaultace-cli
Version:
AI-powered security scanner that detects vulnerabilities in AI-generated code. Proactive scanning, autonomous fixing, and emergency response for modern development teams.
152 lines (127 loc) ⢠4.29 kB
JavaScript
#!/usr/bin/env node
/**
* Build Script for Vaultace CLI
* Creates standalone executable using esbuild
*/
const esbuild = require('esbuild');
const fs = require('fs');
const path = require('path');
const platforms = [
{ platform: 'node', arch: 'x64', ext: '' },
{ platform: 'win32', arch: 'x64', ext: '.exe' },
{ platform: 'darwin', arch: 'x64', ext: '' },
{ platform: 'darwin', arch: 'arm64', ext: '' },
{ platform: 'linux', arch: 'x64', ext: '' },
{ platform: 'linux', arch: 'arm64', ext: '' }
];
async function build() {
// Ensure dist directory exists
if (!fs.existsSync('dist')) {
fs.mkdirSync('dist', { recursive: true });
}
console.log('šØ Building Vaultace CLI...\n');
// Build for all platforms
for (const { platform, arch, ext } of platforms) {
if (platform === 'node') {
// Node.js bundle (cross-platform)
try {
await esbuild.build({
entryPoints: ['src/index.js'],
bundle: true,
platform: 'node',
target: 'node18',
outfile: 'dist/vaultace.js',
external: ['fsevents'], // Exclude native modules
format: 'cjs',
minify: true,
sourcemap: false,
banner: {
js: '#!/usr/bin/env node'
}
});
// Make executable
fs.chmodSync('dist/vaultace.js', '755');
console.log(`ā
Built: vaultace.js (Node.js bundle)`);
} catch (error) {
console.error(`ā Failed to build Node.js bundle:`, error.message);
}
} else {
// Platform-specific executable
const filename = `vaultace-${platform}-${arch}${ext}`;
try {
await esbuild.build({
entryPoints: ['src/index.js'],
bundle: true,
platform: 'node',
target: 'node18',
outfile: `dist/${filename}`,
external: ['fsevents'],
format: 'cjs',
minify: true,
sourcemap: false,
define: {
'process.pkg': 'true' // Flag for bundled environment
}
});
console.log(`ā
Built: ${filename}`);
} catch (error) {
console.error(`ā Failed to build ${filename}:`, error.message);
}
}
}
// Create installation script
const installScript = `#!/bin/bash
# Vaultace CLI Installation Script
set -e
# Detect platform and architecture
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
case $ARCH in
x86_64) ARCH="x64" ;;
arm64|aarch64) ARCH="arm64" ;;
*) echo "Unsupported architecture: $ARCH" && exit 1 ;;
esac
case $OS in
darwin) PLATFORM="darwin" ;;
linux) PLATFORM="linux" ;;
*) echo "Unsupported platform: $OS" && exit 1 ;;
esac
BINARY_NAME="vaultace-\${PLATFORM}-\${ARCH}"
INSTALL_DIR="/usr/local/bin"
DOWNLOAD_URL="https://github.com/vaultace/vaultace-cli/releases/latest/download/\${BINARY_NAME}"
echo "Installing Vaultace CLI for \${PLATFORM}-\${ARCH}..."
# Download binary
curl -L "\${DOWNLOAD_URL}" -o "\${BINARY_NAME}"
# Make executable
chmod +x "\${BINARY_NAME}"
# Move to install directory (requires sudo)
sudo mv "\${BINARY_NAME}" "\${INSTALL_DIR}/vaultace"
echo "ā
Vaultace CLI installed successfully!"
echo "Run 'vaultace --help' to get started."
`;
fs.writeFileSync('dist/install.sh', installScript);
fs.chmodSync('dist/install.sh', '755');
// Create package info
const packageInfo = {
name: '@vaultace/cli',
version: require('./package.json').version,
description: 'Vaultace CLI - AI Code Security Scanner',
built: new Date().toISOString(),
platforms: platforms.map(p => p.platform === 'node' ? 'cross-platform' : `${p.platform}-${p.arch}`),
files: fs.readdirSync('dist').filter(f => f !== 'package.json')
};
fs.writeFileSync('dist/package.json', JSON.stringify(packageInfo, null, 2));
console.log('\\nš Build completed successfully!');
console.log('š¦ Distribution files created in ./dist/');
console.log('\\nFiles:');
fs.readdirSync('dist').forEach(file => {
const stats = fs.statSync(path.join('dist', file));
const size = (stats.size / 1024 / 1024).toFixed(2);
console.log(` - ${file} (${size} MB)`);
});
}
// Run build
build().catch(error => {
console.error('ā Build failed:', error);
process.exit(1);
});