@adalbertosteixeira/pull-requests-cli
Version:
Git pull request automation tool for JavaScript repositories
95 lines (77 loc) • 2.74 kB
JavaScript
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
import { dirname } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const BINARY_NAME = 'pull_requests';
function getBinaryName() {
const platform = process.platform;
const arch = process.arch;
// Map platform names to match our binary naming convention
let platformName = platform;
if (platform === 'win32') {
platformName = 'win32';
} else if (platform === 'darwin') {
platformName = 'darwin';
} else if (platform === 'linux') {
platformName = 'linux';
}
// Map architecture names to match our binary naming convention
let archName = arch;
if (arch === 'x64') {
archName = 'x64';
} else if (arch === 'arm64') {
archName = 'arm64';
}
const binaryName = `${BINARY_NAME}-${platformName}-${archName}${platform === 'win32' ? '.exe' : ''}`;
return binaryName;
}
function installLocalBinary() {
const binaryName = getBinaryName();
console.log(`Installing ${binaryName} from local binaries...`);
// Path to the bundled binary
const sourcePath = path.join(__dirname, '..', 'binaries', binaryName);
// Check if the binary exists
if (!fs.existsSync(sourcePath)) {
console.error(`Binary not found for platform: ${process.platform}-${process.arch}`);
console.error(`Expected binary: ${binaryName}`);
console.error(`Looked in: ${sourcePath}`);
console.error('Available binaries:');
const binariesDir = path.join(__dirname, '..', 'binaries');
if (fs.existsSync(binariesDir)) {
const availableBinaries = fs.readdirSync(binariesDir);
availableBinaries.forEach(binary => console.error(` - ${binary}`));
} else {
console.error(' No binaries directory found');
}
process.exit(1);
}
// Create bin directory
const binDir = path.join(__dirname, '..', 'bin');
if (!fs.existsSync(binDir)) {
fs.mkdirSync(binDir, { recursive: true });
}
const targetPath = path.join(binDir, BINARY_NAME + (process.platform === 'win32' ? '.exe' : ''));
try {
// Copy the binary to the bin directory
fs.copyFileSync(sourcePath, targetPath);
// Make it executable on Unix systems
if (process.platform !== 'win32') {
fs.chmodSync(targetPath, 0o755);
}
console.log(`✓ Successfully installed ${BINARY_NAME}`);
console.log(`Binary location: ${targetPath}`);
} catch (error) {
console.error('Failed to install binary:', error.message);
process.exit(1);
}
}
// Main installation
try {
installLocalBinary();
} catch (error) {
console.error('Installation failed:', error.message);
process.exit(1);
}