feat: Add GitHub deployment artifacts (homebrew, npm) (gt-ufep6)

- 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>
This commit is contained in:
jack
2026-01-02 00:19:26 -08:00
committed by Steve Yegge
parent 8c7ea8a991
commit 03ffefc962
9 changed files with 783 additions and 0 deletions

54
npm-package/bin/gt.js Normal file
View File

@@ -0,0 +1,54 @@
#!/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();