[aur-general] Continuous integration of AUR packages

Justin Dray justin at dray.be
Thu Feb 18 23:56:05 UTC 2016

I was using the chroot tools for a year and a half or so before that, but
had some issues occasionally with things like updating it, or using package
caches inside the chroot, or other various things. I do still have the
shell script I used at the time, it was called by jenkins and cloned a
chroot based off a clean copy and numbered by the jenkins executor to
support multiple builds at once. But I managed a few tens of  thousands of
docker containers for work, and figured I could use a similar build system
for the arch packages, and it's been reliable for me since then.

As Doug said, you need to add the packages you build to a repository for
the next build to be able to install them, but that part is pretty simple
and explained on the arch wiki already.

So, in Jenkins I use the build generator plugin, and created a
parameterized job (config.xml here: http://hastebin.com/oyuqiwokem.xml)
that basically just calls `dmakepkg` on the git checkout for the aur
package; you just give the build an aur package name and it will generate
the job to track that package and any changes pushed to the AUR and build
it. (it polls git once an hour).

`dmakepkg` is in the AUR ( https://aur.archlinux.org/packages/dmakepkg-git/
) and is what I ended up making to build the packages inside a docker
container. It supports the same flags as makepkg (just passes them through)
but defaults to '--force --syncdeps --noconfirm' unless other flags are
specified (no point removing packages since the container is destroyed
after use). Uses a slightly modified version of the official docker arch
image, and is updated much more often (monthly at least instead of the 3-6
months they take). It auto-detects makepkg configs like SRCDEST/etc and
copies it in to the instance and bind mounts the folders specified, as well
as the pacman package cache, so all the builds follow the makepkg config on
the host, but using everything else from a clean environment. If you make
your own repo and add it to your host, you can use `-x` flag to use the
host's pacman.conf inside the container.

More information about the aur-general mailing list