





















@@ -9,6 +9,15 @@ const LIVE_MEDIA_RUNNER_DOCKERFILE = ".github/images/live-media-runner/Dockerfil
99const LIVE_MEDIA_RUNNER_IMAGE = "ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04";
1010const LIVE_MEDIA_RUNNER_IMAGE_WORKFLOW = ".github/workflows/live-media-runner-image.yml";
1111const NPM_TELEGRAM_WORKFLOW = ".github/workflows/npm-telegram-beta-e2e.yml";
12+const MANTIS_DISCORD_SMOKE_WORKFLOW = ".github/workflows/mantis-discord-smoke.yml";
13+const MANTIS_DISCORD_STATUS_REACTIONS_WORKFLOW =
14+".github/workflows/mantis-discord-status-reactions.yml";
15+const MANTIS_DISCORD_THREAD_ATTACHMENT_WORKFLOW =
16+".github/workflows/mantis-discord-thread-attachment.yml";
17+const MANTIS_SLACK_DESKTOP_SMOKE_WORKFLOW = ".github/workflows/mantis-slack-desktop-smoke.yml";
18+const MANTIS_TELEGRAM_DESKTOP_PROOF_WORKFLOW =
19+".github/workflows/mantis-telegram-desktop-proof.yml";
20+const MANTIS_TELEGRAM_LIVE_WORKFLOW = ".github/workflows/mantis-telegram-live.yml";
1221const PACKAGE_JSON = "package.json";
1322const SETUP_PNPM_STORE_CACHE_ACTION = ".github/actions/setup-pnpm-store-cache/action.yml";
1423const DOCKER_E2E_PLAN_ACTION = ".github/actions/docker-e2e-plan/action.yml";
@@ -1439,6 +1448,58 @@ describe("package artifact reuse", () => {
14391448}
14401449});
144114501451+it("requires live proof evidence artifacts when proof jobs run", () => {
1452+const cases = [
1453+{
1454+workflowPath: MANTIS_DISCORD_SMOKE_WORKFLOW,
1455+jobName: "run_discord_smoke",
1456+stepName: "Upload Mantis artifacts",
1457+},
1458+{
1459+workflowPath: MANTIS_DISCORD_STATUS_REACTIONS_WORKFLOW,
1460+jobName: "run_status_reactions",
1461+stepName: "Upload Mantis status reaction artifacts",
1462+},
1463+{
1464+workflowPath: MANTIS_DISCORD_THREAD_ATTACHMENT_WORKFLOW,
1465+jobName: "run_thread_attachment",
1466+stepName: "Upload Mantis thread attachment artifacts",
1467+},
1468+{
1469+workflowPath: MANTIS_SLACK_DESKTOP_SMOKE_WORKFLOW,
1470+jobName: "run_slack_desktop",
1471+stepName: "Upload Mantis Slack desktop artifacts",
1472+},
1473+{
1474+workflowPath: MANTIS_TELEGRAM_DESKTOP_PROOF_WORKFLOW,
1475+jobName: "run_telegram_desktop_proof",
1476+stepName: "Upload Mantis Telegram desktop artifacts",
1477+},
1478+{
1479+workflowPath: MANTIS_TELEGRAM_LIVE_WORKFLOW,
1480+jobName: "run_telegram_live",
1481+stepName: "Upload Mantis Telegram artifacts",
1482+},
1483+{
1484+workflowPath: NPM_TELEGRAM_WORKFLOW,
1485+jobName: "run_package_telegram_e2e",
1486+stepName: "Upload npm Telegram E2E artifacts",
1487+},
1488+];
1489+1490+for (const item of cases) {
1491+const label = `${item.workflowPath} ${item.jobName}`;
1492+const uploadStep = workflowStep(
1493+workflowJob(item.workflowPath, item.jobName),
1494+item.stepName,
1495+);
1496+1497+expect(uploadStep.if, label).toContain("always()");
1498+expect(uploadStep.uses, label).toBe(UPLOAD_ARTIFACT_V7);
1499+expect(uploadStep.with?.["if-no-files-found"], label).toBe("error");
1500+}
1501+});
1502+14421503it("fails Docker E2E release lanes when summary artifacts are missing", () => {
14431504const cases = [
14441505{
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。