Files
Genarrative/apps/ai-game-creator-shell/scripts/cargo-features.mjs
T
suzmii 3fba76fd6e
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m22s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 1m52s
Project CI / Native shell tests (pull_request) Failing after 1m12s
Project CI / Frontend tests (pull_request) Failing after 44s
Project CI / Backend tests (pull_request) Successful in 3m28s
Project CI / Repository checks (pull_request) Successful in 1m50s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m20s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m31s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 8m14s
按审计结论收口 M3:CI 接线、并发口径、feature 单一推导与文档对齐
- CI:把 bundled-resources:test(13 条,跨平台、注入假执行器)接进 ai-game-creator-shell:check:web,Linux CI 即可覆盖准备步骤逻辑
- 并发:按「无实际场景不做并发支持」定论——不加锁,但替换失败改为可读错误并保留已生成的 staging;技术方案 §4.3 与风险表同步改写
- feature:新增 cargo-features.resolveEditorFeatures 作为唯一推导入口(env > 命令行 --features > 平台默认),dev 与发布入口的 cargo 参数、随包资源准备步骤共用同一集合;--no-bundle 也执行 staging(app 构建本身需要随包资源),只跳过总号发布
- 文档:pitfalls 的校验收口限定到 source 派生内容;里程碑验收清单按实况修正(命令 --、prepared 只查存在性、Windows 侧已复跑)
- 验证:准备步骤 13/13、发布入口 39/39、dev 入口 12/12、声明门禁一致
2026-09-28 10:54:29 +08:00

70 lines
2.2 KiB
JavaScript

/** 默认桌面能力;显式 feature 参数优先,不把应用参数当 Cargo 参数。 */
export function withDefaultCargoFeatures(argv, features) {
const separator = argv.indexOf('--');
const cargoArgs = separator < 0 ? argv : argv.slice(0, separator);
if (
!features.length ||
cargoArgs.some(
(value) =>
value === '--features' ||
value === '-f' ||
value.startsWith('--features=') ||
/^-f.+/u.test(value),
)
) {
return argv;
}
return [`--features=${features.join(',')}`, ...argv];
}
export function defaultEditorFeatures(target) {
return target === 'win32' || target.includes('windows')
? ['cocos-editor-execute', 'unity-editor-execute', 'godot-editor-execute']
: [];
}
/// 单一声明式解析:本次构建实际生效的编辑器 feature 集。
/// 解析顺序:环境变量 `AGC_DEV_CARGO_FEATURES` > 命令行 `--features` > 目标平台默认值。
/// dev 入口、发布入口的 cargo 参数与随包资源准备步骤都必须用这里的返回值,
/// 否则会出现「cargo 开了 feature、staging 没开(或反之)」的窗口。
export function resolveEditorFeatures({
argv = [],
target,
env = process.env,
} = {}) {
// 顺序:环境变量(dev 的显式覆盖)> 命令行 --features > 目标平台默认值。
const fromEnv = String(env.AGC_DEV_CARGO_FEATURES ?? '').trim();
if (fromEnv) {
return fromEnv
.split(',')
.map((name) => name.trim())
.filter(Boolean);
}
const fromArgv = featuresFromArgv(argv);
if (fromArgv) {
return fromArgv;
}
return defaultEditorFeatures(target);
}
/// 从 argv 里解析 `--features a,b` / `--features=a,b`;没有则返回 null。
export function featuresFromArgv(argv = []) {
for (let index = 0; index < argv.length; index += 1) {
const value = String(argv[index]);
if (value.startsWith('--features=')) {
return value
.slice('--features='.length)
.split(',')
.map((name) => name.trim())
.filter(Boolean);
}
if (value === '--features' && argv[index + 1] !== undefined) {
return String(argv[index + 1])
.split(',')
.map((name) => name.trim())
.filter(Boolean);
}
}
return null;
}