mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 11:10:45 +00:00
test: interleave cold full-suite shards
This commit is contained in:
@@ -25,6 +25,7 @@ import {
|
||||
buildFullSuiteVitestRunPlans,
|
||||
createVitestRunSpecs,
|
||||
listFullExtensionVitestProjectConfigs,
|
||||
orderFullSuiteSpecsForParallelRun,
|
||||
parseTestProjectsArgs,
|
||||
resolveParallelFullSuiteConcurrency,
|
||||
resolveChangedTargetArgs,
|
||||
@@ -38,70 +39,6 @@ import {
|
||||
let releaseLock = () => {};
|
||||
let lockReleased = false;
|
||||
|
||||
const FULL_SUITE_CONFIG_WEIGHT = new Map([
|
||||
["test/vitest/vitest.gateway.config.ts", 180],
|
||||
["test/vitest/vitest.gateway-server.config.ts", 180],
|
||||
["test/vitest/vitest.gateway-core.config.ts", 179],
|
||||
["test/vitest/vitest.gateway-client.config.ts", 178],
|
||||
["test/vitest/vitest.gateway-methods.config.ts", 177],
|
||||
["test/vitest/vitest.commands.config.ts", 175],
|
||||
["test/vitest/vitest.agents-core.config.ts", 170],
|
||||
["test/vitest/vitest.agents-pi-embedded.config.ts", 169],
|
||||
["test/vitest/vitest.agents-support.config.ts", 168],
|
||||
["test/vitest/vitest.agents-tools.config.ts", 167],
|
||||
["test/vitest/vitest.extension-voice-call.config.ts", 169],
|
||||
["test/vitest/vitest.extensions.config.ts", 168],
|
||||
["test/vitest/vitest.extension-provider-openai.config.ts", 167],
|
||||
["test/vitest/vitest.runtime-config.config.ts", 166],
|
||||
["test/vitest/vitest.contracts-channel-config.config.ts", 85],
|
||||
["test/vitest/vitest.contracts-channel-surface.config.ts", 60],
|
||||
["test/vitest/vitest.contracts-channel-session.config.ts", 50],
|
||||
["test/vitest/vitest.contracts-channel-registry.config.ts", 35],
|
||||
["test/vitest/vitest.contracts-plugin.config.ts", 20],
|
||||
["test/vitest/vitest.tasks.config.ts", 165],
|
||||
["test/vitest/vitest.channels.config.ts", 164],
|
||||
["test/vitest/vitest.unit-fast.config.ts", 160],
|
||||
["test/vitest/vitest.auto-reply-reply.config.ts", 155],
|
||||
["test/vitest/vitest.infra.config.ts", 145],
|
||||
["test/vitest/vitest.secrets.config.ts", 140],
|
||||
["test/vitest/vitest.cron.config.ts", 135],
|
||||
["test/vitest/vitest.wizard.config.ts", 130],
|
||||
["test/vitest/vitest.unit-src.config.ts", 125],
|
||||
["test/vitest/vitest.extension-matrix.config.ts", 100],
|
||||
["test/vitest/vitest.extension-discord.config.ts", 98],
|
||||
["test/vitest/vitest.extension-providers.config.ts", 96],
|
||||
["test/vitest/vitest.extension-telegram.config.ts", 94],
|
||||
["test/vitest/vitest.extension-whatsapp.config.ts", 92],
|
||||
["test/vitest/vitest.auto-reply-core.config.ts", 90],
|
||||
["test/vitest/vitest.cli.config.ts", 86],
|
||||
["test/vitest/vitest.media.config.ts", 84],
|
||||
["test/vitest/vitest.plugins.config.ts", 82],
|
||||
["test/vitest/vitest.bundled.config.ts", 80],
|
||||
["test/vitest/vitest.extension-slack.config.ts", 78],
|
||||
["test/vitest/vitest.commands-light.config.ts", 48],
|
||||
["test/vitest/vitest.plugin-sdk.config.ts", 46],
|
||||
["test/vitest/vitest.auto-reply-top-level.config.ts", 45],
|
||||
["test/vitest/vitest.unit-ui.config.ts", 40],
|
||||
["test/vitest/vitest.plugin-sdk-light.config.ts", 38],
|
||||
["test/vitest/vitest.daemon.config.ts", 36],
|
||||
["test/vitest/vitest.boundary.config.ts", 34],
|
||||
["test/vitest/vitest.tooling.config.ts", 32],
|
||||
["test/vitest/vitest.unit-security.config.ts", 30],
|
||||
["test/vitest/vitest.unit-support.config.ts", 28],
|
||||
["test/vitest/vitest.extension-zalo.config.ts", 24],
|
||||
["test/vitest/vitest.extension-bluebubbles.config.ts", 22],
|
||||
["test/vitest/vitest.extension-irc.config.ts", 20],
|
||||
["test/vitest/vitest.extension-feishu.config.ts", 18],
|
||||
["test/vitest/vitest.extension-mattermost.config.ts", 16],
|
||||
["test/vitest/vitest.extension-messaging.config.ts", 14],
|
||||
["test/vitest/vitest.extension-imessage.config.ts", 13],
|
||||
["test/vitest/vitest.extension-line.config.ts", 12],
|
||||
["test/vitest/vitest.extension-signal.config.ts", 11],
|
||||
["test/vitest/vitest.extension-acpx.config.ts", 10],
|
||||
["test/vitest/vitest.extension-diffs.config.ts", 8],
|
||||
["test/vitest/vitest.extension-memory.config.ts", 6],
|
||||
["test/vitest/vitest.extension-msteams.config.ts", 4],
|
||||
]);
|
||||
const releaseLockOnce = () => {
|
||||
if (lockReleased) {
|
||||
return;
|
||||
@@ -198,39 +135,6 @@ async function runLoggedVitestSpec(spec) {
|
||||
};
|
||||
}
|
||||
|
||||
function resolveConfigSortWeight(config, shardTimings) {
|
||||
return shardTimings.get(config) ?? (FULL_SUITE_CONFIG_WEIGHT.get(config) ?? 0) * 1000;
|
||||
}
|
||||
|
||||
function interleaveSlowAndFastSpecs(sortedSpecs) {
|
||||
const ordered = [];
|
||||
let slowIndex = 0;
|
||||
let fastIndex = sortedSpecs.length - 1;
|
||||
while (slowIndex <= fastIndex) {
|
||||
ordered.push(sortedSpecs[slowIndex]);
|
||||
slowIndex += 1;
|
||||
if (slowIndex <= fastIndex) {
|
||||
ordered.push(sortedSpecs[fastIndex]);
|
||||
fastIndex -= 1;
|
||||
}
|
||||
}
|
||||
return ordered;
|
||||
}
|
||||
|
||||
function orderFullSuiteSpecsForParallelRun(specs, shardTimings = new Map()) {
|
||||
const hasMatchingShardTiming = specs.some((spec) => shardTimings.has(spec.config));
|
||||
const sortedSpecs = specs.toSorted((a, b) => {
|
||||
const weightDelta =
|
||||
resolveConfigSortWeight(b.config, shardTimings) -
|
||||
resolveConfigSortWeight(a.config, shardTimings);
|
||||
if (weightDelta !== 0) {
|
||||
return weightDelta;
|
||||
}
|
||||
return a.config.localeCompare(b.config);
|
||||
});
|
||||
return hasMatchingShardTiming ? interleaveSlowAndFastSpecs(sortedSpecs) : sortedSpecs;
|
||||
}
|
||||
|
||||
function isFullExtensionsProjectRun(specs) {
|
||||
const fullExtensionProjectConfigs = new Set(listFullExtensionVitestProjectConfigs());
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user