mirror of
https://github.com/stablyai/orca
synced 2026-04-21 14:17:16 +00:00
56 lines
1.9 KiB
JavaScript
56 lines
1.9 KiB
JavaScript
|
|
#!/usr/bin/env node
|
||
|
|
/**
|
||
|
|
* Bundle the relay daemon into a single relay.js file per platform.
|
||
|
|
*
|
||
|
|
* The relay runs on remote hosts via `node relay.js`, so it must be a
|
||
|
|
* self-contained CommonJS bundle with no external dependencies beyond
|
||
|
|
* Node.js built-ins. Native addons (node-pty, @parcel/watcher) are
|
||
|
|
* marked external and expected to be installed on the remote or
|
||
|
|
* gracefully degraded.
|
||
|
|
*/
|
||
|
|
import { build } from 'esbuild'
|
||
|
|
import { createHash } from 'crypto'
|
||
|
|
import { mkdirSync, readFileSync, writeFileSync } from 'fs'
|
||
|
|
import { join, dirname } from 'path'
|
||
|
|
import { fileURLToPath } from 'url'
|
||
|
|
|
||
|
|
const __dirname = dirname(fileURLToPath(import.meta.url))
|
||
|
|
const ROOT = join(__dirname, '..')
|
||
|
|
const RELAY_ENTRY = join(ROOT, 'src', 'relay', 'relay.ts')
|
||
|
|
|
||
|
|
const PLATFORMS = ['linux-x64', 'linux-arm64', 'darwin-x64', 'darwin-arm64']
|
||
|
|
|
||
|
|
const RELAY_VERSION = '0.1.0'
|
||
|
|
|
||
|
|
for (const platform of PLATFORMS) {
|
||
|
|
const outDir = join(ROOT, 'out', 'relay', platform)
|
||
|
|
mkdirSync(outDir, { recursive: true })
|
||
|
|
|
||
|
|
await build({
|
||
|
|
entryPoints: [RELAY_ENTRY],
|
||
|
|
bundle: true,
|
||
|
|
platform: 'node',
|
||
|
|
target: 'node18',
|
||
|
|
format: 'cjs',
|
||
|
|
outfile: join(outDir, 'relay.js'),
|
||
|
|
// Native addons cannot be bundled — they must exist on the remote host.
|
||
|
|
// The relay gracefully degrades when they are absent.
|
||
|
|
external: ['node-pty', '@parcel/watcher'],
|
||
|
|
sourcemap: false,
|
||
|
|
minify: true,
|
||
|
|
define: {
|
||
|
|
'process.env.NODE_ENV': '"production"'
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
// Why: include a content hash so the deploy check detects code changes
|
||
|
|
// even when RELAY_VERSION hasn't been bumped (common during development).
|
||
|
|
const relayContent = readFileSync(join(outDir, 'relay.js'))
|
||
|
|
const hash = createHash('sha256').update(relayContent).digest('hex').slice(0, 12)
|
||
|
|
writeFileSync(join(outDir, '.version'), `${RELAY_VERSION}+${hash}`)
|
||
|
|
|
||
|
|
console.log(`Built relay for ${platform} → ${outDir}/relay.js`)
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log('Relay build complete.')
|