Dax Raad 2 月之前
父节点
当前提交
3512d02e9e
共有 2 个文件被更改,包括 18 次插入10 次删除
  1. 11 5
      packages/opencode/test/fixture/fixture.ts
  2. 7 5
      packages/opencode/test/preload.ts

+ 11 - 5
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

+ 7 - 5
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"]