惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
F
Fortinet All Blogs
云风的 BLOG
云风的 BLOG
MyScale Blog
MyScale Blog
D
DataBreaches.Net
Stack Overflow Blog
Stack Overflow Blog
A
About on SuperTechFans
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
B
Blog RSS Feed
I
InfoQ
N
Netflix TechBlog - Medium
T
The Blog of Author Tim Ferriss
Microsoft Azure Blog
Microsoft Azure Blog
Recent Announcements
Recent Announcements
GbyAI
GbyAI
H
Help Net Security
L
LangChain Blog
M
MIT News - Artificial intelligence
Y
Y Combinator Blog
aimingoo的专栏
aimingoo的专栏

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
fix(ci): require release QA evidence artifacts · openclaw...
vincentkoc · 2026-06-23 · via Recent Commits to openclaw:main
Original file line numberDiff line numberDiff line change

@@ -853,7 +853,7 @@ jobs:

853853

name: release-qa-parity-${{ matrix.lane }}-${{ needs.resolve_target.outputs.revision }}

854854

path: .artifacts/qa-e2e/

855855

retention-days: 14

856-

if-no-files-found: warn

856+

if-no-files-found: error

857857
858858

- name: Record advisory status

859859

if: always()

@@ -959,7 +959,7 @@ jobs:

959959

name: release-qa-parity-${{ needs.resolve_target.outputs.revision }}

960960

path: .artifacts/qa-e2e/

961961

retention-days: 14

962-

if-no-files-found: warn

962+

if-no-files-found: error

963963
964964

- name: Record advisory status

965965

if: always()

@@ -1131,7 +1131,7 @@ jobs:

11311131

name: release-qa-runtime-parity-${{ needs.resolve_target.outputs.revision }}

11321132

path: .artifacts/qa-e2e/

11331133

retention-days: 14

1134-

if-no-files-found: warn

1134+

if-no-files-found: error

11351135
11361136

- name: Record advisory status

11371137

if: always()

@@ -1241,13 +1241,13 @@ jobs:

12411241

--output .artifacts/qa-e2e/runtime-parity-standard-report/qa-runtime-tool-coverage-report.md

12421242
12431243

- name: Upload runtime tool coverage artifacts

1244-

if: always()

1244+

if: ${{ always() && steps.verify_runtime_parity_status.outputs.ready == 'true' }}

12451245

uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7

12461246

with:

12471247

name: release-qa-runtime-tool-coverage-${{ needs.resolve_target.outputs.revision }}

12481248

path: .artifacts/qa-e2e/runtime-parity-standard-report/

12491249

retention-days: 14

1250-

if-no-files-found: warn

1250+

if-no-files-found: error

12511251
12521252

qa_live_matrix_release_checks:

12531253

name: Run QA Lab live Matrix lane

@@ -1327,7 +1327,7 @@ jobs:

13271327

name: release-qa-live-matrix-${{ needs.resolve_target.outputs.revision }}

13281328

path: .artifacts/qa-e2e/

13291329

retention-days: 14

1330-

if-no-files-found: warn

1330+

if-no-files-found: error

13311331
13321332

- name: Record advisory status

13331333

if: always()

@@ -1467,7 +1467,7 @@ jobs:

14671467

name: release-qa-live-telegram-${{ needs.resolve_target.outputs.revision }}

14681468

path: .artifacts/qa-e2e/

14691469

retention-days: 14

1470-

if-no-files-found: warn

1470+

if-no-files-found: error

14711471
14721472

- name: Record advisory status

14731473

if: always()

@@ -1607,7 +1607,7 @@ jobs:

16071607

name: release-qa-live-discord-${{ needs.resolve_target.outputs.revision }}

16081608

path: .artifacts/qa-e2e/

16091609

retention-days: 14

1610-

if-no-files-found: warn

1610+

if-no-files-found: error

16111611
16121612

- name: Record advisory status

16131613

if: always()

@@ -1750,7 +1750,7 @@ jobs:

17501750

name: release-qa-live-whatsapp-${{ needs.resolve_target.outputs.revision }}

17511751

path: .artifacts/qa-e2e/

17521752

retention-days: 14

1753-

if-no-files-found: warn

1753+

if-no-files-found: error

17541754
17551755

- name: Record advisory status

17561756

if: always()

@@ -1890,7 +1890,7 @@ jobs:

18901890

name: release-qa-live-slack-${{ needs.resolve_target.outputs.revision }}

18911891

path: .artifacts/qa-e2e/

18921892

retention-days: 14

1893-

if-no-files-found: warn

1893+

if-no-files-found: error

18941894
18951895

- name: Record advisory status

18961896

if: always()

Original file line numberDiff line numberDiff line change

@@ -1448,6 +1448,38 @@ describe("package artifact reuse", () => {

14481448

}

14491449

});

14501450
1451+

it("requires release-check QA evidence artifacts when lanes run", () => {

1452+

const cases = [

1453+

["qa_lab_parity_lane_release_checks", "Upload parity lane artifacts"],

1454+

["qa_lab_parity_report_release_checks", "Upload parity artifacts"],

1455+

["qa_lab_runtime_parity_release_checks", "Upload runtime parity artifacts"],

1456+

["qa_live_matrix_release_checks", "Upload Matrix QA artifacts"],

1457+

["qa_live_telegram_release_checks", "Upload Telegram QA artifacts"],

1458+

["qa_live_discord_release_checks", "Upload Discord QA artifacts"],

1459+

["qa_live_whatsapp_release_checks", "Upload WhatsApp QA artifacts"],

1460+

["qa_live_slack_release_checks", "Upload Slack QA artifacts"],

1461+

];

1462+
1463+

for (const [jobName, stepName] of cases) {

1464+

const uploadStep = workflowStep(workflowJob(RELEASE_CHECKS_WORKFLOW, jobName), stepName);

1465+
1466+

expect(uploadStep.if, jobName).toBe("always()");

1467+

expect(uploadStep.uses, jobName).toBe(UPLOAD_ARTIFACT_V7);

1468+

expect(uploadStep.with?.["if-no-files-found"], jobName).toBe("error");

1469+

}

1470+
1471+

const runtimeCoverageUpload = workflowStep(

1472+

workflowJob(RELEASE_CHECKS_WORKFLOW, "runtime_tool_coverage_release_checks"),

1473+

"Upload runtime tool coverage artifacts",

1474+

);

1475+

expect(runtimeCoverageUpload.if).toContain("always()");

1476+

expect(runtimeCoverageUpload.if).toContain(

1477+

"steps.verify_runtime_parity_status.outputs.ready == 'true'",

1478+

);

1479+

expect(runtimeCoverageUpload.uses).toBe(UPLOAD_ARTIFACT_V7);

1480+

expect(runtimeCoverageUpload.with?.["if-no-files-found"]).toBe("error");

1481+

});

1482+
14511483

it("requires live proof evidence artifacts when proof jobs run", () => {

14521484

const cases = [

14531485

{