AGC 版本号以仓库为准,新增 bump-version 提升版本命令
- 发布/构建不再自动递增版本、不再支持 AGC_RELEASE_VERSION 自由指定版本,改为读取仓库已提交的版本 - prepareReleaseVersion 只校验五个版本来源一致并返回仓库版本,不再改写版本文件 - 新增 apps/ai-game-creator-shell/scripts/bump-version.mjs,默认提升 patch,支持 minor/major/显式版本,写入五处并本地提交 - release:upload 发布前通过 assertVersionNotBelowOss 防降级:仓库版本低于 OSS 线上版本时中止,并提示先运行 bump-version - 新增根 npm run ai-game-creator-shell:bump-version 别名,并在 AGC 更新技术方案文档与 Jenkinsfile 中移除自由版本参数说明
This commit is contained in:
@@ -30,27 +30,50 @@ AGC 每次启动时由根窗口检查一次公开 OSS 更新清单。清单默
|
||||
## 发布约定
|
||||
|
||||
> ⚠️ 发布新版本时,版本号提升只发生在构建/上传工作区内,**不会自动回写仓库**。
|
||||
> 因此每次发布完成后,必须手动把版本号变更提交回 `master`(范围覆盖
|
||||
> `package.json`、根 `package-lock.json`、`tauri.conf.json`、`Cargo.toml`、`Cargo.lock`
|
||||
> 中的 AGC 包条目,且五处保持一致),否则仓库源码版本会长期停留在旧值,
|
||||
> dev 客户端每次启动都会误报“发现新版本”,OSS 已发布版本与源码严重背离。
|
||||
> 提交标题建议使用“提升 AGC 版本至 x.y.z”。
|
||||
> 🔑 版本号以仓库为准。发布流程不再自动递增版本,也不再支持 `AGC_RELEASE_VERSION` 自由指定版本。
|
||||
> 发布前必须先运行版本提升命令,把目标版本写回仓库并提交,发布只读取这份已提交的版本。
|
||||
|
||||
当前发布目标固定为 Windows x64 NSIS。执行 `npm run ai-game-creator-shell:build` 会先读取
|
||||
`VITE_AGC_UPDATE_MANIFEST_URL`(默认 `https://agc-dev.oss-rg-china-mainland.aliyuncs.com/agc/latest.json`)的
|
||||
`latest.json`,取本地与 OSS 的较高版本并递增一个 patch,然后同步更新 package、Tauri 和 Cargo
|
||||
版本后再向 Tauri 传入 `--target x86_64-pc-windows-msvc` 构建。OSS 清单首次不存在时按本地版本递增;
|
||||
OSS 请求失败、清单格式错误或版本无效会终止发布,避免覆盖线上版本。构建完成后自动扫描 `.exe`
|
||||
安装包,并在 `apps/ai-game-creator-shell/src-tauri/target/x86_64-pc-windows-msvc/release/bundle/latest.json`
|
||||
生成包含版本、下载地址、大小和 SHA-256 的清单。可通过 `AGC_BUILD_TARGET` 显式覆盖目标(发布仍应使用
|
||||
Windows x64),通过 `AGC_UPDATE_ARTIFACT` 指定要发布的安装包,通过 `AGC_UPDATE_OSS_BASE_URL` 指定
|
||||
OSS 前缀,通过 `AGC_RELEASE_VERSION` 指定三段版本号(仅在明确需要复现指定版本时使用),通过
|
||||
`AGC_UPDATE_RELEASE_NOTES` 写入发布说明,支持多行文本且保留内部换行;`--no-bundle` smoke 构建不会读取 OSS、修改版本或生成清单。
|
||||
**发布前先提升版本(开发者执行)**
|
||||
|
||||
执行以下任一命令,会把 AGC 版本写入 `package.json`、根 `package-lock.json`、
|
||||
`tauri.conf.json`、`Cargo.toml`、`Cargo.lock` 五处并**本地提交**(不会推送):
|
||||
|
||||
```bash
|
||||
# 提升一个 patch(默认),例如 0.1.19 -> 0.1.20
|
||||
npm run ai-game-creator-shell:bump-version
|
||||
npm run ai-game-creator-shell:bump-version -- patch
|
||||
|
||||
# 提升 minor / major
|
||||
npm run ai-game-creator-shell:bump-version -- minor
|
||||
npm run ai-game-creator-shell:bump-version -- major
|
||||
|
||||
# 指定明确的三段版本(一般只用于复现/回填)
|
||||
npm run ai-game-creator-shell:bump-version -- --version 0.1.25
|
||||
```
|
||||
|
||||
提交标题固定为“提升 AGC 版本至 x.y.z”。只做本地提交,push 由开发者自行确认。
|
||||
|
||||
**发布只读仓库版本(`npm run ai-game-creator-shell:build` 与 `release:upload`)**
|
||||
|
||||
构建/发布不再改写版本文件,而是读取仓库已提交版本,并在发布前做两件事:
|
||||
|
||||
1. 校验五个版本来源一致,不一致会中止,防止漂移。
|
||||
2. 通过 `assertVersionNotBelowOss` 读取 OSS `latest.json`:若仓库版本**低于**线上版本会中止,
|
||||
并提示先运行 `bump-version`,避免回退线上版本;OSS 读取失败或清单格式错误同样会中止。
|
||||
仓库版本等于或高于线上版本才放行。
|
||||
|
||||
当前发布目标固定为 Windows x64 NSIS,会向 Tauri 传入 `--target x86_64-pc-windows-msvc` 构建。
|
||||
构建完成后自动扫描 `.exe` 安装包,并在
|
||||
`apps/ai-game-creator-shell/src-tauri/target/x86_64-pc-windows-msvc/release/bundle/latest.json`
|
||||
生成包含版本、下载地址、大小和 SHA-256 的清单,版本取仓库 `package.json` 的 `version`。
|
||||
可通过 `AGC_BUILD_TARGET` 显式覆盖目标(发布仍应使用 Windows x64),通过 `AGC_UPDATE_ARTIFACT`
|
||||
指定要发布的安装包,通过 `AGC_UPDATE_OSS_BASE_URL` 指定 OSS 前缀,通过 `AGC_UPDATE_RELEASE_NOTES`
|
||||
写入发布说明(支持多行文本且保留内部换行);`--no-bundle` smoke 构建不会读取 OSS、修改版本或生成清单。
|
||||
|
||||
每次发布安装包上传完成后,再使用 ossutil 的 `--force` 覆盖上传同一目录生成的 `latest.json`,确保固定的 latest 指针和 `downloadUrl` 指向已存在的 OSS 对象;未显式强制覆盖时,ossutil 在目标已存在时会交互询问并按默认值跳过,不能作为 Jenkins 非交互发布方式。清单和安装包均使用公开可读对象,不在清单中保存凭据、签名或本地路径。构建脚本本身不负责上传 OSS,发布流水线通过 `release:upload` 完成上传。
|
||||
|
||||
如需一键构建并上传,可执行 `npm run ai-game-creator-shell:release:upload`。该命令要求本机已安装并配置 `ossutil`,
|
||||
先按上述规则比较 OSS 版本、递增 patch、构建 Windows x64 NSIS,再上传安装包和 `latest.json`。默认上传到
|
||||
先按上述规则取仓库版本并校验、构建 Windows x64 NSIS,再上传安装包和 `latest.json`。默认上传到
|
||||
`agc-dev` / `oss-rg-china-mainland.aliyuncs.com`,也可用 `AGC_OSS_BUCKET`、`AGC_OSS_ENDPOINT` 和 `OSSUTIL_BIN`
|
||||
覆盖;本机执行时凭据由 ossutil 本机配置读取,不能写入仓库或命令行参数。
|
||||
|
||||
@@ -70,6 +93,6 @@ Jenkins Checkout 的 `git clean -fdx` 会清理该构建目录,因此每次全
|
||||
Jenkins Job 在“Build and upload”阶段通过受保护凭据 ID `AliyunAccessKeyId` 和
|
||||
`AliyunaccessKeySecret` 注入 AccessKey,仅在当前进程运行时传给 ossutil,不写入仓库、workspace 或构建日志;
|
||||
本机运行仍使用 ossutil 配置。凭据必须具备 `PutObject` 权限;OSS 对客户端保持公共读即可,公共读本身不授予
|
||||
Jenkins 上传权限。由于版本号取决于 OSS 当前清单,Job 已关闭并发构建;若 Jenkins
|
||||
上存在多个 AGC 发布 Job,还应使用同一个 Lockable Resource 串行化发布。Job 参数
|
||||
`AGC_RELEASE_VERSION` 留空时自动递增,填写后会使用指定版本并更新对应的 `latest.json`,因此回滚或测试旧版本前应确认不会覆盖线上更新入口。
|
||||
Jenkins 上传权限。由于版本号以仓库为准、发布只读仓库版本且禁止回退线上版本,Job 已关闭并发构建;若 Jenkins
|
||||
上存在多个 AGC 发布 Job,还应使用同一个 Lockable Resource 串行化发布。发布前请先在仓库上运行
|
||||
`npm run ai-game-creator-shell:bump-version` 提升并提交版本,再触发发布流水线。
|
||||
|
||||
Reference in New Issue
Block a user