summaryrefslogtreecommitdiffhomepage
path: root/packages/tauri/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/tauri/scripts')
-rw-r--r--packages/tauri/scripts/copy-bundles.ts12
-rw-r--r--packages/tauri/scripts/predev.ts17
-rwxr-xr-xpackages/tauri/scripts/prepare.ts20
-rw-r--r--packages/tauri/scripts/utils.ts43
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}`)
+}