新增后台 AGC 模板管理与模板库内容寻址落库
Project CI / AI game creator shell Rust crates (push) Successful in 2m53s
Project CI / AI game creator shell Rust smoke (push) Successful in 3m42s
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
Project CI / Backend tests (push) Has been cancelled
Project CI / Frontend tests (push) Has been cancelled
Project CI / Repository checks (push) Has been cancelled
Project CI / AI game creator shell web tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 1/2 (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled

- 后台新增「模板管理」页:按权限查看并编辑模板名称/简介/标签/封面,支持上架与下架;路由、侧栏、tab 权限、API 客户端与 DTO 同步接入
- api-server 新增 /admin/api/agc-templates 读取与更新路由,复用现有后台鉴权与 tab 权限校验,权限不足按既有失败关闭口径拒绝
- module-assets 收敛模板库纯规则(active/inactive 投影、索引 schema 与重复项校验、ZIP 大小与摘要核对),platform-oss 承担对象存储读写、不可变对象复用与发布互斥锁
- shared-contracts 补后台模板 DTO;spacetime-module 账号存储适配保持既有 schema 不变
- AGC 壳内置模板索引与建项读取改为内容寻址对象,补模板安装、越界归档、索引不匹配等用例
- 模板库发布脚本支持定向发布与上架/下架合并、内容地址复用与锁语义,CLI 守卫用例同步;jenkins 两条客户端打包管线统一触发邮件通知 Job 并传递首装包链接
- 内置 5 个 Cocos 官方模板载荷与索引 fixture(内容地址对象,共 90 个文件)
- 补「后台模板管理」里程碑与实施计划,更新模板库技术方案、开发运维文档与共享记忆
- 验证:admin-web 39 项用例与 typecheck、发布脚本 25 项用例、api-server 与 AGC 壳编译、模板库定向 Rust 用例(AGC 壳 18 项、module-assets/platform-oss 16 项、后台权限 1 项)、check:encoding / check:doc-index / check:production-ops / rustfmt 全部通过
This commit is contained in:
kdletters
2026-09-21 13:50:26 +08:00
parent 6845cdcbc5
commit 02a7abeb3f
129 changed files with 21480 additions and 198 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+52 -2
View File
@@ -1041,8 +1041,7 @@ const checks = [
{
file: 'scripts/deploy/production-stdb-publish.sh',
includes: '--freeze-dir',
reason:
'发布前备份默认使用 minimal 热备,避免 40G 级冷备空间门槛与停服。',
reason: '发布前备份默认使用 minimal 热备,避免 40G 级冷备空间门槛与停服。',
},
{
file: 'scripts/database-backup-to-oss.mjs',
@@ -7718,6 +7717,14 @@ const agcPipelineContent = readFileSync(
'jenkins/Jenkinsfile.ai-game-creator-shell-build',
'utf8',
);
const agcMacosPipelineContent = readFileSync(
'jenkins/Jenkinsfile.ai-game-creator-shell-macos-build',
'utf8',
);
const notifyEmailPipelineContent = readFileSync(
'jenkins/Jenkinsfile.production-notify-email',
'utf8',
);
const scheduledRevisionTriggerContent = readFileSync(
'jenkins/Jenkinsfile.scheduled-revision-trigger',
'utf8',
@@ -7740,6 +7747,49 @@ for (const [file, content] of [
}
}
for (const [file, content] of [
['jenkins/Jenkinsfile.ai-game-creator-shell-build', agcPipelineContent],
[
'jenkins/Jenkinsfile.ai-game-creator-shell-macos-build',
agcMacosPipelineContent,
],
]) {
for (const [snippet, reason] of [
[
"build job: 'Genarrative-Notify-Email'",
'客户端打包管线必须触发统一邮件通知 Job。',
],
[
"string(name: 'OSS_DOWNLOAD_URL', value: ossDownloadUrl)",
'客户端打包管线必须把本次 OSS 首装包链接传给邮件通知 Job。',
],
[
"string(name: 'NOTIFICATION_EMAILS'",
'客户端打包管线必须支持追加邮件收件人。',
],
['latest.json', '客户端打包管线必须从本次生成的渠道清单读取下载链接。'],
]) {
if (!content.includes(snippet)) {
failed = true;
console.error(`[check:production-ops] ${file} ${reason}`);
}
}
}
for (const [snippet, reason] of [
[
"string(name: 'OSS_DOWNLOAD_URL'",
'统一邮件通知 Job 必须接收 OSS 下载链接参数。',
],
['OSS 下载链接:', '统一邮件通知正文必须展示 OSS 下载链接。'],
]) {
if (!notifyEmailPipelineContent.includes(snippet)) {
failed = true;
console.error(
`[check:production-ops] Jenkinsfile.production-notify-email ${reason}`,
);
}
}
for (const [snippet, reason] of [
["cron('H * * * *')", '必须每小时检查一次远端版本'],
['disableConcurrentBuilds()', '必须禁止并发触发,避免同一版本重复触发下游'],