* 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()
39 lines
1.3 KiB
JavaScript
39 lines
1.3 KiB
JavaScript
// bin/platform.js
|
|
// Shared platform detection module - used by wrapper and postinstall
|
|
|
|
/**
|
|
* Get the platform-specific package name
|
|
* @param {{ platform: string, arch: string, libcFamily?: string | null }} options
|
|
* @returns {string} Package name like "oh-my-opencode-darwin-arm64"
|
|
* @throws {Error} If libc cannot be detected on Linux
|
|
*/
|
|
export function getPlatformPackage({ platform, arch, libcFamily }) {
|
|
let suffix = "";
|
|
if (platform === "linux") {
|
|
if (libcFamily === null || libcFamily === undefined) {
|
|
throw new Error(
|
|
"Could not detect libc on Linux. " +
|
|
"Please ensure detect-libc is installed or report this issue."
|
|
);
|
|
}
|
|
if (libcFamily === "musl") {
|
|
suffix = "-musl";
|
|
}
|
|
}
|
|
|
|
// Map platform names: win32 -> windows (for package name)
|
|
const os = platform === "win32" ? "windows" : platform;
|
|
return `oh-my-opencode-${os}-${arch}${suffix}`;
|
|
}
|
|
|
|
/**
|
|
* Get the path to the binary within a platform package
|
|
* @param {string} pkg Package name
|
|
* @param {string} platform Process platform
|
|
* @returns {string} Relative path like "oh-my-opencode-darwin-arm64/bin/oh-my-opencode"
|
|
*/
|
|
export function getBinaryPath(pkg, platform) {
|
|
const ext = platform === "win32" ? ".exe" : "";
|
|
return `${pkg}/bin/oh-my-opencode${ext}`;
|
|
}
|