Files
openclaw/test/vitest/vitest.extensions.config.ts
Peter Steinberger 8cd092620d test: fix changed-run routing, dedupe gateway package lanes, repair force-rerun triggers (#104287)
* test: fix changed-run routing, dedupe gateway package lanes, repair force-rerun triggers

- route extensions/active-memory changed runs to their dedicated lane; add a
  generic guard that every catch-all-excluded extension root resolves to a
  dedicated config so future split lanes cannot silently skip changed tests
- exclude packages/gateway-client and packages/gateway-protocol from the unit
  lane; explicit targets now route to the gateway-client lane (was double-run)
- generate forceRerunTriggers from the test/vitest directory and resolve all
  entries absolute: Vitest matches triggers against absolute changed-file
  paths, so the old hand-maintained relative list never matched at all
- replace deprecated envFile:false with envDir:false (Vitest 4.1.9 warning)
- give scripts/test-live.mjs stall detection teeth: kill the process group and
  exit non-zero when OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS elapses quietly
- consolidate the live-docker shell target list into changed-lanes.mjs so the
  lane regex and check targets cannot drift; cover subagent-announce edits
- delete orphans: vitest.extension-clickclack.config.ts,
  vitest.full-core-unit.config.ts, scripts/test-docker-all.sh,
  scripts/test-live-acp-spawn-defaults-docker.sh

Closes #104231

* test: keep envDir literal so sharedVitestConfig satisfies Vite UserConfig

Vite 8 types envDir as string | false; the bare object literal widened false to
boolean and broke check:test-types at the defineConfig call sites.
2026-07-11 00:58:14 -07:00

81 lines
3.5 KiB
TypeScript

// Vitest extensions config wires the extensions test shard.
import { BUNDLED_PLUGIN_TEST_GLOB } from "./vitest.bundled-plugin-paths.ts";
import { extensionExcludedChannelTestGlobs } from "./vitest.channel-paths.mjs";
import { acpxExtensionTestRoots } from "./vitest.extension-acpx-paths.mjs";
import { activeMemoryExtensionTestRoots } from "./vitest.extension-active-memory-paths.mjs";
import { browserExtensionTestRoots } from "./vitest.extension-browser-paths.mjs";
import { codexExtensionTestRoots } from "./vitest.extension-codex-paths.mjs";
import { diffsExtensionTestRoots } from "./vitest.extension-diffs-paths.mjs";
import { feishuExtensionTestRoots } from "./vitest.extension-feishu-paths.mjs";
import { ircExtensionTestRoots } from "./vitest.extension-irc-paths.mjs";
import { matrixExtensionTestRoots } from "./vitest.extension-matrix-paths.mjs";
import { mattermostExtensionTestRoots } from "./vitest.extension-mattermost-paths.mjs";
import { mediaExtensionTestRoots } from "./vitest.extension-media-paths.mjs";
import { memoryExtensionTestRoots } from "./vitest.extension-memory-paths.mjs";
import { messagingExtensionTestRoots } from "./vitest.extension-messaging-paths.mjs";
import { miscExtensionTestRoots } from "./vitest.extension-misc-paths.mjs";
import { msTeamsExtensionTestRoots } from "./vitest.extension-msteams-paths.mjs";
import {
providerExtensionTestRoots,
providerOpenAiExtensionTestRoots,
} from "./vitest.extension-provider-paths.mjs";
import { qaExtensionTestRoots } from "./vitest.extension-qa-paths.mjs";
import { telegramExtensionTestRoots } from "./vitest.extension-telegram-paths.mjs";
import { voiceCallExtensionTestRoots } from "./vitest.extension-voice-call-paths.mjs";
import { whatsAppExtensionTestRoots } from "./vitest.extension-whatsapp-paths.mjs";
import { zaloExtensionTestRoots } from "./vitest.extension-zalo-paths.mjs";
import { loadPatternListFromEnv } from "./vitest.pattern-file.ts";
import { createScopedVitestConfig } from "./vitest.scoped-config.ts";
export const extensionCatchAllExcludedTestRoots = [
activeMemoryExtensionTestRoots,
acpxExtensionTestRoots,
browserExtensionTestRoots,
codexExtensionTestRoots,
diffsExtensionTestRoots,
feishuExtensionTestRoots,
ircExtensionTestRoots,
matrixExtensionTestRoots,
mattermostExtensionTestRoots,
mediaExtensionTestRoots,
memoryExtensionTestRoots,
messagingExtensionTestRoots,
miscExtensionTestRoots,
msTeamsExtensionTestRoots,
providerOpenAiExtensionTestRoots,
providerExtensionTestRoots,
qaExtensionTestRoots,
telegramExtensionTestRoots,
voiceCallExtensionTestRoots,
whatsAppExtensionTestRoots,
zaloExtensionTestRoots,
].flat();
export function loadIncludePatternsFromEnv(
env: Record<string, string | undefined> = process.env,
): string[] | null {
return loadPatternListFromEnv("OPENCLAW_VITEST_INCLUDE_FILE", env);
}
export function createExtensionsVitestConfig(
env: Record<string, string | undefined> = process.env,
) {
return createScopedVitestConfig(loadIncludePatternsFromEnv(env) ?? [BUNDLED_PLUGIN_TEST_GLOB], {
dir: "extensions",
env,
name: "extensions",
passWithNoTests: true,
setupFiles: ["test/setup.extensions.ts"],
// Some bundled plugins still run on the channel surface; keep those roots
// out of the shared extensions lane.
exclude: [
...extensionExcludedChannelTestGlobs,
...extensionCatchAllExcludedTestRoots.map(
(root) => `${root.replace(/^extensions\//u, "")}/**`,
),
],
});
}
export default createExtensionsVitestConfig();