glib/.gitlab-ci.yml

362 lines
11 KiB
YAML
Raw Normal View History

stages:
- style-check
- build
- coverage
- analysis
- deploy
cache:
paths:
- _ccache/
variables:
MESON_TEST_TIMEOUT_MULTIPLIER: 2
G_MESSAGES_DEBUG: all
MESON_COMMON_OPTIONS: "--buildtype debug --fatal-meson-warnings"
.only-default: &only-default
only:
- branches
except:
- tags
2019-11-11 21:21:25 +01:00
style-check-diff:
ci: Fix running all jobs on merge requests Since we added `only: [merge_requests]` for the `style-check-diff` job, that started running detached pipelines only for merge requests and only containing that job, and not running the other jobs for merge requests (only for branches). That wasn’t the intention. Follow the guide on https://docs.gitlab.com/ee/ci/merge_request_pipelines/index.html#excluding-certain-jobs to ensure that all jobs (including `style-check-diff`) are run for merge requests. This means we can no longer unconditionally use `${CI_MERGE_REQUEST_TARGET_BRANCH_{NAME,SHA}}`, since they are only defined for jobs which are running against a merge request rather than a branch. Instead, use some `git rev-list` magic from https://stackoverflow.com/a/4991675/2931197 to find the newest common ancestor commit between the detached head that CI is running on, and the known or likely target branch. Do the style check against the diff between the newest common ancestor commit and the detached head. (Note that `${CI_MERGE_REQUEST_TARGET_BRANCH_SHA}` was never actually defined for any of our pipelines, since it’s only available for CI pipelines running on merged branches, which is a GitLab Premium feature. Oops, my bad.) In order to find the newest common ancestor commit, we need to pull the upstream remote, since the CI pipeline might be running on a fork of the main repository where various branches (particularly `master`) are out of date. Signed-off-by: Philip Withnall <withnall@endlessm.com>
2019-11-27 12:07:23 +01:00
<<: *only-default
2019-11-11 21:21:25 +01:00
image: registry.gitlab.gnome.org/gnome/glib/debian-stable:v5
stage: style-check
allow_failure: true
script:
ci: Fix running all jobs on merge requests Since we added `only: [merge_requests]` for the `style-check-diff` job, that started running detached pipelines only for merge requests and only containing that job, and not running the other jobs for merge requests (only for branches). That wasn’t the intention. Follow the guide on https://docs.gitlab.com/ee/ci/merge_request_pipelines/index.html#excluding-certain-jobs to ensure that all jobs (including `style-check-diff`) are run for merge requests. This means we can no longer unconditionally use `${CI_MERGE_REQUEST_TARGET_BRANCH_{NAME,SHA}}`, since they are only defined for jobs which are running against a merge request rather than a branch. Instead, use some `git rev-list` magic from https://stackoverflow.com/a/4991675/2931197 to find the newest common ancestor commit between the detached head that CI is running on, and the known or likely target branch. Do the style check against the diff between the newest common ancestor commit and the detached head. (Note that `${CI_MERGE_REQUEST_TARGET_BRANCH_SHA}` was never actually defined for any of our pipelines, since it’s only available for CI pipelines running on merged branches, which is a GitLab Premium feature. Oops, my bad.) In order to find the newest common ancestor commit, we need to pull the upstream remote, since the CI pipeline might be running on a fork of the main repository where various branches (particularly `master`) are out of date. Signed-off-by: Philip Withnall <withnall@endlessm.com>
2019-11-27 12:07:23 +01:00
- git remote add upstream https://gitlab.gnome.org/GNOME/glib.git
- git fetch upstream
- git diff -U0 --no-color $(diff --old-line-format='' --new-line-format='' <(git rev-list --first-parent upstream/${CI_MERGE_REQUEST_TARGET_BRANCH_NAME:-${CI_DEFAULT_BRANCH}}) <(git rev-list --first-parent HEAD) | head -1) | ./clang-format-diff.py -binary "clang-format-7" -p1
2019-11-11 21:21:25 +01:00
fedora-x86_64:
<<: *only-default
image: registry.gitlab.gnome.org/gnome/glib/fedora:v4
stage: build
variables:
CFLAGS: "-coverage -ftest-coverage -fprofile-arcs"
script:
- meson ${MESON_COMMON_OPTIONS}
--werror
--default-library=both
--prefix=$HOME/glib-installed
--libdir=lib
-Dsystemtap=true
-Ddtrace=true
-Dfam=true
-Dinstalled_tests=true
_build
- ninja -C _build
- mkdir -p _coverage
- lcov --config-file .gitlab-ci/lcovrc --directory _build --capture --initial --output-file "_coverage/${CI_JOB_NAME}-baseline.lcov"
- .gitlab-ci/run-tests.sh
- lcov --config-file .gitlab-ci/lcovrc --directory _build --capture --output-file "_coverage/${CI_JOB_NAME}.lcov"
# FIXME: We should run all installed tests, but do only this one for now
# because it cannot run uninstalled. Reconfigure with dtrace disabled
# because it breaks static link.
- meson configure -Ddtrace=false _build
- ninja -C _build install
- GLIB_TEST_COMPILATION=1 $HOME/glib-installed/libexec/installed-tests/glib/static-link.py $HOME/glib-installed/lib/pkgconfig
artifacts:
reports:
junit: "_build/${CI_JOB_NAME}-report.xml"
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
when: always
paths:
- "_build/config.h"
- "_build/glib/glibconfig.h"
2018-06-05 20:01:53 +02:00
- "_build/meson-logs"
- "_build/${CI_JOB_NAME}-report.xml"
2018-06-05 20:01:53 +02:00
- "_coverage"
debian-stable-x86_64:
<<: *only-default
image: registry.gitlab.gnome.org/gnome/glib/debian-stable:v5
stage: build
script:
- meson ${MESON_COMMON_OPTIONS}
--werror
--default-library=both
--prefix=$HOME/glib-installed
--libdir=lib
-Dsystemtap=true
-Ddtrace=true
-Dfam=true
-Dinstalled_tests=true
_build
- ninja -C _build
- .gitlab-ci/run-tests.sh
artifacts:
reports:
junit: "_build/${CI_JOB_NAME}-report.xml"
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
when: always
paths:
- "_build/config.h"
- "_build/glib/glibconfig.h"
- "_build/meson-logs"
- "_build/${CI_JOB_NAME}-report.xml"
G_DISABLE_ASSERT:
<<: *only-default
image: registry.gitlab.gnome.org/gnome/glib/fedora:v4
stage: build
variables:
CPPFLAGS: "-DG_DISABLE_ASSERT"
script:
- meson ${MESON_COMMON_OPTIONS}
--werror
-Dsystemtap=true
-Ddtrace=true
-Dfam=true
-Dinstalled_tests=true
_build
- ninja -C _build
- bash -x ./.gitlab-ci/run-tests.sh
artifacts:
reports:
junit: "_build/${CI_JOB_NAME}-report.xml"
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
when: always
paths:
- "_build/config.h"
- "_build/glib/glibconfig.h"
- "_build/meson-logs"
- "_build/${CI_JOB_NAME}-report.xml"
valgrind:
<<: *only-default
image: registry.gitlab.gnome.org/gnome/glib/fedora:v4
stage: analysis
variables:
MESON_TEST_TIMEOUT_MULTIPLIER: 10
script:
- meson ${MESON_COMMON_OPTIONS}
--werror
-Dsystemtap=true
-Ddtrace=true
-Dfam=true
-Dinstalled_tests=true
_build
- ninja -C _build
- bash -x ./.gitlab-ci/run-tests.sh
--log-file _build/meson-logs/testlog-valgrind.json
--wrap "valgrind --tool=memcheck --error-exitcode=1 --track-origins=yes --leak-check=full --leak-resolution=high --num-callers=50 --show-leak-kinds=definite,possible --show-error-list=yes --suppressions=${CI_PROJECT_DIR}/glib.supp"
--no-suite no-valgrind
--no-suite slow
# FIXME: Remove this when we have zero valgrind leaks.
# https://gitlab.gnome.org/GNOME/glib/issues/333
allow_failure: true
artifacts:
reports:
junit: "_build/${CI_JOB_NAME}-report.xml"
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
when: always
paths:
- "_build/config.h"
- "_build/glib/glibconfig.h"
- "_build/meson-logs"
.cross-template: &cross-template
<<: *only-default
stage: build
artifacts:
2018-06-05 20:01:53 +02:00
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
when: always
paths:
2018-06-05 20:01:53 +02:00
- "_build/meson-logs"
cross-android_api21_arm64:
<<: *cross-template
image: registry.gitlab.gnome.org/gnome/glib/android-ndk:v1
script:
# FIXME: add --werror
# We use -Diconv=auto to test that we successfully detect that iconv is not
# provided by android api 21, and detect the external iconv instead.
- meson ${MESON_COMMON_OPTIONS} --cross-file=/opt/cross_file_android_arm64_21.txt -Diconv=auto -Dinternal_pcre=true _build
- ninja -C _build
cross-android_api28_arm64:
<<: *cross-template
image: registry.gitlab.gnome.org/gnome/glib/android-ndk:v1
script:
# FIXME: add --werror
- meson ${MESON_COMMON_OPTIONS} --cross-file=/opt/cross_file_android_arm64_28.txt -Dinternal_pcre=true _build
- ninja -C _build
cross-mingw64:
<<: *cross-template
image: registry.gitlab.gnome.org/gnome/glib/mingw:v1
script:
# FIXME: Add --werror
- meson ${MESON_COMMON_OPTIONS} --cross-file=/opt/cross_file_mingw64.txt _build
- ninja -C _build
msys2-mingw32:
<<: *only-default
stage: build
tags:
- win32
variables:
MSYSTEM: "MINGW32"
CHERE_INVOKING: "yes"
script:
- C:\msys64\usr\bin\pacman --noconfirm -Syyuu --ask 20
- C:\msys64\usr\bin\bash -lc "bash -x ./.gitlab-ci/test-msys2.sh"
artifacts:
2019-04-06 16:22:04 +02:00
reports:
junit: "_build/%CI_JOB_NAME%-report.xml"
name: "glib-%CI_JOB_NAME%-%CI_COMMIT_REF_NAME%"
when: always
paths:
- _build/meson-logs
2019-04-06 16:22:04 +02:00
- "_build/%CI_JOB_NAME%-report.xml"
- _coverage/
vs2017-x64:
<<: *only-default
stage: build
tags:
- win32
script:
- .gitlab-ci/test-msvc.bat
artifacts:
reports:
junit: "_build/%CI_JOB_NAME%-report.xml"
name: "glib-%CI_JOB_NAME%-%CI_COMMIT_REF_NAME%"
when: always
paths:
- _build/meson-logs
- "_build/%CI_JOB_NAME%-report.xml"
freebsd-11-x86_64:
stage: build
only:
- branches@GNOME/glib
tags:
# To run a FreeBSD builder, install gitlab-runner package and start both
# gitlab-runner and dbus service because we need /var/lib/dbus/machine-id.
# To compile GLib, you still have to install the following packages:
# desktop-file-utils gettext libiconv meson pkgconf python3 shared-mime-info
- freebsd-11
variables:
# CPPFLAGS is required because libintl doesn't use pkg-config.
CPPFLAGS: -I/usr/local/include
# FIXME: Workaround meson inability to set LD_LIBRARY_PATH.
# https://github.com/mesonbuild/meson/issues/1383
# https://github.com/mesonbuild/meson/issues/1635
# https://github.com/mesonbuild/meson/issues/2881
LDFLAGS: -L/usr/local/lib -Wl,--disable-new-dtags
# FreeBSD doesn't have C.UTF-8 locale.
LANG: en_US.UTF-8
script:
# We cannot use -Wl,--no-undefined because GLib uses 'environ' variable.
# FreeBSD iconv doesn't handle transliteration, so we use (external) GNU libiconv here.
# FreeBSD supports xattr, but its API is different from Linux xattr.
# FIXME: extattr(2) support: https://gitlab.gnome.org/GNOME/glib/issues/1404
- meson ${MESON_COMMON_OPTIONS} -Db_lundef=false -Diconv=external -Dxattr=false _build
- ninja -C _build
- bash -x ./.gitlab-ci/run-tests.sh
artifacts:
2019-06-24 16:55:36 +02:00
reports:
junit: "_build/${CI_JOB_NAME}-report.xml"
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
when: always
paths:
- "_build/config.h"
- "_build/glib/glibconfig.h"
- "_build/meson-logs"
- "_build/${CI_JOB_NAME}-report.xml"
freebsd-12-x86_64:
stage: build
only:
- branches@GNOME/glib
tags:
- freebsd-12
variables:
CPPFLAGS: -I/usr/local/include
LDFLAGS: -L/usr/local/lib -Wl,--disable-new-dtags
LANG: en_US.UTF-8
script:
- meson ${MESON_COMMON_OPTIONS} -Db_lundef=false -Diconv=external -Dxattr=false _build
- ninja -C _build
- bash -x ./.gitlab-ci/run-tests.sh
except:
- tags
artifacts:
reports:
junit: "_build/${CI_JOB_NAME}-report.xml"
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
when: always
paths:
2018-09-28 19:01:12 +02:00
- "_build/config.h"
- "_build/glib/glibconfig.h"
- "_build/meson-logs"
- "_build/${CI_JOB_NAME}-report.xml"
coverage:
<<: *only-default
image: registry.gitlab.gnome.org/gnome/glib/fedora:v4
stage: coverage
artifacts:
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
paths:
- _coverage/
script:
- bash -x ./.gitlab-ci/coverage-docker.sh
coverage: '/^\s+lines\.+:\s+([\d.]+\%)\s+/'
scan-build:
<<: *only-default
image: registry.gitlab.gnome.org/gnome/glib/fedora:v4
stage: analysis
script:
- meson ${MESON_COMMON_OPTIONS}
--werror
--default-library=both
--prefix=$HOME/glib-installed
--libdir=lib
-Dsystemtap=true
-Ddtrace=true
-Dfam=true
-Dinstalled_tests=true
_scan_build
- ninja -C _scan_build scan-build
artifacts:
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
when: always
paths:
- "_scan_build/meson-logs/scanbuild"
pages:
stage: deploy
2018-06-05 19:39:26 +02:00
only:
- master
script:
- mv _coverage/ public/
artifacts:
paths:
- public
dist-job:
image: registry.gitlab.gnome.org/gnome/glib/fedora:v4
stage: build
only:
- tags
script:
- meson --buildtype release --fatal-meson-warnings -Dgtk_doc=true -Dman=true _build
- cd _build
- ninja dist
- ninja glib-doc gobject-doc gio-doc
- tar -c -f "glib-docs-$CI_COMMIT_TAG.tar.xz" -C docs/reference/glib html
- tar -c -f "gobject-docs-$CI_COMMIT_TAG.tar.xz" -C docs/reference/gobject html
- tar -c -f "gio-docs-$CI_COMMIT_TAG.tar.xz" -C docs/reference/gio html
artifacts:
paths:
- "${CI_PROJECT_DIR}/_build/glib-docs.tar.xz"
- "${CI_PROJECT_DIR}/_build/gobject-docs.tar.xz"
- "${CI_PROJECT_DIR}/_build/gio-docs.tar.xz"
- "${CI_PROJECT_DIR}/_build/meson-dist/glib-*.tar.xz"