
本仓库中的软件包通过由 nvchecker 驱动的每日 GitHub Actions 工作流自动保持最新状态。
该自动化每天运行(也可手动触发),并执行以下步骤:
配置生成 — .nvchecker/generate-nvchecker-config.py 扫描 src/ 下的每个 PKGBUILD,并自动生成 .nvchecker/nvchecker.toml。每个软件包被归类为以下类型之一:
pkgver= 和远程源 URL。按托管平台上的最新标签/版本进行跟踪。pkgver() 函数和 git+https:// 源。按最新上游提交进行跟踪。版本检查 — nvchecker 查询每个被跟踪软件包的上游并将结果写入 .nvchecker/newver.json。将其与 .nvchecker/oldver.json(已提交到仓库中)进行比较,以找出有新版本可用的软件包。
PKGBUILD 更新与 PR — 对于每个过时的软件包,工作流会:
auto-update/<pkgname>-<newver>。PKGBUILD 中更新 并将 重置为 。配置生成器和 CI 工作流都会解析 source= 行中的 shell 变量引用,以便正确处理如下所示的间接 URL:
_pkgname=${pkgname#athena-}
source=("git+https://github.com/Athena-OS/$_pkgname.git")
支持以下 bash 参数展开形式:
以下 bash 结构不会被自动化解析。依赖这些结构的 PKGBUILD 将被优雅地跳过并附上说明信息 —— 不会报错,且它们始终可以手动更新。
如果你的 PKGBUILD 使用了上述任何结构且自动化跳过了它,你可以将该赋值改写为普通的 var=value 行,或者打开一个 PR 手动更新版本。
pkgverpkgrel1updpkgsums 重新生成校验和。pkgver() 函数以计算真实的 Arch 风格版本字符串(例如 131.940a5d3),并保持 sha512sums=('SKIP') 不变。main 之前,打开一个标记为 auto-update 的拉取请求供人工审查。状态保存 — .nvchecker/oldver.json 会使用本次运行中看到的版本进行更新并提交回 main,这样下次运行只会为真正的新变更打开 PR。
| 平台 | 检测规则 |
|---|
| GitHub | github.com/<user>/<repo> |
| GitLab(gitlab.com + 自托管) | gitlab.*/<user>/<repo> |
| Codeberg | codeberg.org/<user>/<repo> |
| Gitea(自托管) | gitea.*/<user>/<repo> |
| Sourcehut | git.sr.ht/~<user>/<repo> |
| 语法 | 含义 | 示例 |
|---|
$var / ${var} | 简单替换 | $pkgname → athena-settings |
${var#prefix} | 去除最短匹配前缀 | ${pkgname#athena-} → settings |
${var%suffix} | 去除最短匹配后缀 | ${pkgname%-git} → athena-settings |
| 不支持的语法 | 示例 | 原因 |
|---|
## 贪婪前缀去除 | ${var##*/} | 仅实现了非贪婪的 # |
%% 贪婪后缀去除 | ${var%%.*} | 仅实现了非贪婪的 % |
| 子串提取 | ${var:0:3} | 操作符不同,PKGBUILD 中很少见 |
| 模式替换 | ${var//foo/bar} | 操作符不同,PKGBUILD 中很少见 |
| 算术展开 | $((pkgver + 1)) | 超出版本跟踪范围 |
| 嵌套展开 | ${${var}#prefix} | 非合法 POSIX 语法;实际中不使用 |