summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-12-09 19:46:38 -0500
committerDax Raad <[email protected]>2025-12-09 19:46:38 -0500
commit3512d02e9e46c16dbc59c2e410cc8049b5b9fb31 (patch)
treefa8f3f1e69cd64301e1ee63edb72bb3bc6269ae4
parent1efdceaf1010c8db21d8b9ef2ec213eba7472dd5 (diff)
downloadopencode-3512d02e9e46c16dbc59c2e410cc8049b5b9fb31.tar.gz
opencode-3512d02e9e46c16dbc59c2e410cc8049b5b9fb31.zip
ci
-rw-r--r--packages/opencode/test/fixture/fixture.ts16
-rw-r--r--packages/opencode/test/preload.ts12
2 files changed, 18 insertions, 10 deletions
diff --git a/packages/opencode/test/fixture/fixture.ts b/packages/opencode/test/fixture/fixture.ts
index b7793d261..a1b534046 100644
--- a/packages/opencode/test/fixture/fixture.ts
+++ b/packages/opencode/test/fixture/fixture.ts
@@ -1,27 +1,33 @@
import { $ } from "bun"
-import { realpathSync } from "fs"
+import * as fs from "fs/promises"
import os from "os"
import path from "path"
+// Strip null bytes from paths (defensive fix for CI environment issues)
+function sanitizePath(p: string): string {
+ return p.replace(/\0/g, "")
+}
+
type TmpDirOptions<T> = {
git?: boolean
init?: (dir: string) => Promise<T>
dispose?: (dir: string) => Promise<T>
}
export async function tmpdir<T>(options?: TmpDirOptions<T>) {
- const dirpath = path.join(os.tmpdir(), "opencode-test-" + Math.random().toString(36).slice(2))
- await $`mkdir -p ${dirpath}`.quiet()
+ const dirpath = sanitizePath(path.join(os.tmpdir(), "opencode-test-" + Math.random().toString(36).slice(2)))
+ await fs.mkdir(dirpath, { recursive: true })
if (options?.git) {
await $`git init`.cwd(dirpath).quiet()
await $`git commit --allow-empty -m "root commit ${dirpath}"`.cwd(dirpath).quiet()
}
const extra = await options?.init?.(dirpath)
+ const realpath = sanitizePath(await fs.realpath(dirpath))
const result = {
[Symbol.asyncDispose]: async () => {
await options?.dispose?.(dirpath)
- await $`rm -rf ${dirpath}`.quiet()
+ await fs.rm(dirpath, { recursive: true, force: true })
},
- path: realpathSync(dirpath),
+ path: realpath,
extra: extra as T,
}
return result
diff --git a/packages/opencode/test/preload.ts b/packages/opencode/test/preload.ts
index 43d012740..22f96e258 100644
--- a/packages/opencode/test/preload.ts
+++ b/packages/opencode/test/preload.ts
@@ -2,12 +2,14 @@
// xdg-basedir reads env vars at import time, so we must set these first
import os from "os"
import path from "path"
+import fs from "fs/promises"
-const testDataDir = path.join(os.tmpdir(), "opencode-test-data-" + process.pid)
-process.env["XDG_DATA_HOME"] = testDataDir
-process.env["XDG_CACHE_HOME"] = path.join(testDataDir, "cache")
-process.env["XDG_CONFIG_HOME"] = path.join(testDataDir, "config")
-process.env["XDG_STATE_HOME"] = path.join(testDataDir, "state")
+const dir = path.join(os.tmpdir(), "opencode-test-data-" + process.pid)
+await fs.mkdir(dir, { recursive: true })
+process.env["XDG_DATA_HOME"] = path.join(dir, "data")
+process.env["XDG_CACHE_HOME"] = path.join(dir, "cache")
+process.env["XDG_CONFIG_HOME"] = path.join(dir, "config")
+process.env["XDG_STATE_HOME"] = path.join(dir, "state")
// Clear provider env vars to ensure clean test state
delete process.env["ANTHROPIC_API_KEY"]