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
- 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、声明门禁一致
70 lines
2.2 KiB
JavaScript
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;
|
|
}
|