Skip to content

Instantly share code, notes, and snippets.

@benallard
Last active June 25, 2026 19:47
Show Gist options
  • Select an option

  • Save benallard/97d8335ca3cfc9a637d2e37537b3e051 to your computer and use it in GitHub Desktop.

Select an option

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.
# 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