preload.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. const dir = path.join(os.tmpdir(), "opencode-test-data-" + process.pid)
  7. await fs.mkdir(dir, { recursive: true })
  8. process.env["XDG_DATA_HOME"] = path.join(dir, "share")
  9. process.env["XDG_CACHE_HOME"] = path.join(dir, "cache")
  10. process.env["XDG_CONFIG_HOME"] = path.join(dir, "config")
  11. process.env["XDG_STATE_HOME"] = path.join(dir, "state")
  12. // Pre-fetch models.json so tests don't need the macro fallback
  13. // Also write the cache version file to prevent global/index.ts from clearing the cache
  14. const cacheDir = path.join(dir, "cache", "opencode")
  15. await fs.mkdir(cacheDir, { recursive: true })
  16. await fs.writeFile(path.join(cacheDir, "version"), "14")
  17. const response = await fetch("https://models.dev/api.json")
  18. if (response.ok) {
  19. await fs.writeFile(path.join(cacheDir, "models.json"), await response.text())
  20. }
  21. // Disable models.dev refresh to avoid race conditions during tests
  22. process.env["OPENCODE_DISABLE_MODELS_FETCH"] = "true"
  23. // Clear provider env vars to ensure clean test state
  24. delete process.env["ANTHROPIC_API_KEY"]
  25. delete process.env["OPENAI_API_KEY"]
  26. delete process.env["GOOGLE_API_KEY"]
  27. delete process.env["GOOGLE_GENERATIVE_AI_API_KEY"]
  28. delete process.env["AZURE_OPENAI_API_KEY"]
  29. delete process.env["AWS_ACCESS_KEY_ID"]
  30. delete process.env["AWS_PROFILE"]
  31. delete process.env["OPENROUTER_API_KEY"]
  32. delete process.env["GROQ_API_KEY"]
  33. delete process.env["MISTRAL_API_KEY"]
  34. delete process.env["PERPLEXITY_API_KEY"]
  35. delete process.env["TOGETHER_API_KEY"]
  36. delete process.env["XAI_API_KEY"]
  37. delete process.env["DEEPSEEK_API_KEY"]
  38. delete process.env["FIREWORKS_API_KEY"]
  39. delete process.env["CEREBRAS_API_KEY"]
  40. delete process.env["SAMBANOVA_API_KEY"]
  41. // Now safe to import from src/
  42. const { Log } = await import("../src/util/log")
  43. Log.init({
  44. print: false,
  45. dev: true,
  46. level: "DEBUG",
  47. })