游戏发行入口改为服务端按模板派生

- 后台审核页删除「发行入口」输入框与前端 HTTPS 校验,审核请求只提交结论与公开修订号
- api-server 新增 GENARRATIVE_GAME_DISTRIBUTION_RELEASE_ENTRY_TEMPLATE 模板配置,审核通过时读版本取 gameId 并派生该游戏独立来源地址
- 模板缺 {gameId}、生产未配置模板、gameId 非主机安全字符或派生结果非法时审核通过失败关闭,非生产未配置时回落本地回环发行网关
- 同步更新发行来源 nginx 模板与说明、两份 api-server 环境变量样例、平台与运维主规范、发行里程碑实施计划和决策记录
- 真实栈 e2e 脚本不再传 entryUrl,并断言审核结果里的入口为服务端派生值
This commit is contained in:
2026-09-23 21:33:42 +08:00
parent e0c324c0ac
commit cf19241544
15 changed files with 172 additions and 102 deletions
@@ -516,7 +516,7 @@ async function main() {
`status=${readBefore.status}`,
);
// 7. 管理员审核通过(本地非生产允许回环 http 入口;管理员 token 在步骤 1.1 已取得)
// 7. 管理员审核通过(发行入口由服务端按部署模板与 gameId 派生;管理员 token 在步骤 1.1 已取得)
const approved = await api(
`/admin/api/game-distribution/versions/${versionId}/review`,
{
@@ -526,8 +526,6 @@ async function main() {
body: {
decision: 'approve',
expectedPublicationRevision: readback.data.version.publicationRevision,
// 本地用发行网关路径当入口,让「审核通过 → 游玩」在本地也走真实网关。
entryUrl: `${API}/api/game-distribution/releases/${gameId}/`,
},
},
);
@@ -536,6 +534,12 @@ async function main() {
approved.status === 200,
`status=${approved.status} ${approved.text.slice(0, 250)}`,
);
check(
'审核通过后发行入口由服务端派生',
approved.data?.version?.entryUrl ===
`${API}/api/game-distribution/releases/${gameId}/`,
String(approved.data?.version?.entryUrl),
);
// 8. 公开目录:封面/截图对象键生效
const catalogAfter = await api('/api/game-distribution/games');