feat: Bun single-file executable distribution (#819)

* feat: add Bun single-file executable distribution

- Add 7 platform packages for standalone CLI binaries
- Add bin/platform.js for shared platform detection
- Add bin/oh-my-opencode.js ESM wrapper
- Add postinstall.mjs for binary verification
- Add script/build-binaries.ts for cross-compilation
- Update publish workflow for multi-package publishing
- Add CI guard against @ast-grep/napi in CLI
- Add unit tests for platform detection (12 tests)
- Update README to remove Bun runtime requirement

Platforms supported:
- macOS ARM64 & x64
- Linux x64 & ARM64 (glibc)
- Linux x64 & ARM64 (musl/Alpine)
- Windows x64

Closes #816

* chore: remove unnecessary @ast-grep/napi CI check

* chore: gitignore compiled platform binaries

* fix: use require() instead of top-level await import() for Bun compile compatibility

* refactor: use static ESM import for package.json instead of require()
This commit is contained in:
Kenny
2026-01-15 10:33:07 -05:00
committed by GitHub
parent 72a3975799
commit c67ca8275e
26 changed files with 695 additions and 30 deletions

View File

@@ -60,7 +60,7 @@ jobs:
run: bun run typecheck
publish:
runs-on: ubuntu-latest
runs-on: macos-latest
needs: [test, typecheck]
if: github.repository == 'code-yeongyu/oh-my-opencode'
steps:
@@ -112,6 +112,9 @@ jobs:
tsc --emitDeclarationOnly
echo "=== Running build:schema ==="
bun run build:schema
- name: Build platform binaries
run: bun run build:binaries
- name: Verify build output
run: |
@@ -121,6 +124,13 @@ jobs:
ls -la dist/cli/
test -f dist/index.js || (echo "ERROR: dist/index.js not found!" && exit 1)
test -f dist/cli/index.js || (echo "ERROR: dist/cli/index.js not found!" && exit 1)
echo "=== Platform binaries ==="
for platform in darwin-arm64 darwin-x64 linux-x64 linux-arm64 linux-x64-musl linux-arm64-musl; do
test -f "packages/${platform}/bin/oh-my-opencode" || (echo "ERROR: packages/${platform}/bin/oh-my-opencode not found!" && exit 1)
echo "✓ packages/${platform}/bin/oh-my-opencode"
done
test -f "packages/windows-x64/bin/oh-my-opencode.exe" || (echo "ERROR: packages/windows-x64/bin/oh-my-opencode.exe not found!" && exit 1)
echo "✓ packages/windows-x64/bin/oh-my-opencode.exe"
- name: Publish
run: bun run script/publish.ts