# 2023-01-09: ubuntu:latest = 22.04, ubuntu:rolling = 22.10, ubuntu:devel = 23.04 # See https://hub.docker.com/_/ubuntu image: ubuntu:rolling stages: - build - deploy variables: MESON_DEPS: g++ gettext git yelp-tools gtk-doc-tools python3-pygments python3-setuptools libglib2.0-dev mm-common libsigc++-3.0-dev libxml-libxml-perl meson ninja-build glib-networking GIO_EXTRA_MODULES: "/usr/lib/x86_64-linux-gnu/gio/modules" GIT_SUBMODULE_STRATEGY: normal .build_default: before_script: - export DEBIAN_FRONTEND=noninteractive - apt update && apt -y upgrade && apt -y install $DEPENDENCIES autotools_build: extends: .build_default stage: build variables: DEPENDENCIES: $MESON_DEPS make autoconf script: # Don't try to build with Autotools if the image's version of glib is too old. # Meson can build glib as a subproject, but Autotools has no subprojects. - glib_required=`sed -n '/glibreq=/ s/.*\(2\.[0-9]*\.[0-9]*\).*/\1/p' configure.ac` - glib_exists=`pkg-config --modversion glib-2.0` - if test $glib_required '>' $glib_exists; then - echo GLib $glib_exists exists, $glib_required required. Skip building with Autotools. - else - ./autogen.sh --enable-warnings=fatal --prefix=/usr - make - make check - make install - fi allow_failure: true debug_gcc_build: extends: .build_default stage: build variables: DEPENDENCIES: $MESON_DEPS script: - mkdir _build && cd _build # -Ddebug=true + -Doptimization=0 correspond to -Dbuildtype=debug # Don't use warning_level and werror. They are applied also to subprojects. # meson setup --prefix=/usr --libdir=lib -Ddebug=true -Doptimization=0 -Dwarnings=fatal -Dwarning_level=3 -Dwerror=true - meson setup --prefix=/usr --libdir=lib -Ddebug=true -Doptimization=0 -Dwarnings=fatal - meson compile # Must wrap the command in single quotes because of the colon. # See https://gitlab.gnome.org/help/ci/yaml/script.md#use-special-characters-with-script # Don't test subprojects. - 'meson test --suite glibmm:' - meson install artifacts: when: on_failure paths: - _build/meson-logs/testlog.txt - _build/meson-logs/meson-log.txt expire_in: 1 week release_gcc_build: extends: .build_default stage: build variables: DEPENDENCIES: $MESON_DEPS script: - mkdir _build && cd _build # -Ddebug=false + -Doptimization=3 correspond to -Dbuildtype=release # Don't use warning_level and werror. They are applied also to subprojects. # meson setup --prefix=/usr --libdir=lib -Ddebug=false -Doptimization=3 -Dwarnings=fatal -Dwarning_level=3 -Dwerror=true - meson setup --prefix=/usr --libdir=lib -Ddebug=false -Doptimization=3 -Dwarnings=fatal - meson compile - 'meson test --suite glibmm:' - meson install artifacts: when: always paths: - _build/docs/reference release_clang_build: extends: .build_default stage: build variables: DEPENDENCIES: $MESON_DEPS clang script: - mkdir _build && cd _build # -Ddebug=false + -Doptimization=3 correspond to -Dbuildtype=release # Accept warnings. See https://gitlab.gnome.org/GNOME/glibmm/-/issues/98 # Don't use warning_level and werror. They are applied also to subprojects. # CC=clang CXX=clang++ meson setup --prefix=/usr --libdir=lib -Ddebug=false -Doptimization=3 -Dwarnings=max -Dwarning_level=3 - CC=clang CXX=clang++ meson setup --prefix=/usr --libdir=lib -Ddebug=false -Doptimization=3 -Dwarnings=max - meson compile - 'meson test --suite glibmm:' - meson install allow_failure: true artifacts: when: on_failure paths: - _build/meson-logs/testlog.txt - _build/meson-logs/meson-log.txt expire_in: 1 week # Publish reference documentation at gnome.pages.gitlab.gnome.org/glibmm pages: stage: deploy needs: [release_gcc_build] script: - mkdir public - mv _build/docs/reference/html/* public artifacts: paths: - public only: refs: - master