UNPKG

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