gitlab CI: set up a pipeline to be called from other libX* projects

We have a lot of libX* repositories, most of them unmaintained. But having
something ensure they build if a MR is submitted is useful, but not at the
cost of 30+ gitlab CI scripts that need to be maintained.

This patch adds a centralized approach: libX11 has a separate pipeline that
can be triggered from any libX* project with a simple CI job description:

  stage: build
      - project: xorg/lib/libX11
        ref: master
        file: .gitlab-ci/build-libXall.yml
    strategy: depend

The pipeline has jobs for the various dependencies, builds those from git,
installs them and eventually builds the project that triggered the job.
e.g. where the pipeline triggers with PROJECT_NAME: libXi, we build libXau,
libXdmcp, libX11, libXext, libXfixes and finally run distcheck against libXi.
The jobs are generated with ci-fairy using Jinja2 templates. Only jobs that
are within the current dependency pipeline are run by the CI, all other jobs
are ignored.

The dependencies need to be maintained manually, along with the extra packages
required (e.g. asciidoc), but that too is in a central config file here in
libX11. Because the config file is here, the libX11 pipeline must finish first
so the container image is ready to go for the others.

For easier testing, the libX11 default pipeline can be triggered with a
LIBRARY_NAME variable set to the library to build (e.g. "libXi"). This will
trigger the same job as the example snippet above. Note that due to
limitations in gitlab variable handling, we use PROJECT_NAME for the yaml
snippet but LIBRARY_NAME for the libX11 pipeline trigger.

Signed-off-by: Peter Hutterer <>
4 jobs for !60 with wip/libxstar-pipelines in 6 minutes and 35 seconds (queued for 2 seconds)
latest detached
Status Job ID Name Coverage
passed #5772932


passed #5772933


passed #5772934


  Other Libraries
passed libX11 dependency build