Tectonic uses Travis CI and CircleCI for continuous integration. It has turned out that some pieces of useful CI functionality (e.g. code coverage analysis) need extra software support. This repository contains support infrastructure for providing this support.
At the moment, this repo mostly contains notes and fragments. Hopefully we'll tidy it up over time.
Prepackaged software can be installed into Tectonic CI Linux machines through a dedicated Ubuntu Personal Package Archive known as k-peter/tectonic-ci. This is under the personal control of @pkgw. Hopefully this will not turn out to be a limiting factor.
The PPA provides an updated verison of harfbuzz. The latest version of Ubuntu currently supported by Travis is xenial, and this only provides version 1.0.1 of harfbuzz. But Tectonic requires at least version 1.3.3.
The PPA harfbuzz package is a backport made following these directions. The approximate recipe for backporting other packages is something like:
- Run an interactive Docker container using the
ubuntu:xenialimage. apt-get updateapt-get install ubuntu-dev-tools(and maybeemacs24-noxfor development)- Back outside of the container, export your PPA GPG key to a text file:
something like
gpg --export-secret-keys --armor 1E73EE55 >key.txt - Get the PPA GPG key into the Docker container:
docker cp key.ttxt container:/on the host;gpg --import </key.txtin the container. - Still in the container:
echo DEBSIGN_KEYID=1E73EE55 >~/.devscripts export DEBFULLNAME="Peter Williams" DEBEMAIL=peter@newton.cx UBUMAIL=peter@newton.cxbackportpackage -u ppa:k-peter/tectonic-ci $packagename
If everything goes well the servers of launchpad.net will then build binary versions of the package.
TODO: canned script for setting up a reasonable Docker container; obviously we have to have some secure mechanism for dealing with the GPG key, though.
We also provide a newer version of kcov that is compatible with cargo-kcov. The version we want is newer than any one packaged in Ubuntu/Debian, as far as I can tell, so I tried my hand at making a new Debian package by hand. The support files for that are in this repo.
Very handwavey recipe for building and uploading a package:
- Download release tarball; I think you need to save it named as something like
kcov_34+tectonicci1.orig.tar.gzin the root directory of this package. - Create and setup a Docker container as in the harfbuzz recipe; have it mount this repo read-write somewhere.
- Run
debbuild -Sin thekcov/subdirectory. - In this toplevel directory, run
dput ppa:k-peter/tectonic-ci kcov_34+tectonicci1_source.changesif/when the updated source package is created.
I had a lot of trouble trying to get the quilt patching framework to do what
I wanted, but I think some judicious use of Git and manual patch creation will
probably keep things covered.
Note that Debian repackages the original kcov source due to
DFSG matters,
but we can afford to be laxer.
We use CircleCI and some old-fashioned magic to run CI builds of Tectonic on a synthetic PowerPC processor, allowing us to test the code’s behavior on a big-endian CPU architecture. To do so, we use a pre-baked build chroot filled with the necessary tools and libraries. The bigendian/ subdirectory contains the relevant files and explains in more detail.