add-aur-package.sh 详细说明
scripts/add-aur-package.sh 用来把一个 AUR package base 导入 main
分支。它只提交 PKGBUILD、.SRCINFO、补丁和 AUR 版本信息,不会把*.pkg.tar.zst 提交到 main。
使用方式
./scripts/add-aur-package.sh package-name
./scripts/add-aur-package.sh --no-push package-name
./scripts/add-aur-package.sh package-name https://example.com/package.git
默认地址为:
https://aur.archlinux.org/package-name.git
对于 split package,应传入 AUR 页面中的 package base,也就是 Clone URL
最后的仓库名称。
执行流程
- 启用 Bash 严格模式,任何命令、变量或管道错误都会停止脚本。
- 根据脚本自身位置计算仓库根目录,不依赖当前工作目录。
- 解析
--no-push、包名和可选的自定义 Git 地址。 - 限制包名只能包含 AUR 合法名称常用的字母、数字和
@._+-。 - 确认当前目录属于 Git checkout,并要求当前分支为
main。 - 使用
git pull --ff-only origin main快进到最新源码版本。 - 拒绝覆盖已经存在的
packages/package-name/。 - 写入
.aur-url,再调用sync-aur-packages.sh导入 AUR 文件。 - 只暂存并提交新增的软件包目录,不会提交其他本地修改。
- 默认推送到
origin/main;--no-push只保留本地提交。
导入和校验
sync-aur-packages.sh 在临时目录浅克隆 AUR 仓库,记录当前 Git commit
到 .aur-commit,然后复制 PKGBUILD、.SRCINFO、补丁和其他顶层文件。
check-package.sh 随后检查:
- 包目录名称是否合法。
PKGBUILD和.SRCINFO是否存在。- PKGBUILD 是否通过 Bash 语法检查。
.SRCINFO中声明的本地源文件是否齐全。pkgbase、pkgver和pkgrel是否可读取。
推送后的自动流程
packages/** 的变化会先触发 check.yml,在 Arch Linux 容器中运行makepkg --printsrcinfo、ShellCheck 和 namcap。随后 build.yml 只选择发生
变化的软件包及其依赖者,在 Arch Linux 容器中安装二进制仓库或 AUR 依赖,
然后运行 makepkg。
成功生成的 *.pkg.tar.zst 会封装在 tar 中作为 Actions Artifact 保存,
从而兼容 epoch 带来的冒号文件名。发布任务解包后再合并到 repo 分支,
因此软件包原始名称不会改变。repo 分支使用 amend 和 force-with-lease
保持单提交快照。
每天的 sync.yml 会检查所有带 .aur-url 的包。AUR commit 变化时,它
会更新文件、提交到 main,并只重建变化的软件包。
常见失败
current branch is not main:切换到main后重试。already managed:该包已存在,使用sync-aur-packages.sh手动同步。Missing PKGBUILD/.SRCINFO:上游 Git 仓库不是有效的 Arch 包仓库。git push失败:本地提交已经生成,修复认证后运行git push origin main。- 构建失败:查看 GitHub Actions 对应软件包 job 的日志。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 emoeem!
评论









