

























@@ -17,6 +17,8 @@ const FULL_RELEASE_VALIDATION_WORKFLOW = ".github/workflows/full-release-validat
1717const QA_LIVE_TRANSPORTS_WORKFLOW = ".github/workflows/qa-live-transports-convex.yml";
1818const UPDATE_MIGRATION_WORKFLOW = ".github/workflows/update-migration.yml";
1919const CI_CHECK_TESTBOX_WORKFLOW = ".github/workflows/ci-check-testbox.yml";
20+const CI_CHECK_ARM_TESTBOX_WORKFLOW = ".github/workflows/ci-check-arm-testbox.yml";
21+const CI_BUILD_ARTIFACTS_TESTBOX_WORKFLOW = ".github/workflows/ci-build-artifacts-testbox.yml";
2022const CRABBOX_HYDRATE_WORKFLOW = ".github/workflows/crabbox-hydrate.yml";
2123const CRABBOX_CONFIG = ".crabbox.yaml";
2224const SCHEDULED_LIVE_CHECKS_WORKFLOW = ".github/workflows/openclaw-scheduled-live-checks.yml";
@@ -1100,6 +1102,72 @@ describe("package artifact reuse", () => {
11001102const dockerPlanAction = readFileSync(DOCKER_E2E_PLAN_ACTION, "utf8");
11011103const hydrateScript = readFileSync(CI_HYDRATE_LIVE_AUTH_SCRIPT, "utf8");
11021104const providerVerifier = readFileSync(VERIFY_PROVIDER_SECRETS_SCRIPT, "utf8");
1105+const testboxProviderSecretKeys = [
1106+"OPENAI_API_KEY",
1107+"OPENAI_BASE_URL",
1108+"ANTHROPIC_API_KEY",
1109+"ANTHROPIC_API_KEY_OLD",
1110+"ANTHROPIC_API_TOKEN",
1111+"FACTORY_API_KEY",
1112+"BYTEPLUS_API_KEY",
1113+"CEREBRAS_API_KEY",
1114+"DEEPINFRA_API_KEY",
1115+"DASHSCOPE_API_KEY",
1116+"GROQ_API_KEY",
1117+"KIMI_API_KEY",
1118+"MODELSTUDIO_API_KEY",
1119+"MOONSHOT_API_KEY",
1120+"MISTRAL_API_KEY",
1121+"MINIMAX_API_KEY",
1122+"OPENCODE_API_KEY",
1123+"OPENCODE_ZEN_API_KEY",
1124+"OPENCLAW_LIVE_BROWSER_CDP_URL",
1125+"OPENCLAW_LIVE_SETUP_TOKEN",
1126+"OPENCLAW_LIVE_SETUP_TOKEN_MODEL",
1127+"OPENCLAW_LIVE_SETUP_TOKEN_PROFILE",
1128+"OPENCLAW_LIVE_SETUP_TOKEN_VALUE",
1129+"GEMINI_API_KEY",
1130+"GOOGLE_API_KEY",
1131+"OPENROUTER_API_KEY",
1132+"QWEN_API_KEY",
1133+"FAL_KEY",
1134+"RUNWAY_API_KEY",
1135+"DEEPGRAM_API_KEY",
1136+"TOGETHER_API_KEY",
1137+"VYDRA_API_KEY",
1138+"XAI_API_KEY",
1139+"ZAI_API_KEY",
1140+"Z_AI_API_KEY",
1141+"BYTEPLUS_ACCESS_KEY_ID",
1142+"BYTEPLUS_SECRET_ACCESS_KEY",
1143+"CLAUDE_CODE_OAUTH_TOKEN",
1144+"OPENCLAW_CODEX_AUTH_JSON",
1145+"OPENCLAW_CODEX_CONFIG_TOML",
1146+"OPENCLAW_CLAUDE_JSON",
1147+"OPENCLAW_CLAUDE_CREDENTIALS_JSON",
1148+"OPENCLAW_CLAUDE_SETTINGS_JSON",
1149+"OPENCLAW_CLAUDE_SETTINGS_LOCAL_JSON",
1150+"OPENCLAW_GEMINI_SETTINGS_JSON",
1151+"FIREWORKS_API_KEY",
1152+];
1153+const githubBackedTestboxProviderSteps = [
1154+workflowStep(
1155+workflowJob(CI_CHECK_TESTBOX_WORKFLOW, "check"),
1156+"Hydrate Testbox provider env helper",
1157+),
1158+workflowStep(
1159+workflowJob(CI_CHECK_ARM_TESTBOX_WORKFLOW, "check-arm"),
1160+"Hydrate Testbox provider env helper",
1161+),
1162+workflowStep(
1163+workflowJob(CI_BUILD_ARTIFACTS_TESTBOX_WORKFLOW, "build-artifacts"),
1164+"Hydrate Testbox provider env helper",
1165+),
1166+workflowStep(
1167+workflowJob(CRABBOX_HYDRATE_WORKFLOW, "hydrate-github"),
1168+"Hydrate provider env helper",
1169+),
1170+];
1103117111041172expect(hydrateScript).toContain(" FACTORY_API_KEY \\");
11051173expect(providerVerifier).toContain('url: "https://api.anthropic.com/v1/messages"');
@@ -1130,6 +1198,11 @@ describe("package artifact reuse", () => {
11301198]) {
11311199expect(workflow).toContain("FACTORY_API_KEY: ${{ secrets.FACTORY_API_KEY }}");
11321200}
1201+for (const step of githubBackedTestboxProviderSteps) {
1202+for (const key of testboxProviderSecretKeys) {
1203+expect(step.env?.[key]).toBe("${{ secrets." + key + " }}");
1204+}
1205+}
11331206expect(reusableWorkflow).toContain("FACTORY_API_KEY:\n required: false");
11341207expect(packageAcceptanceWorkflow).toContain("FACTORY_API_KEY:\n required: false");
11351208expectTextToIncludeAll(reusableWorkflow, [
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。