Last active
June 25, 2026 19:47
-
-
Save benallard/97d8335ca3cfc9a637d2e37537b3e051 to your computer and use it in GitHub Desktop.
Makefile for AUR maintainers: check upstream versions, bump pkgver, regenerate checksums and build in clean chroot across multiple packages.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # AUR package maintenance Makefile | |
| # Place this in the parent directory containing one subdir per package. | |
| # | |
| # Usage: | |
| # make check — check all upstream versions | |
| # make bump — update pkgver/pkgrel in PKGBUILDs | |
| # make checksums — regenerate checksums | |
| # make build — build all packages in clean chroot | |
| # make update — full pipeline: bump + checksums + build | |
| # make <target> PKG=x — restrict any target to a single package | |
| SHELL := /bin/bash | |
| ALL_PKGS := $(shell find . -maxdepth 2 -name PKGBUILD -printf '%h\n' | sed 's|^\./||' | sort) | |
| ifdef PKG | |
| PKGS := $(PKG) | |
| else | |
| PKGS := $(ALL_PKGS) | |
| endif | |
| RED := \033[0;31m | |
| GREEN := \033[0;32m | |
| CYAN := \033[0;36m | |
| RESET := \033[0m | |
| .PHONY: all check bump checksums build update list help | |
| all: help | |
| ## List discovered packages | |
| list: | |
| @for p in $(PKGS); do echo " $$p"; done | |
| ## Check upstream versions via pkgctl | |
| check: | |
| @echo -e "$(CYAN)==> Checking upstream versions$(RESET)" | |
| @failed=(); \ | |
| for p in $(PKGS); do \ | |
| echo -e "$(CYAN) -> $$p$(RESET)"; \ | |
| (cd "$$p" && pkgctl version check) || failed+=($$p); \ | |
| done; \ | |
| [ $${#failed[@]} -eq 0 ] || { echo -e "$(RED)Failed: $${failed[*]}$(RESET)"; exit 1; } | |
| ## Bump pkgver/pkgrel in PKGBUILDs from upstream | |
| bump: | |
| @echo -e "$(CYAN)==> Bumping package versions$(RESET)" | |
| @failed=(); \ | |
| for p in $(PKGS); do \ | |
| newver=$$(cd "$$p" && pkgctl version check 2>&1 | awk '/upgrade from version/ {print $$NF}'); \ | |
| if [ -z "$$newver" ]; then \ | |
| echo " $$p: up to date, skipping."; \ | |
| continue; \ | |
| fi; \ | |
| echo " $$p: -> $$newver"; \ | |
| sed -i "s/^pkgver=.*/pkgver=$$newver/" "$$p/PKGBUILD"; \ | |
| sed -i "s/^pkgrel=.*/pkgrel=1/" "$$p/PKGBUILD"; \ | |
| done; \ | |
| [ $${#failed[@]} -eq 0 ] || { echo -e "$(RED)Failed: $${failed[*]}$(RESET)"; exit 1; } | |
| ## Regenerate checksums | |
| checksums: | |
| @echo -e "$(CYAN)==> Regenerating checksums$(RESET)" | |
| @failed=(); \ | |
| for p in $(PKGS); do \ | |
| echo -e "$(CYAN) -> $$p$(RESET)"; \ | |
| (cd "$$p" && updpkgsums) || failed+=($$p); \ | |
| done; \ | |
| [ $${#failed[@]} -eq 0 ] || { echo -e "$(RED)Failed: $${failed[*]}$(RESET)"; exit 1; } | |
| ## Build in a clean chroot via pkgctl | |
| build: | |
| @echo -e "$(CYAN)==> Building packages$(RESET)" | |
| @failed=(); \ | |
| for p in $(PKGS); do \ | |
| echo -e "$(CYAN) -> $$p$(RESET)"; \ | |
| (cd "$$p" && pkgctl build) \ | |
| && echo -e "$(GREEN) OK: $$p$(RESET)" \ | |
| || { echo -e "$(RED) FAILED: $$p$(RESET)"; failed+=($$p); }; \ | |
| done; \ | |
| [ $${#failed[@]} -eq 0 ] || { echo -e "$(RED)Failed: $${failed[*]}$(RESET)"; exit 1; } | |
| ## Full pipeline: bump pkgver, regen checksums, build | |
| update: bump checksums build | |
| ## Show this help | |
| help: | |
| @echo "AUR package maintenance" | |
| @echo "" | |
| @echo "Targets:" | |
| @grep -E '^##' Makefile | sed 's/^## / /' | |
| @echo "" | |
| @echo "Options:" | |
| @echo " PKG=<name> restrict any target to a single package" | |
| @echo "" | |
| @echo "Examples:" | |
| @echo " make check" | |
| @echo " make update PKG=mypkg" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment