Arch Linux package maintenance automation
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-18 12:02:44 -07:00
modules Initial commit: PKGBUILD update tool 2026-10-17 21:24:36 -07:00
.gitignore Initial commit: PKGBUILD update tool 2026-10-17 21:24:36 -07:00
chroot.py Initial commit: PKGBUILD update tool 2026-10-17 21:24:36 -07:00
nvchecker_api.py Initial commit: PKGBUILD update tool 2026-10-17 21:24:36 -07:00
packages.conf Initial commit: PKGBUILD update tool 2026-10-17 21:24:36 -07:00
README.md update .SRCINFO on update 2026-10-18 12:02:44 -07:00
requirements.txt Initial commit: PKGBUILD update tool 2026-10-17 21:24:36 -07:00
update.py update .SRCINFO on update 2026-10-18 12:02:44 -07:00

pkgbuild

Helper for maintaining a handful of Arch Linux PKGBUILD repositories.

It clones or updates every repo listed in packages.conf, asks nvchecker whether a newer upstream version exists, and after you confirm prepares each update locally: bumping pkgver, or running the package's own script from modules/ if it has one. Commits and tags are created locally only.

Usage

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python update.py        # -y skips the confirmation prompt

update.py needs Python 3.9+ and git. The chroot-using modules additionally need an Arch Linux host with devtools (they drive the same /var/lib/archbuild chroot that pkgctl build uses).

Layout

Path Purpose
packages.conf <name> <origin git url>, one package per line
update.py entry point: sync, check, prompt, prepare
nvchecker_api.py thin wrapper over nvchecker's library API
chroot.py devtools chroot lifecycle shared by the modules
modules/<pkgname>.py optional per-package update script
repos/ checkouts, created on demand (gitignored)

A package with a module owns its whole update: the module runs in the checkout, refreshes everything the version bump invalidates (checksums and the like) and commits — and tags, or doesn't — itself. Packages without a module get a plain pkgver bump with pkgrel reset to 1 and a regenerated .SRCINFO, then are committed and tagged by update.py.

Regenerating .SRCINFO runs makepkg --printsrcinfo, so update.py needs makepkg on PATH (as does any module).