
本仓库中的软件包通过由 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 中的 pkgver,并将 pkgrel 重置为 1。updpkgsums 重新生成校验和。pkgver() 函数以计算真实的 Arch 风格版本字符串(例如 131.940a5d3),并保持 sha512sums=('SKIP') 不变。auto-update 的拉取请求,供人工审核,之后才会合并到 main。状态保存 — .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> |
配置生成器和 CI 工作流都会解析 source= 行中的 shell 变量引用,以便正确处理如下间接 URL:
_pkgname=${pkgname#athena-}
source=("git+https://github.com/Athena-OS/$_pkgname.git")
支持以下 bash 参数展开形式:
| 语法 | 含义 | 示例 |
|---|---|---|
$var / ${var} | 简单替换 | $pkgname → athena-settings |
${var#prefix} | 去除最短匹配前缀 | ${pkgname#athena-} → settings |
${var%suffix} | 去除最短匹配后缀 | ${pkgname%-git} → athena-settings |
以下 bash 结构不会被自动化流程解析。依赖这些结构的 PKGBUILD 会被优雅地跳过,并附上信息性提示——不会引发错误,且始终可以手动更新。
| 不支持的语法 | 示例 | 原因 |
|---|---|---|
## 贪婪前缀去除 | ${var##*/} | 仅实现了非贪婪的 # |
%% 贪婪后缀去除 | ${var%%.*} | 仅实现了非贪婪的 % |
| 子字符串提取 | ${var:0:3} | 运算符不同,在 PKGBUILD 中很少见 |
| 模式替换 | ${var//foo/bar} | 运算符不同,在 PKGBUILD 中很少见 |
| 算术展开 | $((pkgver + 1)) | 超出版本跟踪的范围 |
| 嵌套展开 | ${${var}#prefix} | 非有效 POSIX;实践中不使用 |
如果你的 PKGBUILD 使用了上述任何结构且自动化流程将其跳过,你可以将该赋值重写为普通的 var=value 行,或手动打开一个 PR 来更新版本。
LOL Omuamua