- Add .goreleaser.yml for multi-platform binary releases - Add npm-package/ with postinstall binary download - Add release.yml workflow for GoReleaser + npm publish + Homebrew tap 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
55 lines
1.3 KiB
JavaScript
55 lines
1.3 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
const { spawn } = require('child_process');
|
|
const path = require('path');
|
|
const os = require('os');
|
|
const fs = require('fs');
|
|
|
|
// Determine the platform-specific binary name
|
|
function getBinaryPath() {
|
|
const platform = os.platform();
|
|
const arch = os.arch();
|
|
|
|
let binaryName = 'gt';
|
|
if (platform === 'win32') {
|
|
binaryName = 'gt.exe';
|
|
}
|
|
|
|
// Binary is stored in the package's bin directory
|
|
const binaryPath = path.join(__dirname, binaryName);
|
|
|
|
if (!fs.existsSync(binaryPath)) {
|
|
console.error(`Error: gt binary not found at ${binaryPath}`);
|
|
console.error('This may indicate that the postinstall script failed to download the binary.');
|
|
console.error(`Platform: ${platform}, Architecture: ${arch}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
return binaryPath;
|
|
}
|
|
|
|
// Execute the native binary with all arguments passed through
|
|
function main() {
|
|
const binaryPath = getBinaryPath();
|
|
|
|
// Spawn the native gt binary with all command-line arguments
|
|
const child = spawn(binaryPath, process.argv.slice(2), {
|
|
stdio: 'inherit',
|
|
env: process.env
|
|
});
|
|
|
|
child.on('error', (err) => {
|
|
console.error(`Error executing gt binary: ${err.message}`);
|
|
process.exit(1);
|
|
});
|
|
|
|
child.on('exit', (code, signal) => {
|
|
if (signal) {
|
|
process.exit(1);
|
|
}
|
|
process.exit(code || 0);
|
|
});
|
|
}
|
|
|
|
main();
|