chore: migrate monorepo toolchain pnpm+vitest → bun (bun test, bunfig preload, bun.lock)

- Gateway + backend + frontend: pnpm/vitest fully removed → bun 1.3.14
  (bun install, bun test tests/, bunfig.toml [test] preload, bun.lock).
- vitest configs deleted; vitest→bun facade (jest/mock/spyOn/waitForCompat)
  keeps the vitest-style assertions working under bun:test.
- flake.nix: bunInstall switch; pruned prod-pass now removes post-pnpm
  dev-toolchain trees; frontend builds Next standalone via bun's next.
- CI: deploy.yml installs with bun + runs bun test tests/ per service.
- 190 tests green (146 gateway + 37 backend pass, 14 skip), 0 fail;
  tsc + biome across all 3 services clean.

Co-authored-by: git-migration[bot] <noreply@gmw.local>
This commit is contained in:
mytheclipsebotreviewandgit-migration[bot] committed 2026-09-24 23:50:30 +07:00
1 parent 7acc49e1fb
commit 7be069d73f
25 files changed
+1819 -9008

No files matched your search

@@ -6,12 +6,12 @@
// single-key getter: unexpired rows only, malformed rows skipped, verdicts
// normalized through the shared parser. The DB layer is mocked — no live
// Postgres in unit tests.
import { beforeEach, describe, expect, it, vi } from "vitest";
import { beforeEach, describe, expect, it, jest, mock } from "bun:test";
const executeAll = vi.fn();
const executeGet = vi.fn();
const executeAll = jest.fn();
const executeGet = jest.fn();
vi.mock("../src/shared/database/drizzle.js", () => ({
mock.module("../src/shared/database/drizzle.js", () => ({
executeAll: (...args: unknown[]) => executeAll(...args),
executeGet: (...args: unknown[]) => executeGet(...args),
}));
@@ -0,0 +1,7 @@
// bun test preload — replicates the env block from the old vitest.config.ts.
// Runs before any test module imports, so the config singleton (which reads
// process.env at import time) gets the same test values it had under vitest.
process.env.DISCORD_TOKEN = "test-discord-token";
process.env.DATABASE_URL = "postgres://localhost:6432/test";
process.env.AI_ANALYSIS_ENABLED = "true";
process.env.AI_LLM_API_KEY = "sk-test";
@@ -45,7 +45,7 @@ describe("tinyFishSearch fallback", () => {
// Pin the live config object to a known-disabled state: the shell may
// export a real TINYFISH_API_KEY (dev box), which would flip
// isTinyFishEnabled() and let tests hit the network.
const { config } = await import("../../src/shared/config/index.js");
const { config } = await import("../src/shared/config/index.js");
prevKey = config.TINYFISH_API_KEY;
prevEnabled = config.TINYFISH_SEARCH_ENABLED;
(config as Record<string, unknown>).TINYFISH_API_KEY = "";
@@ -54,7 +54,7 @@ describe("tinyFishSearch fallback", () => {
afterEach(async () => {
vi.restoreAllMocks();
const { config } = await import("../../src/shared/config/index.js");
const { config } = await import("../src/shared/config/index.js");
(config as Record<string, unknown>).TINYFISH_API_KEY = prevKey;
(config as Record<string, unknown>).TINYFISH_SEARCH_ENABLED = prevEnabled;
});
@@ -63,7 +63,7 @@ describe("tinyFishSearch fallback", () => {
config: Record<string, unknown>;
prev: string;
}> {
const { config } = await import("../../src/shared/config/index.js");
const { config } = await import("../src/shared/config/index.js");
const prev = config.TINYFISH_API_KEY;
(config as Record<string, unknown>).TINYFISH_API_KEY = "sk-test-key";
return { config: config as unknown as Record<string, unknown>, prev };