Merge branch 'master' into fix/agc-rust-staging-idempotency
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 1m48s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m28s
Project CI / Native shell tests (pull_request) Failing after 1m38s
Project CI / Backend tests (pull_request) Successful in 3m44s
Project CI / Frontend tests (pull_request) Successful in 1m52s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m42s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 11m23s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 9m32s
Project CI / Repository checks (pull_request) Successful in 2m18s

This commit is contained in:
2026-09-30 19:44:06 +08:00
8 changed files with 44 additions and 26 deletions
+2
View File
@@ -107,6 +107,8 @@ done
echo '[rust-cache] warming desktop tests and AGC prompt contracts'
cargo test --manifest-path apps/desktop-shell/src-tauri/Cargo.toml --no-run
# AGC build.rs 从 node_modules 准备 Claude Agent SDK 与目标平台原生运行时。
bash scripts/ci-npm-ci-with-retry.sh
cargo test --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml \
--test runtime_prompt_bundle_build --test prompt_source_boundaries --no-run
+18 -7
View File
@@ -67,14 +67,9 @@ const jobNames = [
'ai-game-creator-shell-rust-crates',
] as const;
// 这几个 job 是纯 cargo 门禁:AGC 壳的 Rust 分片与 agent-run smoke 只用 cargo 与
// node 内建模块(smoke 脚本只 import `node:*`),crate 级测试只跑 cargo 命令,
// 都不需要 node_modules。省掉这些 `npm ci`(各 1~3 分钟)是把客户端 Rust 关键路径
// 压到 7 分钟以内的前提,因此这里显式允许它们不装 npm 依赖。
// crate 级测试只跑共享 / 平台 / 编辑器插件的 Cargo manifest,不构建 AGC 壳。
// 壳的 Rust 分片与 agent-run smoke 会执行 build.rs,需要 npm 安装的 Claude Agent SDK。
const jobsWithoutNpmInstall: readonly string[] = [
'ai-game-creator-shell-rust-lane-1',
'ai-game-creator-shell-rust-lane-2',
'ai-game-creator-shell-rust-smoke',
'ai-game-creator-shell-rust-crates',
];
@@ -199,6 +194,13 @@ describe('project CI workflow', () => {
section.indexOf('Checkout full history from Gitea'),
);
expect(prepare).toBeLessThan(section.indexOf(`- name: ${firstRustStep}`));
if (!jobsWithoutNpmInstall.includes(job)) {
const npmInstall = section.indexOf(
'bash scripts/ci-npm-ci-with-retry.sh',
);
expect(npmInstall).toBeGreaterThanOrEqual(0);
expect(npmInstall).toBeLessThan(prepare);
}
expect(
stepSection(job, 'Report isolated Rust compilation cache'),
).toContain('if: always()');
@@ -246,6 +248,15 @@ describe('project CI workflow', () => {
expect(warmCommands).toContain(
'cargo test --manifest-path apps/desktop-shell/src-tauri/Cargo.toml --no-run',
);
const npmInstall = warmCommands.indexOf(
'bash scripts/ci-npm-ci-with-retry.sh',
);
expect(npmInstall).toBeGreaterThanOrEqual(0);
expect(npmInstall).toBeLessThan(
warmCommands.indexOf(
'cargo test --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml',
),
);
});
it('runs for master pushes, pull requests, and manual dispatch only', () => {