Skip to content

[Feature] 参考 scoop 实现描述符声明式自动更新 #541

Open

Description

@yizhinailong

背景

本索引的包版本目前全靠人工 bump,没有 Dependabot 或上游 release
扫描。现有定时任务只做校验、测量和发布,不发现新版本。

目标

  • 「机械型」包(单一 tarball、URL 可模板化、升级只改版本号和 sha256)能自动发现新版本并开 PR。
  • 其他包显式不参与。
  • 绝不自动合并,人工 review 是唯一闸门。

方案

在描述符 package 顶层加一个 opt-in 字段。没有该字段的包完全不扫描。

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

  1. Sunrisepeak commented on Oct 20, 2026

    @Sunrisepeak
    Member
  2. self-assigned this
    on Oct 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationenhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions