ci: split native live release shards

This commit is contained in:
Peter Steinberger
2026-04-28 00:48:52 +01:00
parent 3f94f25a3c
commit b90f29d313
4 changed files with 129 additions and 13 deletions

View File

@@ -275,16 +275,25 @@ job:
- `native-live-src-agents`
- `native-live-src-gateway-core`
- `native-live-src-gateway-profiles` (release CI runs this with provider
filters such as `OPENCLAW_LIVE_GATEWAY_PROVIDERS=anthropic`)
- `native-live-src-gateway-backends`
- `native-live-test`
- `native-live-extensions-a-k`
- `native-live-extensions-l-n`
- `native-live-extensions-openai`
- `native-live-extensions-o-z`
- `native-live-extensions-o-z-other`
- `native-live-extensions-xai`
- `native-live-extensions-media`
- `native-live-extensions-media-audio`
- `native-live-extensions-media-music`
- `native-live-extensions-media-video`
Use `node scripts/test-live-shard.mjs <shard> --list` to see the exact files
before rerunning a failed native live shard.
before rerunning a failed native live shard. The aggregate `o-z` and `media`
shards remain useful locally; release CI uses the smaller provider/media shards
so one live-provider flake does not force a broad native live rerun.
For model-list or provider-selection fixes, use `live_models_only=true` plus the
specific `live_model_providers` allowlist. Confirm logs show the expected

View File

@@ -1491,6 +1491,42 @@ jobs:
timeout_minutes: 90
needs_ffmpeg: false
profile_env_only: false
- suite_id: native-live-src-gateway-profiles-anthropic
label: Native live gateway profiles Anthropic
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=anthropic node scripts/test-live-shard.mjs native-live-src-gateway-profiles
timeout_minutes: 90
needs_ffmpeg: false
profile_env_only: false
- suite_id: native-live-src-gateway-profiles-google
label: Native live gateway profiles Google
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=google node scripts/test-live-shard.mjs native-live-src-gateway-profiles
timeout_minutes: 90
needs_ffmpeg: false
profile_env_only: false
- suite_id: native-live-src-gateway-profiles-minimax
label: Native live gateway profiles MiniMax
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=minimax,minimax-portal node scripts/test-live-shard.mjs native-live-src-gateway-profiles
timeout_minutes: 90
needs_ffmpeg: false
profile_env_only: false
- suite_id: native-live-src-gateway-profiles-openai
label: Native live gateway profiles OpenAI
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=openai node scripts/test-live-shard.mjs native-live-src-gateway-profiles
timeout_minutes: 90
needs_ffmpeg: false
profile_env_only: false
- suite_id: native-live-src-gateway-profiles-fireworks
label: Native live gateway profiles Fireworks
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=fireworks node scripts/test-live-shard.mjs native-live-src-gateway-profiles
timeout_minutes: 90
needs_ffmpeg: false
profile_env_only: false
- suite_id: native-live-src-gateway-profiles-other
label: Native live gateway profiles other providers
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=deepseek,opencode-go,openrouter,xai,zai node scripts/test-live-shard.mjs native-live-src-gateway-profiles
timeout_minutes: 90
needs_ffmpeg: false
profile_env_only: false
- suite_id: native-live-src-gateway-backends
label: Native live gateway backends
command: node scripts/test-live-shard.mjs native-live-src-gateway-backends
@@ -1521,15 +1557,33 @@ jobs:
timeout_minutes: 90
needs_ffmpeg: false
profile_env_only: false
- suite_id: native-live-extensions-o-z
label: Native live plugins O-Z
command: node scripts/test-live-shard.mjs native-live-extensions-o-z
- suite_id: native-live-extensions-o-z-other
label: Native live plugins O-Z other
command: node scripts/test-live-shard.mjs native-live-extensions-o-z-other
timeout_minutes: 90
needs_ffmpeg: false
profile_env_only: false
- suite_id: native-live-extensions-media
label: Native live media plugins
command: node scripts/test-live-shard.mjs native-live-extensions-media
- suite_id: native-live-extensions-xai
label: Native live xAI plugin
command: node scripts/test-live-shard.mjs native-live-extensions-xai
timeout_minutes: 90
needs_ffmpeg: false
profile_env_only: false
- suite_id: native-live-extensions-media-audio
label: Native live media audio plugins
command: node scripts/test-live-shard.mjs native-live-extensions-media-audio
timeout_minutes: 90
needs_ffmpeg: false
profile_env_only: false
- suite_id: native-live-extensions-media-music
label: Native live media music plugins
command: node scripts/test-live-shard.mjs native-live-extensions-media-music
timeout_minutes: 90
needs_ffmpeg: true
profile_env_only: false
- suite_id: native-live-extensions-media-video
label: Native live media video plugins
command: node scripts/test-live-shard.mjs native-live-extensions-media-video
timeout_minutes: 90
needs_ffmpeg: true
profile_env_only: false

View File

@@ -28,13 +28,17 @@ release box rerun bounded after a focused fix.
The release live/E2E child keeps broad native `pnpm test:live` coverage, but it
runs it as named shards (`native-live-src-agents`,
`native-live-src-gateway-core`, `native-live-src-gateway-backends`,
`native-live-test`, `native-live-extensions-a-k`,
`native-live-extensions-l-n`, `native-live-extensions-openai`,
`native-live-extensions-o-z`, and `native-live-extensions-media`) through
`native-live-src-gateway-core`, provider-filtered
`native-live-src-gateway-profiles` jobs,
`native-live-src-gateway-backends`, `native-live-test`,
`native-live-extensions-a-k`, `native-live-extensions-l-n`,
`native-live-extensions-openai`, `native-live-extensions-o-z-other`,
`native-live-extensions-xai`, and split media audio/music/video shards) through
`scripts/test-live-shard.mjs` instead of one serial job. That keeps the same
file coverage while making slow live provider failures easier to rerun and
diagnose.
diagnose. The aggregate `native-live-extensions-o-z` and
`native-live-extensions-media` shard names remain valid for manual one-shot
reruns.
`Package Acceptance` is the side-run workflow for validating a package artifact
without blocking the release workflow. It resolves one candidate from a

View File

@@ -9,13 +9,19 @@ const LIVE_TEST_SUFFIX = ".live.test.ts";
export const LIVE_TEST_SHARDS = Object.freeze([
"native-live-src-agents",
"native-live-src-gateway-core",
"native-live-src-gateway-profiles",
"native-live-src-gateway-backends",
"native-live-test",
"native-live-extensions-a-k",
"native-live-extensions-l-n",
"native-live-extensions-openai",
"native-live-extensions-o-z",
"native-live-extensions-o-z-other",
"native-live-extensions-xai",
"native-live-extensions-media",
"native-live-extensions-media-audio",
"native-live-extensions-media-music",
"native-live-extensions-media-video",
]);
function walkFiles(rootDir) {
@@ -83,6 +89,10 @@ function isGatewayBackendLiveTest(file) {
);
}
function isGatewayProfilesLiveTest(file) {
return file === "src/gateway/gateway-models.profiles.live.test.ts";
}
function isExtensionMediaLiveTest(file) {
return (
file === "extensions/music-generation-providers.live.test.ts" ||
@@ -94,6 +104,26 @@ function isExtensionMediaLiveTest(file) {
);
}
function isExtensionMediaMusicLiveTest(file) {
return file === "extensions/music-generation-providers.live.test.ts";
}
function isExtensionMediaVideoLiveTest(file) {
return file === "extensions/video-generation-providers.live.test.ts";
}
function isExtensionMediaAudioLiveTest(file) {
return (
isExtensionMediaLiveTest(file) &&
!isExtensionMediaMusicLiveTest(file) &&
!isExtensionMediaVideoLiveTest(file)
);
}
function isXaiLiveTest(file) {
return file.startsWith("extensions/xai/");
}
export function selectLiveShardFiles(shard, files = collectAllLiveTestFiles()) {
switch (shard) {
case "native-live-src-agents":
@@ -106,8 +136,11 @@ export function selectLiveShardFiles(shard, files = collectAllLiveTestFiles()) {
return files.filter(
(file) =>
(file.startsWith("src/gateway/") || file.startsWith("src/crestodian/")) &&
!isGatewayBackendLiveTest(file),
!isGatewayBackendLiveTest(file) &&
!isGatewayProfilesLiveTest(file),
);
case "native-live-src-gateway-profiles":
return files.filter(isGatewayProfilesLiveTest);
case "native-live-src-gateway-backends":
return files.filter(isGatewayBackendLiveTest);
case "native-live-test":
@@ -132,8 +165,24 @@ export function selectLiveShardFiles(shard, files = collectAllLiveTestFiles()) {
!file.startsWith("extensions/openai/") &&
!isExtensionMediaLiveTest(file),
);
case "native-live-extensions-o-z-other":
return files.filter(
(file) =>
isExtensionInRange(file, "o", "z") &&
!file.startsWith("extensions/openai/") &&
!isExtensionMediaLiveTest(file) &&
!isXaiLiveTest(file),
);
case "native-live-extensions-xai":
return files.filter(isXaiLiveTest);
case "native-live-extensions-media":
return files.filter(isExtensionMediaLiveTest);
case "native-live-extensions-media-audio":
return files.filter(isExtensionMediaAudioLiveTest);
case "native-live-extensions-media-music":
return files.filter(isExtensionMediaMusicLiveTest);
case "native-live-extensions-media-video":
return files.filter(isExtensionMediaVideoLiveTest);
case "native-live-extensions-l-z":
return files.filter((file) => isExtensionInRange(file, "l", "z"));
default: