diff options
| author | Brendan Allan <[email protected]> | 2025-12-06 04:39:49 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-05 14:39:49 -0600 |
| commit | cd6bfb3f694675246a67dc0466d7603a37833586 (patch) | |
| tree | 9d5a4ae51553fbebd748428f1af4549c9adf8f16 /packages/tauri/scripts | |
| parent | ba417d80b1174d0e289d8fc91c77a8f6a0d592f4 (diff) | |
| download | opencode-cd6bfb3f694675246a67dc0466d7603a37833586.tar.gz opencode-cd6bfb3f694675246a67dc0466d7603a37833586.zip | |
OpenCode Desktop app (#5044)
Co-authored-by: Adam <[email protected]>
Diffstat (limited to 'packages/tauri/scripts')
| -rw-r--r-- | packages/tauri/scripts/copy-bundles.ts | 12 | ||||
| -rw-r--r-- | packages/tauri/scripts/predev.ts | 17 | ||||
| -rwxr-xr-x | packages/tauri/scripts/prepare.ts | 20 | ||||
| -rw-r--r-- | packages/tauri/scripts/utils.ts | 43 |
4 files changed, 92 insertions, 0 deletions
diff --git a/packages/tauri/scripts/copy-bundles.ts b/packages/tauri/scripts/copy-bundles.ts new file mode 100644 index 000000000..3fde1c190 --- /dev/null +++ b/packages/tauri/scripts/copy-bundles.ts @@ -0,0 +1,12 @@ +import { $ } from "bun" +import * as path from "node:path" + +import { RUST_TARGET } from "./utils" + +if (!RUST_TARGET) throw new Error("RUST_TARGET not defined") + +const BUNDLE_DIR = `src-tauri/target/${RUST_TARGET}/release/bundle` +const BUNDLES_OUT_DIR = path.join(process.cwd(), `src-tauri/target/bundles`) + +await $`mkdir -p ${BUNDLES_OUT_DIR}` +await $`cp -r ${BUNDLE_DIR}/*/OpenCode* ${BUNDLES_OUT_DIR}` diff --git a/packages/tauri/scripts/predev.ts b/packages/tauri/scripts/predev.ts new file mode 100644 index 000000000..bd9320a4a --- /dev/null +++ b/packages/tauri/scripts/predev.ts @@ -0,0 +1,17 @@ +import * as fs from "node:fs/promises" +import { $ } from "bun" + +import { copyBinaryToSidecarFolder, getCurrentSidecar } from "./utils" + +const RUST_TARGET = Bun.env.TAURI_ENV_TARGET_TRIPLE + +const sidecarConfig = getCurrentSidecar(RUST_TARGET) + +const binaryPath = `../opencode/dist/${sidecarConfig.ocBinary}/bin/opencode` + +if (!(await fs.exists(binaryPath))) { + console.log("opencode binary not found, building...") + await $`cd ../opencode && bun run build --single` +} + +await copyBinaryToSidecarFolder(binaryPath, RUST_TARGET) diff --git a/packages/tauri/scripts/prepare.ts b/packages/tauri/scripts/prepare.ts new file mode 100755 index 000000000..c49758432 --- /dev/null +++ b/packages/tauri/scripts/prepare.ts @@ -0,0 +1,20 @@ +#!/usr/bin/env bun + +import { $ } from "bun" + +import { copyBinaryToSidecarFolder, getCurrentSidecar } from "./utils" + +const sidecarConfig = getCurrentSidecar() + +const dir = "src-tauri/target/opencode-binaries" + +await $`mkdir -p ${dir}` +await $`gh release download --pattern ${sidecarConfig.ocBinary}.${sidecarConfig.assetExt} --repo sst/opencode --skip-existing --dir ${dir}` + +if (sidecarConfig.assetExt === "tar.gz") { + await $`tar -xvzf ${dir}/${sidecarConfig.ocBinary}.${sidecarConfig.assetExt} -C ${dir}` +} else { + await $`unzip -o ${dir}/${sidecarConfig.ocBinary}.${sidecarConfig.assetExt} -d ${dir}` +} + +await copyBinaryToSidecarFolder(`${dir}/opencode${process.platform === "win32" ? ".exe" : ""}`) diff --git a/packages/tauri/scripts/utils.ts b/packages/tauri/scripts/utils.ts new file mode 100644 index 000000000..b2885d00a --- /dev/null +++ b/packages/tauri/scripts/utils.ts @@ -0,0 +1,43 @@ +import { $ } from "bun" + +export const SIDECAR_BINARIES: Array<{ rustTarget: string; ocBinary: string; assetExt: string }> = [ + { + rustTarget: "aarch64-apple-darwin", + ocBinary: "opencode-darwin-arm64", + assetExt: "zip", + }, + { + rustTarget: "x86_64-apple-darwin", + ocBinary: "opencode-darwin-x64", + assetExt: "zip", + }, + { + rustTarget: "x86_64-pc-windows-msvc", + ocBinary: "opencode-windows-x64", + assetExt: "zip", + }, + { + rustTarget: "x86_64-unknown-linux-gnu", + ocBinary: "opencode-linux-x64", + assetExt: "tar.gz", + }, +] + +export const RUST_TARGET = Bun.env.RUST_TARGET + +export function getCurrentSidecar(target = RUST_TARGET) { + if (!target && !RUST_TARGET) throw new Error("RUST_TARGET not set") + + const binaryConfig = SIDECAR_BINARIES.find((b) => b.rustTarget === target) + if (!binaryConfig) throw new Error(`Sidecar configuration not available for Rust target '${RUST_TARGET}'`) + + return binaryConfig +} + +export async function copyBinaryToSidecarFolder(source: string, target = RUST_TARGET) { + await $`mkdir -p src-tauri/sidecars` + const dest = `src-tauri/sidecars/opencode-${target}${process.platform === "win32" ? ".exe" : ""}` + await $`cp ${source} ${dest}` + + console.log(`Copied ${source} to ${dest}`) +} |
