preload.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // IMPORTANT: Set env vars BEFORE any imports from src/ directory
  2. // xdg-basedir reads env vars at import time, so we must set these first
  3. import os from "os"
  4. import path from "path"
  5. import fs from "fs/promises"
  6. import fsSync from "fs"
  7. import { afterAll } from "bun:test"
  8. const dir = path.join(os.tmpdir(), "opencode-test-data-" + process.pid)
  9. await fs.mkdir(dir, { recursive: true })
  10. afterAll(() => {
  11. fsSync.rmSync(dir, { recursive: true, force: true })
  12. })
  13. // Set test home directory to isolate tests from user's actual home directory
  14. // This prevents tests from picking up real user configs/skills from ~/.claude/skills
  15. const testHome = path.join(dir, "home")
  16. await fs.mkdir(testHome, { recursive: true })
  17. process.env["OPENCODE_TEST_HOME"] = testHome
  18. // Set test managed config directory to isolate tests from system managed settings
  19. const testManagedConfigDir = path.join(dir, "managed")
  20. process.env["OPENCODE_TEST_MANAGED_CONFIG_DIR"] = testManagedConfigDir
  21. process.env["XDG_DATA_HOME"] = path.join(dir, "share")
  22. process.env["XDG_CACHE_HOME"] = path.join(dir, "cache")
  23. process.env["XDG_CONFIG_HOME"] = path.join(dir, "config")
  24. process.env["XDG_STATE_HOME"] = path.join(dir, "state")
  25. process.env["OPENCODE_MODELS_PATH"] = path.join(import.meta.dir, "tool", "fixtures", "models-api.json")
  26. // Write the cache version file to prevent global/index.ts from clearing the cache
  27. const cacheDir = path.join(dir, "cache", "opencode")
  28. await fs.mkdir(cacheDir, { recursive: true })
  29. await fs.writeFile(path.join(cacheDir, "version"), "14")
  30. // Clear provider env vars to ensure clean test state
  31. delete process.env["ANTHROPIC_API_KEY"]
  32. delete process.env["OPENAI_API_KEY"]
  33. delete process.env["GOOGLE_API_KEY"]
  34. delete process.env["GOOGLE_GENERATIVE_AI_API_KEY"]
  35. delete process.env["AZURE_OPENAI_API_KEY"]
  36. delete process.env["AWS_ACCESS_KEY_ID"]
  37. delete process.env["AWS_PROFILE"]
  38. delete process.env["AWS_REGION"]
  39. delete process.env["AWS_BEARER_TOKEN_BEDROCK"]
  40. delete process.env["OPENROUTER_API_KEY"]
  41. delete process.env["GROQ_API_KEY"]
  42. delete process.env["MISTRAL_API_KEY"]
  43. delete process.env["PERPLEXITY_API_KEY"]
  44. delete process.env["TOGETHER_API_KEY"]
  45. delete process.env["XAI_API_KEY"]
  46. delete process.env["DEEPSEEK_API_KEY"]
  47. delete process.env["FIREWORKS_API_KEY"]
  48. delete process.env["CEREBRAS_API_KEY"]
  49. delete process.env["SAMBANOVA_API_KEY"]
  50. // Now safe to import from src/
  51. const { Log } = await import("../src/util/log")
  52. Log.init({
  53. print: false,
  54. dev: true,
  55. level: "DEBUG",
  56. })