## 背景 本索引的包版本目前全靠人工 bump,没有 Dependabot 或上游 release 扫描。现有定时任务只做校验、测量和发布,不发现新版本。 ## 目标 - 「机械型」包(单一 tarball、URL 可模板化、升级只改版本号和 sha256)能自动发现新版本并开 PR。 - 其他包显式不参与。 - 绝不自动合并,人工 review 是唯一闸门。 ## 方案 在描述符 `package` 顶层加一个 opt-in 字段。**没有该字段的包完全不扫描。** ```lua autoupdate = { provider = "github", repo = "madler/zlib", tag = "v{version}", version = "^v(%d+%.%d+%.%d+)$", prerelease = false, url = { GLOBAL = "https://github.com/madler/zlib/archive/refs/tags/v{version}.tar.gz", CN = "https://gitcode.com/mcpp-res/zlib/releases/download/{version}/zlib-{version}.tar.gz", }, mode = "replace", -- replace / add(是否保留旧版本) } ``` 要点: - 显式 URL 模板,不从现有 URL 猜(llamacpp 这类 commit 号版本猜不出来)。 - sha256 由脚本下载后计算。 - 只改版本 key、url、sha256,不整表重新序列化,保留现有注释。 - 三态语义: - 无字段 → 跳过; - 有字段但查询失败 → 报红/开 issue,不能静默; - 有新版本 → 只开 PR,不 push main。 需要解决的约束 1. schema:本地实测 mcpp 只对 mcpp 段做 unknown-key 严格检查,package 顶层额外字段当前可解析。但 schema 归 mcpp 所有,建议字段加索引仓库前缀,并加 tests/check_autoupdate.lua 纳入 lint。 2. CN 镜像:mirror-cn-reachable 会下载 CN URL 并比对 sha256,只改版本号会让 CI 必红;自动上传 gitcode 还需要处理同名资产不可覆盖的问题。建议第一阶段只启用 url 为纯字符串的包(约 95 个文件,被 check_mirror_urls.lua 豁免)。 3. PR 不会触发 CI:GITHUB_TOKEN 创建的 PR 不触发 pull_request workflow。包 bump 的 PR 必须跑 validate.yml,因此需要 PAT 或 bot 账号创建。 4. 多平台:check_platform_version_parity.lua 要求三个平台 section 同时移动;mode 需明确 replace/add。 5. 范围:只适用于机械型包。避开 opencv、ffmpeg、eui-neo 及 Form A + build.mcpp 的包。 落地顺序 1. report-only:定时任务只输出「当前 → 上游最新」,不改文件,观察误报。 2. 加字段 lint。 3. 对纯字符串 URL 的包开放自动 PR(PAT 创建)。 4. CN 包等镜像发布自动化后再接入。 备选 元数据放 tools/autoupdate.toml(按 namespace:name 索引)可完全避开 schema 风险,但可发现性差;倾向仍是描述符内字段。 开放问题 - 字段命名与位置; - 默认 replace 还是 add; - 第一批启用名单; - 上游查询的 rate limit 策略。
Activity
Sunrisepeak commentedon Oct 20, 2026
自动更新功能已经实现