Maintainer's Guide

Working with the test suite

Most of the tests are contained in the runtest executable which generally reads test cases from the test directory and compares output to files in the result directory.

You can simply add new test cases and run runtest -u to update the results. If you debug test failures, it's also useful to execute runtest -u and then git diff result to get a diff between actual and expected results. You can restore the original results by running git restore result and git clean -xd result.

Generated files

The documentation and other generated files can be rebuilt by running

make -C doc rebuild

This requires xsltproc, the DocBook stylesheets in your XML Catalog and the libxml2 Python bindings to be installed, so it's best done on a Linux system. On Debian/Ubuntu, try

apt install xsltproc python3-libxml2 docbook-xsl docbook-xml

doc/ generates doc/libxml2-api.xml which is used to generate

  • API documentation with XSLT stylesheets
  • testapi.c with
  • Python bindings with python/

Man pages and HTML documentation for xmllint and xmlcatalog are generated with xsltproc and DocBook stylesheets.

Making a release

Rebuild generated files and documentation

See above for details and run make -C doc rebuild.

Look for new warning messages and inspect changes for correctness before committing.

Update the NEWS file

You can get started by running

git log --format='- %s (%an)' [previous-release-tag]..

Bump the version number

Edit the version number in if you haven't done so already.

Build the tarball

I'd recommend to build the tarball by running

make distcheck

which performs some useful checks as well.

Upload the tarball

Follow the instructions at

scp libxml2-[version].tar.xz
ssh ftpadmin install libxml2-[version].tar.xz

Tag the release

Create an annotated tag and push it:

git tag -a [version] -m 'Release [version]'
git push origin [version]

Create a GitLab release

Create a new GitLab release on

Announce the release

Announce the release by sending an email to the mailing list at

Updating the CI Docker image

Note that the CI image is used for libxslt as well. Run the following commands with the Dockerfile in the .gitlab-ci directory:

docker login
docker build -t - \
    < .gitlab-ci/Dockerfile
docker push