Scripts for efficient AUR PKGBUILD updating

linux scripting software

The most frequent task for maintaining packages in the Arch User Repository (AUR) is updating. Often this is a simple version bump, which can be a quite repetitive process, so i made some simple scripts to optimize it.

The following is organized in fish functions, but the bare commands and idea should also work if you use any other shell.

Cloning

First to obtain the git repo with the packaging files, create ~/.config/fish/functions/clone-aur.fish:

function clone-aur --description 'Clone aur repo by name'
	set repo $argv[1];
	
	git clone "ssh://aur@aur.archlinux.org/$repo.git"
	or git clone "https://aur.archlinux.org/$repo.git"

	cd $repo
end

This uses the first argument as package name and tries to clone the repo over SSH (with push capability), if this fails (because it is a foreign package) the or connection falls back to HTTPS (pull only).

To make the input of the package name more convenient i added tab completions with ~/.config/fish/completions/clone-aur.fish:

# Completions for custom AUR clone function 
complete -c clone-aur -xa "(yay -Pc)"

The AUR helper yay is used to get a list of all (available + installed) packages here.

For just the installed pacman -Q | string replace ' ' \t could be used instead.

Example

$ clone-aur blackbox-explorer
blackbox  (community)  blackbox-cvs       (AUR)  blackbox-explorer-bin  (AUR)  blackbox-tools-git  (AUR)
blackboxwm      (AUR)  blackbox-explorer  (AUR)  blackbox-git           (AUR)  blackbox-vcs        (AUR)

Update and Commit

The main job to update the PKGBUILD + SRCINFO in one command with ~/.config/fish/functions/upd-aur.fish:

function upd-aur --description 'Update pkgbuild to new version'
	set new_ver $argv[1];
	sed -E "s#(pkgver=).*#\1$new_ver#" -i PKGBUILD
	
	updpkgsums
	makepkg --printsrcinfo > .SRCINFO
	
	git commit -v -a -m "Update to $new_ver"
end

It uses again the first argument and expects the target version string. Then it replaces the pkgver with sed/regex. Option -E to enable extended syntax and -i to edit inplace. The first part matches the line with pkgver= (brackets to create a capture group) and everything after that with .*. The replacement part inserts the first capturing group (containing pkgver=) with \1 and appends the new version. Based on that the new sources are downloaded and checksums generated with updpkgsums as usual. After the SRCINFO is also updated it automatically creates a commit with the standard message.

Example

$ upd-aur 3.5.0
==> Retrieving sources...
  -> Downloading 3.5.0.tar.gz...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14.2M    0 14.2M    0     0  4374k      0 --:--:--  0:00:03 --:--:-- 4622k
  -> Found blackbox-explorer.sh
  -> Found blackbox-explorer.desktop
==> Generating checksums for source files...
[master 406fc20] Update to 3.5.0
 2 files changed, 5 insertions(+), 5 deletions(-)

Check

Of course the package should then be built with makepkg or makechrootpkg and tested. Possible fixes can be amended to the update or addressed in additional commits. When it is all okay just git push and done!