mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
548ec9f186
The `gi-docgen` tool is not designed to be used like that. In particular, when nesting documentation directories, the generated `*.devhelp2` files (needed by Devhelp to show the documentation) are nested one directory level too deep for Devhelp to find them, and hence are useless, and the documentation doesn’t show up in this common documentation viewer. So, change the installed documentation directory hierarchy: * `${PREFIX}/share/doc/glib-2.0/gio` → `${PREFIX}/share/doc/gio-2.0` * `${PREFIX}/share/doc/glib-2.0/glib-unix` → `${PREFIX}/share/doc/glib-unix-2.0` * `${PREFIX}/share/doc/glib-2.0/gobject` → `${PREFIX}/share/doc/gobject-2.0` * etc. * `${PREFIX}/share/doc/glib-2.0/glib` → `${PREFIX}/share/doc/glib-2.0` This is going to seem like pointless churn (the contents of the documentation have not changed), and packagers may mourn the split of content in `/usr/share/doc` from `/usr/share/doc/${package_name}` to `/usr/share/doc/${pkg_config_id}` instead, but that seems to be the best approach to fix this issue in GLib. gi-docgen’s behaviour does feel fairly consistent and correct with the rest of how it works (single output directory). Signed-off-by: Philip Withnall <pwithnall@gnome.org> Fixes: #3287
829 lines
25 KiB
YAML
829 lines
25 KiB
YAML
stages:
|
||
- style-check
|
||
- build
|
||
- coverage
|
||
- analysis
|
||
- deploy
|
||
- report
|
||
|
||
cache:
|
||
paths:
|
||
- _ccache/
|
||
|
||
variables:
|
||
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/glib/fedora:v26"
|
||
COVERITY_IMAGE: "registry.gitlab.gnome.org/gnome/glib/coverity:v7"
|
||
DEBIAN_IMAGE: "registry.gitlab.gnome.org/gnome/glib/debian-stable:v19"
|
||
ALPINE_IMAGE: "registry.gitlab.gnome.org/gnome/glib/alpine:v3"
|
||
MINGW_IMAGE: "registry.gitlab.gnome.org/gnome/glib/mingw:v15"
|
||
MESON_TEST_TIMEOUT_MULTIPLIER: 4
|
||
G_MESSAGES_DEBUG: all
|
||
MESON_COMMON_OPTIONS: "--buildtype debug --wrap-mode=nodownload --fatal-meson-warnings"
|
||
|
||
# Default CI job setup; contrast with `.only-origin`.
|
||
#
|
||
# Don’t execute the pipeline when a merge request is merged into `origin/main`,
|
||
# as it will have already been tested
|
||
.only-default:
|
||
only:
|
||
- branches
|
||
except:
|
||
refs:
|
||
- tags
|
||
variables:
|
||
- $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PROJECT_NAMESPACE == "GNOME"
|
||
|
||
# As above, but does get executed on merge into `origin/main`. For use with
|
||
# updating code coverage results and docs builds.
|
||
.only-default-and-merges:
|
||
only:
|
||
- branches
|
||
except:
|
||
refs:
|
||
- tags
|
||
|
||
# Some jobs run on CI runners which don’t have good isolation between CI jobs,
|
||
# and don’t have much available resource. Limit those jobs to only ones on the
|
||
# origin repository (GNOME/glib), rather than people’s forks. Code in the origin
|
||
# repository can be trusted.
|
||
.only-origin:
|
||
only:
|
||
- branches@GNOME/glib
|
||
except:
|
||
- tags
|
||
|
||
# Some jobs take a long time and are unlikely to find failures (or will find
|
||
# failures which are not merge-blockers to fix), so they’re executed on a weekly
|
||
# schedule in order to save CI resources and speed up branch pipelines.
|
||
.only-schedules:
|
||
only:
|
||
- schedules
|
||
except:
|
||
- tags
|
||
|
||
# Some jobs take a long time and are unlikely to find failures (or will find
|
||
# failures which are not merge-blockers to fix), so they’re executed on a weekly
|
||
# schedule in order to save CI resources and speed up branch pipelines.
|
||
# But for specific merge requests, one may still want to run them, so make
|
||
# possible to run them manually.
|
||
.only-schedules-or-manual:
|
||
rules:
|
||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||
when: never
|
||
# As per rule before, the following rules will only apply to non MR events
|
||
- if: $CI_PIPELINE_SOURCE == "schedule"
|
||
when: always
|
||
- if: $CI_PIPELINE_SOURCE != "schedule"
|
||
when: manual
|
||
allow_failure: true
|
||
|
||
# Some jobs should be runnable only on schedules and when triggered by a branch
|
||
# in the origin repository, but without
|
||
.only-schedules-or-manual-in-default-branch:
|
||
rules:
|
||
- if: $CI_PROJECT_PATH != "GNOME/glib" || $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
|
||
when: never
|
||
# As per rule before, the following rules will apply only to GNOME/glib:main
|
||
- if: $CI_PIPELINE_SOURCE == "schedule"
|
||
when: always
|
||
- if: $CI_PIPELINE_SOURCE != "schedule"
|
||
when: manual
|
||
allow_failure: true
|
||
|
||
# Some jobs run on CI runners don’t have much available resource.
|
||
# Limit those jobs to only ones on the origin repository (GNOME/glib),
|
||
# rather than people’s forks or if ran manually.
|
||
.only-origin-or-manual:
|
||
rules:
|
||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||
when: never
|
||
- if: $CI_PIPELINE_SOURCE == "schedule"
|
||
when: never
|
||
- if: $CI_PROJECT_NAMESPACE == "GNOME"
|
||
when: always
|
||
- if: $CI_PROJECT_NAMESPACE != "GNOME"
|
||
when: manual
|
||
allow_failure: true
|
||
|
||
.build-linux:
|
||
before_script:
|
||
- bash .gitlab-ci/show-execution-environment.sh
|
||
- cp -r $HOME/subprojects/* subprojects/
|
||
|
||
# FIXME: Work around https://gitlab.com/gitlab-org/gitlab/-/issues/391756
|
||
.with-git:
|
||
before_script:
|
||
- rm -rf subprojects/gvdb
|
||
- git config --global --add safe.directory "${PWD}"
|
||
- git submodule update --init --depth 1
|
||
variables:
|
||
GIT_SUBMODULE_STRATEGY: "none"
|
||
GIT_SUBMODULE_DEPTH: 1
|
||
|
||
style-check-advisory:
|
||
extends:
|
||
- .only-default
|
||
- .with-git
|
||
image: $DEBIAN_IMAGE
|
||
stage: style-check
|
||
allow_failure: true
|
||
script:
|
||
- failed=
|
||
- .gitlab-ci/run-style-check-diff.sh || failed=1
|
||
- .gitlab-ci/run-check-todos.sh || failed=1
|
||
- test -z "$failed"
|
||
|
||
sh-and-py-check:
|
||
extends:
|
||
- .only-default
|
||
- .with-git
|
||
image: $DEBIAN_IMAGE
|
||
stage: style-check
|
||
allow_failure: false
|
||
script:
|
||
- failed=
|
||
- tests/shellcheck.sh || failed=1
|
||
- tests/black.sh || failed=1
|
||
- tests/flake8.sh || failed=1
|
||
- test -z "$failed"
|
||
variables:
|
||
LINT_WARNINGS_ARE_ERRORS: '1'
|
||
only:
|
||
changes:
|
||
- "**/*.py"
|
||
- "**/*.sh"
|
||
|
||
style-check-mandatory:
|
||
extends:
|
||
- .only-default
|
||
- .with-git
|
||
image: $DEBIAN_IMAGE
|
||
stage: style-check
|
||
allow_failure: false
|
||
script:
|
||
- tests/reuse.sh
|
||
variables:
|
||
LINT_WARNINGS_ARE_ERRORS: '1'
|
||
|
||
fedora-x86_64:
|
||
extends:
|
||
- .build-linux
|
||
- .only-default-and-merges
|
||
- .with-git
|
||
image: $FEDORA_IMAGE
|
||
stage: build
|
||
needs: []
|
||
variables:
|
||
CFLAGS: "-coverage -ftest-coverage -fprofile-arcs"
|
||
before_script:
|
||
- !reference [".build-linux", "before_script"]
|
||
- !reference [".with-git", "before_script"]
|
||
script:
|
||
- meson setup ${MESON_COMMON_OPTIONS}
|
||
--werror
|
||
--default-library=both
|
||
--prefix=$HOME/glib-installed
|
||
--localstatedir=/var
|
||
--libdir=lib
|
||
-Dsystemtap=true
|
||
-Ddtrace=true
|
||
-Dinstalled_tests=true
|
||
-Ddocumentation=true
|
||
-Dintrospection=enabled
|
||
-Dman-pages=enabled
|
||
_build
|
||
- meson compile -C _build
|
||
- mkdir -p _coverage
|
||
- lcov --config-file .lcovrc --directory _build --capture --initial --output-file "_coverage/${CI_JOB_NAME}-baseline.lcov"
|
||
- .gitlab-ci/run-tests.sh
|
||
- lcov --config-file .lcovrc --directory _build --capture --output-file "_coverage/${CI_JOB_NAME}.lcov"
|
||
# Copy the built documentation to an artifact directory. The build for docs.gtk.org
|
||
# can then pull it from there — see https://gitlab.gnome.org/GNOME/gtk/-/blob/docs-gtk-org/README.md
|
||
- mkdir -p _reference/
|
||
- mv _build/docs/reference/glib/glib-2.0/ _reference/glib/
|
||
- mv _build/docs/reference/glib/glib-unix-2.0/ _reference/glib-unix/
|
||
- mv _build/docs/reference/gmodule/gmodule-2.0/ _reference/gmodule/
|
||
- mv _build/docs/reference/gobject/gobject-2.0/ _reference/gobject/
|
||
- mv _build/docs/reference/gio/gio-2.0/ _reference/gio/
|
||
- mv _build/docs/reference/gio/gio-unix-2.0/ _reference/gio-unix/
|
||
- mv _build/docs/reference/girepository/girepository-2.0/ _reference/girepository/
|
||
artifacts:
|
||
reports:
|
||
junit:
|
||
- _build/meson-logs/testlog.junit.xml
|
||
- _build/meson-logs/testlog-*.junit.xml
|
||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- "_build/config.h"
|
||
- "_build/glib/glibconfig.h"
|
||
- "_build/meson-logs"
|
||
- "_coverage"
|
||
- "_reference"
|
||
|
||
debian-stable-x86_64:
|
||
extends:
|
||
- .build-linux
|
||
- .only-default
|
||
- .with-git
|
||
image: $DEBIAN_IMAGE
|
||
stage: build
|
||
needs: []
|
||
before_script:
|
||
- !reference [".build-linux", "before_script"]
|
||
- !reference [".with-git", "before_script"]
|
||
script:
|
||
- meson setup ${MESON_COMMON_OPTIONS}
|
||
--werror
|
||
--default-library=both
|
||
--prefix=$HOME/glib-installed
|
||
--localstatedir=/var
|
||
--libdir=lib
|
||
-Dsystemtap=true
|
||
-Ddtrace=true
|
||
_build
|
||
- meson compile -C _build
|
||
- .gitlab-ci/run-tests.sh
|
||
artifacts:
|
||
reports:
|
||
junit:
|
||
- _build/meson-logs/testlog.junit.xml
|
||
- _build/meson-logs/testlog-*.junit.xml
|
||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- "_build/config.h"
|
||
- "_build/glib/glibconfig.h"
|
||
- "_build/meson-logs"
|
||
|
||
hurd-i386:
|
||
extends:
|
||
- .only-schedules-or-manual
|
||
- .with-git
|
||
stage: build
|
||
tags:
|
||
- hurd
|
||
needs: []
|
||
script:
|
||
# FIXME: We can’t use ${MESON_COMMON_OPTIONS} here because the Hurd runner
|
||
# has Meson 1.3 installed. See the comment below about the same problem on
|
||
# FreeBSD.
|
||
- meson setup
|
||
--buildtype debug
|
||
--wrap-mode=nodownload
|
||
--werror
|
||
--default-library=both
|
||
--prefix=$HOME/glib-installed
|
||
--localstatedir=/var
|
||
--libdir=lib
|
||
_build
|
||
- meson compile -C _build
|
||
- .gitlab-ci/run-tests.sh
|
||
artifacts:
|
||
reports:
|
||
junit:
|
||
- _build/meson-logs/testlog.junit.xml
|
||
- _build/meson-logs/testlog-*.junit.xml
|
||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- "_build/config.h"
|
||
- "_build/glib/glibconfig.h"
|
||
- "_build/meson-logs"
|
||
|
||
muslc-alpine-x86_64:
|
||
extends:
|
||
- .build-linux
|
||
- .only-schedules-or-manual
|
||
- .with-git
|
||
image: $ALPINE_IMAGE
|
||
stage: build
|
||
needs: []
|
||
before_script:
|
||
- !reference [".build-linux", "before_script"]
|
||
- !reference [".with-git", "before_script"]
|
||
script:
|
||
- meson setup ${MESON_COMMON_OPTIONS}
|
||
--werror
|
||
--default-library=both
|
||
--prefix=$HOME/glib-installed
|
||
--localstatedir=/var
|
||
--libdir=lib
|
||
-Dsystemtap=true
|
||
_build
|
||
- meson compile -C _build
|
||
- .gitlab-ci/run-tests.sh
|
||
artifacts:
|
||
reports:
|
||
junit:
|
||
- _build/meson-logs/testlog.junit.xml
|
||
- _build/meson-logs/testlog-*.junit.xml
|
||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- "_build/config.h"
|
||
- "_build/glib/glibconfig.h"
|
||
- "_build/meson-logs"
|
||
|
||
installed-tests:
|
||
extends:
|
||
- .build-linux
|
||
- .only-schedules-or-manual
|
||
image: $FEDORA_IMAGE
|
||
stage: build
|
||
needs: []
|
||
script:
|
||
# dtrace is disabled because it breaks the static-link.py test
|
||
- meson setup ${MESON_COMMON_OPTIONS}
|
||
--werror
|
||
--prefix=/usr --libdir=/usr/lib64
|
||
-Dinstalled_tests=true
|
||
-Ddefault_library=both
|
||
-Ddtrace=false
|
||
_build
|
||
- meson compile -C _build
|
||
- sudo meson install -C _build
|
||
# Remove old headers, possibly present in current installation
|
||
- sudo rm -f /usr/include/glib-2.0/glib/gurifuncs.h
|
||
- sudo chown -R `id -un`:`id -gn` _build/
|
||
# Work-around https://gitlab.gnome.org/GNOME/gnome-desktop-testing/merge_requests/2
|
||
- mkdir -p _build/installed-tests-report/logs/
|
||
- GLIB_TEST_COMPILATION=1 gnome-desktop-testing-runner
|
||
--report-directory=_build/installed-tests-report/failed/
|
||
--log-directory=_build/installed-tests-report/logs/
|
||
--parallel=0
|
||
glib
|
||
artifacts:
|
||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- "_build/config.h"
|
||
- "_build/glib/glibconfig.h"
|
||
- "_build/meson-logs"
|
||
- "_build/installed-tests-report/"
|
||
|
||
G_DISABLE_ASSERT:
|
||
extends:
|
||
- .build-linux
|
||
- .only-schedules-or-manual
|
||
- .with-git
|
||
image: $FEDORA_IMAGE
|
||
stage: build
|
||
needs: []
|
||
variables:
|
||
MESON_TEST_TIMEOUT_MULTIPLIER: 15
|
||
before_script:
|
||
- !reference [".build-linux", "before_script"]
|
||
- !reference [".with-git", "before_script"]
|
||
script:
|
||
- meson setup ${MESON_COMMON_OPTIONS}
|
||
--werror
|
||
-Dsystemtap=true
|
||
-Ddtrace=true
|
||
-Dinstalled_tests=true
|
||
-Dglib_assert=false
|
||
-Dintrospection=enabled
|
||
_build
|
||
- meson compile -C _build
|
||
# Also take the opportunity to run the thorough tests (which are slow)
|
||
- bash -x ./.gitlab-ci/run-tests.sh --setup thorough
|
||
artifacts:
|
||
reports:
|
||
junit:
|
||
- _build/meson-logs/testlog.junit.xml
|
||
- _build/meson-logs/testlog-*.junit.xml
|
||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- "_build/config.h"
|
||
- "_build/glib/glibconfig.h"
|
||
- "_build/meson-logs"
|
||
|
||
valgrind:
|
||
extends:
|
||
- .build-linux
|
||
- .only-schedules-or-manual
|
||
- .with-git
|
||
image: $FEDORA_IMAGE
|
||
stage: analysis
|
||
needs: []
|
||
variables:
|
||
MESON_TEST_TIMEOUT_MULTIPLIER: 15
|
||
before_script:
|
||
- !reference [".build-linux", "before_script"]
|
||
- !reference [".with-git", "before_script"]
|
||
script:
|
||
- meson setup ${MESON_COMMON_OPTIONS}
|
||
--werror
|
||
-Dsystemtap=true
|
||
-Ddtrace=true
|
||
-Dinstalled_tests=true
|
||
-Dintrospection=enabled
|
||
_build
|
||
- meson compile -C _build
|
||
# Valgrind doesn’t work when the soft FD limit is set too high
|
||
# See https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2710
|
||
- ulimit -Sn 1024
|
||
- bash -x ./.gitlab-ci/run-tests.sh
|
||
--setup valgrind
|
||
--no-suite slow
|
||
artifacts:
|
||
reports:
|
||
junit: "_build/meson-logs/testlog-valgrind.junit.xml"
|
||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- "_build/config.h"
|
||
- "_build/glib/glibconfig.h"
|
||
- "_build/meson-logs"
|
||
|
||
.cross-build-linux:
|
||
extends: .build-linux
|
||
stage: build
|
||
needs: []
|
||
artifacts:
|
||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- "_build/meson-logs"
|
||
|
||
cross-android_arm64:
|
||
extends:
|
||
- .cross-build-linux
|
||
- .only-default
|
||
image: $FEDORA_IMAGE
|
||
script:
|
||
# FIXME: add --werror
|
||
- meson setup ${MESON_COMMON_OPTIONS} --cross-file=.gitlab-ci/cross_file_android_arm64_31.txt _build
|
||
- meson compile -C _build
|
||
|
||
cross-mingw64:
|
||
extends:
|
||
- .cross-build-linux
|
||
- .only-default
|
||
image: $MINGW_IMAGE
|
||
variables:
|
||
PYTHONUTF8: "1"
|
||
script:
|
||
# FIXME: Add --werror
|
||
- meson setup ${MESON_COMMON_OPTIONS} --cross-file=/opt/cross_file_mingw64.txt _build
|
||
- meson compile -C _build
|
||
artifacts:
|
||
reports:
|
||
junit:
|
||
- _build/meson-logs/testlog.junit.xml
|
||
- _build/meson-logs/testlog-*.junit.xml
|
||
name: "glib-${env:CI_JOB_NAME}-${env:CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- _build/meson-logs
|
||
- _build/glib/libglib-2.0-0.dll
|
||
- _build/gio/libgio-2.0-0.dll
|
||
- _build/gmodule/libgmodule-2.0-0.dll
|
||
- _build/gthread/libgthread-2.0-0.dll
|
||
- _build/gobject/libgobject-2.0-0.dll
|
||
|
||
msys2-mingw32:
|
||
extends: .only-default-and-merges
|
||
stage: build
|
||
tags:
|
||
- win32-ps
|
||
needs: []
|
||
variables:
|
||
MSYSTEM: "MINGW32"
|
||
CHERE_INVOKING: "yes"
|
||
CFLAGS: -coverage -ftest-coverage -fprofile-arcs
|
||
PYTHONUTF8: "1"
|
||
script:
|
||
- C:\msys64\usr\bin\pacman --noconfirm -Syyuu --ask 20
|
||
- C:\msys64\usr\bin\bash .gitlab-ci/show-execution-environment.sh
|
||
- C:\msys64\usr\bin\bash -lc "bash -x ./.gitlab-ci/test-msys2.sh"
|
||
artifacts:
|
||
reports:
|
||
junit:
|
||
- _build/meson-logs/testlog.junit.xml
|
||
- _build/meson-logs/testlog-*.junit.xml
|
||
name: "glib-${env:CI_JOB_NAME}-${env:CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- _build/meson-logs
|
||
- _coverage/
|
||
- _reference/
|
||
|
||
msys2-clang64:
|
||
extends: .only-schedules-or-manual
|
||
stage: build
|
||
tags:
|
||
- win32-ps
|
||
needs: []
|
||
variables:
|
||
MSYSTEM: "CLANG64"
|
||
CHERE_INVOKING: "yes"
|
||
PYTHONUTF8: "1"
|
||
script:
|
||
- C:\msys64\usr\bin\pacman --noconfirm -Syyuu --ask 20
|
||
- C:\msys64\usr\bin\bash .gitlab-ci/show-execution-environment.sh
|
||
- C:\msys64\usr\bin\bash -lc "bash -x ./.gitlab-ci/test-msys2.sh"
|
||
artifacts:
|
||
reports:
|
||
junit: "_build/meson-logs/testlog.junit.xml"
|
||
name: "glib-${env:CI_JOB_NAME}-${env:CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- _build/meson-logs
|
||
|
||
vs2017-x64:
|
||
extends: .only-default
|
||
stage: build
|
||
tags:
|
||
- win32-ps
|
||
needs: []
|
||
variables:
|
||
PYTHONUTF8: "1"
|
||
script:
|
||
# FIXME: These should use --wrap-mode=nodownload but the Windows CI machines
|
||
# aren’t currently set up for that.
|
||
- .gitlab-ci/test-msvc.bat ${MESON_COMMON_OPTIONS}
|
||
--wrap-mode=default
|
||
--python.platlibdir=C:\Python37\site-packages
|
||
--python.purelibdir=C:\Python37\site-packages
|
||
artifacts:
|
||
reports:
|
||
junit:
|
||
- _build/meson-logs/testlog.junit.xml
|
||
- _build/meson-logs/testlog-*.junit.xml
|
||
name: "glib-${env:CI_JOB_NAME}-${env:CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- _build/meson-logs
|
||
- _build/glib/libglib-2.0-0.dll
|
||
- _build/gio/libgio-2.0-0.dll
|
||
- _build/gmodule/libgmodule-2.0-0.dll
|
||
- _build/gthread/libgthread-2.0-0.dll
|
||
- _build/gobject/libgobject-2.0-0.dll
|
||
|
||
vs2017-x64-static:
|
||
extends: .only-default
|
||
stage: build
|
||
tags:
|
||
- win32-ps
|
||
needs: []
|
||
variables:
|
||
PYTHONUTF8: "1"
|
||
script:
|
||
# FIXME: These should use --wrap-mode=nodownload but the Windows CI machines
|
||
# aren’t currently set up for that.
|
||
- .gitlab-ci/test-msvc.bat ${MESON_COMMON_OPTIONS}
|
||
--wrap-mode=default
|
||
--default-library=static
|
||
--python.platlibdir=C:\Python37\site-packages
|
||
--python.purelibdir=C:\Python37\site-packages
|
||
artifacts:
|
||
reports:
|
||
junit:
|
||
- _build/meson-logs/testlog.junit.xml
|
||
- _build/meson-logs/testlog-*.junit.xml
|
||
name: "glib-${env:CI_JOB_NAME}-${env:CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- _build/meson-logs
|
||
|
||
freebsd-13-x86_64:
|
||
extends: .only-origin-or-manual
|
||
stage: build
|
||
tags:
|
||
- freebsd-13
|
||
needs: []
|
||
variables:
|
||
CPPFLAGS: -I/usr/local/include
|
||
LDFLAGS: -L/usr/local/lib -Wl,--disable-new-dtags
|
||
LANG: C.UTF-8
|
||
before_script:
|
||
- bash .gitlab-ci/show-execution-environment.sh
|
||
script:
|
||
# FIXME: We can’t use ${MESON_COMMON_OPTIONS} here because the FreeBSD 13
|
||
# runner has Meson 1.3 installed. This has an API hole where previous
|
||
# methods of getting paths from files() objects are rejected as deprecated,
|
||
# but no replacements are available. Hence, we can’t build with
|
||
# --fatal-meson-warnings. This should be fixed in Meson 1.4. It’s also fine
|
||
# with Meson 1.2.3 (which is what we use on all the other CI runners).
|
||
# See https://github.com/GNOME/glib/commit/71061fdcb33b8c26f5f8467cb3ac10704d65c87d
|
||
- meson setup --buildtype debug --wrap-mode=nodownload --localstatedir=/var -Db_lundef=false -Dxattr=false _build
|
||
- meson compile -C _build
|
||
- bash -x ./.gitlab-ci/run-tests.sh
|
||
artifacts:
|
||
reports:
|
||
junit:
|
||
- _build/meson-logs/testlog.junit.xml
|
||
- _build/meson-logs/testlog-*.junit.xml
|
||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- "_build/config.h"
|
||
- "_build/glib/glibconfig.h"
|
||
- "_build/meson-logs"
|
||
|
||
macos-x86_64:
|
||
# The macOS runner is not allowed in forks. This is about trust, not capacity.
|
||
extends: .only-origin
|
||
stage: build
|
||
tags:
|
||
- macosintel
|
||
needs: []
|
||
cache: []
|
||
variables:
|
||
GIT_SUBMODULE_STRATEGY: normal
|
||
# -Wno-overlength-strings
|
||
# libpcre2 gets built as a subproject, but the default Clang options on
|
||
# macOS limit string lengths to 4095B — pcre2_error.c has a string of length
|
||
# 4380B
|
||
CFLAGS: "-Wno-overlength-strings"
|
||
# redirect to the runner's volatile temporary directory
|
||
TMPDIR: /Users/Shared/work/tmp
|
||
# keep the user profile clean
|
||
PIP_CACHE_DIR: /Users/Shared/build/cache
|
||
PIPENV_CACHE_DIR: $PIP_CACHE_DIR
|
||
PYTHONPYCACHEPREFIX: $PIP_CACHE_DIR
|
||
# target OS X 10.9 Mavericks for backward compatibility
|
||
SDKROOT: /opt/sdks/MacOSX10.9.sdk
|
||
# use the runner's ccache directory
|
||
CCACHE_DIR: /Users/Shared/work/ccache
|
||
before_script:
|
||
- bash .gitlab-ci/show-execution-environment.sh
|
||
- python3 -m venv .venv
|
||
- ln -s /opt/cmake/CMake.app/Contents/bin/cmake .venv/bin
|
||
- ln -s /opt/ccache/ccache .venv/bin
|
||
- source .venv/bin/activate
|
||
- pip3 install meson==1.2.3
|
||
- pip3 install ninja==1.11.1
|
||
- pip3 install packaging==23.2
|
||
script:
|
||
# FIXME: Use --wrap-mode=default so we download dependencies each time,
|
||
# until the macOS runner is a VM where we can use a pre-made image which
|
||
# already contains the dependencies. See:
|
||
# - https://gitlab.gnome.org/GNOME/glib/merge_requests/388
|
||
# - https://gitlab.gnome.org/Infrastructure/Infrastructure/issues/225
|
||
- meson setup ${MESON_COMMON_OPTIONS}
|
||
--wrap-mode=default
|
||
--werror
|
||
_build
|
||
- meson compile -C _build
|
||
- .gitlab-ci/run-tests.sh
|
||
artifacts:
|
||
reports:
|
||
junit:
|
||
- _build/meson-logs/testlog.junit.xml
|
||
- _build/meson-logs/testlog-*.junit.xml
|
||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- "_build/config.h"
|
||
- "_build/glib/glibconfig.h"
|
||
- "_build/meson-logs"
|
||
|
||
coverage:
|
||
extends: .only-default
|
||
image: $FEDORA_IMAGE
|
||
stage: coverage
|
||
needs: ['fedora-x86_64', 'msys2-mingw32']
|
||
artifacts:
|
||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||
expire_in: 1 week
|
||
expose_as: 'Coverage Report'
|
||
paths:
|
||
- _coverage/coverage/index.html
|
||
- _coverage
|
||
reports:
|
||
coverage_report:
|
||
coverage_format: cobertura
|
||
path: _coverage/*-cobertura/cobertura-*.xml
|
||
before_script:
|
||
- bash .gitlab-ci/show-execution-environment.sh
|
||
script:
|
||
- bash -x ./.gitlab-ci/coverage-docker.sh
|
||
coverage: '/^\s+lines\.+:\s+([\d.]+\%)\s+/'
|
||
|
||
scan-build:
|
||
extends:
|
||
- .build-linux
|
||
- .only-schedules-or-manual
|
||
image: $FEDORA_IMAGE
|
||
stage: analysis
|
||
needs: []
|
||
script:
|
||
- meson setup ${MESON_COMMON_OPTIONS}
|
||
--werror
|
||
--default-library=both
|
||
--prefix=$HOME/glib-installed
|
||
--localstatedir=/var
|
||
--libdir=lib
|
||
-Dsystemtap=true
|
||
-Ddtrace=true
|
||
-Dinstalled_tests=true
|
||
-Dintrospection=enabled
|
||
_scan_build
|
||
- ninja -C _scan_build scan-build
|
||
artifacts:
|
||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- "_scan_build/meson-logs/scanbuild"
|
||
|
||
.coverity:
|
||
extends:
|
||
- .build-linux
|
||
- .only-schedules-or-manual-in-default-branch
|
||
image: $COVERITY_IMAGE
|
||
stage: analysis
|
||
needs: []
|
||
variables:
|
||
# cov-build doesn’t like GLIB_DEPRECATED_ENUMERATOR
|
||
CFLAGS: '-DGLIB_DISABLE_DEPRECATION_WARNINGS'
|
||
script:
|
||
- meson setup ${MESON_COMMON_OPTIONS}
|
||
--werror
|
||
--default-library=both
|
||
--prefix=$HOME/glib-installed
|
||
--localstatedir=/var
|
||
--libdir=lib
|
||
-Dsystemtap=true
|
||
-Ddtrace=true
|
||
-Dinstalled_tests=true
|
||
-Dintrospection=enabled
|
||
_coverity_build
|
||
- $HOME/cov-analysis-linux64-*/bin/cov-build --dir cov-int meson compile -C _coverity_build
|
||
- tar cfz cov-int.tar.gz cov-int
|
||
- curl https://scan.coverity.com/builds?project=$COVERITY_SCAN_PROJECT_NAME
|
||
--form token=$COVERITY_SCAN_TOKEN --form email=$GITLAB_USER_EMAIL
|
||
--form file=@cov-int.tar.gz --form version="$CI_COMMIT_SHA"
|
||
--form description="$CI_COMMIT_SHA / $CI_COMMIT_TITLE / $CI_COMMIT_REF_NAME:$CI_PIPELINE_ID"
|
||
artifacts:
|
||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||
when: always
|
||
expire_in: 1 week
|
||
paths:
|
||
- "cov-int/build-log.txt"
|
||
|
||
pages:
|
||
extends: .only-schedules
|
||
stage: deploy
|
||
needs: ['coverage', 'style-check-advisory']
|
||
script:
|
||
- mv _coverage/ public/
|
||
artifacts:
|
||
paths:
|
||
- public
|
||
|
||
dist-job:
|
||
image: $FEDORA_IMAGE
|
||
stage: build
|
||
only:
|
||
- tags
|
||
script:
|
||
# Ignore extra git security checks as we don't care in CI.
|
||
- git config --global --add safe.directory "${PWD}"
|
||
- git submodule update --init
|
||
- for m in $(git submodule foreach -q 'echo $path'); do git config --global --add safe.directory "${PWD}/${m}"; done
|
||
- meson subprojects download
|
||
- meson setup ${MESON_COMMON_OPTIONS} --buildtype release -Ddocumentation=true -Dman-pages=enabled _build
|
||
- meson dist -C _build
|
||
# Compile again to build the docs
|
||
- meson compile -C _build
|
||
- tar -c -J -f "glib-docs-$CI_COMMIT_TAG.tar.xz" -C _build/docs/reference/glib glib-2.0
|
||
- tar -c -J -f "gmodule-docs-$CI_COMMIT_TAG.tar.xz" -C _build/docs/reference/gmodule gmodule-2.0
|
||
- tar -c -J -f "gobject-docs-$CI_COMMIT_TAG.tar.xz" -C _build/docs/reference/gobject gobject-2.0
|
||
- tar -c -J -f "gio-docs-$CI_COMMIT_TAG.tar.xz" -C _build/docs/reference/gio gio-2.0
|
||
- tar -c -J -f "girepository-docs-$CI_COMMIT_TAG.tar.xz" -C _build/docs/reference/girepository girepository-2.0
|
||
artifacts:
|
||
paths:
|
||
- "${CI_PROJECT_DIR}/_build/glib-docs-$CI_COMMIT_TAG.tar.xz"
|
||
- "${CI_PROJECT_DIR}/_build/gmodule-docs-$CI_COMMIT_TAG.tar.xz"
|
||
- "${CI_PROJECT_DIR}/_build/gobject-docs-$CI_COMMIT_TAG.tar.xz"
|
||
- "${CI_PROJECT_DIR}/_build/gio-docs-$CI_COMMIT_TAG.tar.xz"
|
||
- "${CI_PROJECT_DIR}/_build/girepository-docs-$CI_COMMIT_TAG.tar.xz"
|
||
- "${CI_PROJECT_DIR}/_build/meson-dist/glib-*.tar.xz"
|
||
|
||
issue-bot:
|
||
stage: report
|
||
image: registry.gitlab.com/gitlab-org/distribution/issue-bot:latest
|
||
script: /issue-bot
|
||
rules:
|
||
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "schedule"
|
||
when: on_failure
|