summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalph Giles <giles@thaumas.net>2021-06-22 10:56:37 -0700
committerRalph Giles <giles@thaumas.net>2021-06-26 05:12:56 +0000
commitb7a4402aebb4c4d9958f8bdac600ecd204f8737c (patch)
tree4f42d0cb8795f0e79aa2693ced4dff24d009d12d
parentbab58c374ff069244d29e0022885324d96cfd5ee (diff)
downloadflac-b7a4402aebb4c4d9958f8bdac600ecd204f8737c.tar.gz
gitlab-ci: Add build configs.
Define builds for gitlab's continuous integration runners so we some feedback on versions of the code hosted there, particularly https://gitlab.xiph.org/xiph/flac. Build with GNU Autotools, with CMake+ninja, and verify the Makefile.lite build. This uses the same Debian-based docker.io/library/gcc:9 container image we use for most of the codec projects. That container doesn't specify an unprivileged user so that we can install packages. However, some of flac's file-creation tests must be run as an unprivileged user who owns the source tree. We therefore create a user account and use `su` to run the tests. In the case of the autotools job, `make distcheck` unpacks the packaged source, so this takes care of ownership. In the case of the other jobs, we must `chown` the entire checkout and complete the build as the unprivileged user. Another way to address this would be to define a custom container image with the prerequisites installed before switching to an unprivileged user for the entire build. The current approach was simpler to get working.
-rw-r--r--.gitlab-ci.yml53
1 files changed, 53 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 00000000..119d3825
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,53 @@
+default:
+ tags:
+ - docker
+ # Image from https://hub.docker.com/_/gcc/ based on Debian
+ image: gcc:9
+
+autotools:
+ stage: build
+ before_script:
+ - apt-get update &&
+ apt-get install -y libogg-dev
+ libtool-bin gettext zip
+ doxygen graphviz
+ # Create an unpriviledged user, required for tests.
+ - adduser --disabled-password --gecos "Gitlab CI" flac
+ script:
+ - ./autogen.sh
+ - ./configure
+ - make
+ - su -c 'make distcheck' flac
+
+cmake:
+ stage: build
+ before_script:
+ - apt-get update &&
+ apt-get install -y libogg-dev
+ cmake ninja-build
+ doxygen graphviz
+ # Create an unpriviledged user, required for tests.
+ - adduser --disabled-password --gecos "Gitlab CI" flac
+ script:
+ - mkdir _build
+ - cmake -S . -B _build -G "Ninja" -DCMAKE_BUILD_TYPE=Release
+ - chown -R flac .
+ - su -c 'cmake --build _build' flac
+ - su -c 'cd _build && ctest -V' flac
+
+makefile:
+ stage: build
+ before_script:
+ - apt-get update &&
+ apt-get install -y libogg-dev
+ # Create an unpriviledged user, required for tests.
+ - adduser --disabled-password --gecos "Gitlab CI" flac
+ script:
+ # The makefile doesn't create the `objs` tree it expects to use.
+ - mkdir -p objs/release/lib
+ - mkdir -p objs/release/bin
+ - mkdir -p objs/debug/lib
+ - mkdir -p objs/debug/bin
+ - chown -R flac .
+ - su -c 'make -f Makefile.lite' flac
+ - su -c 'make -f Makefile.lite test' flac