| 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/ _reference/glib/ |
| - mv _build/docs/reference/glib/glib-unix/ _reference/glib-unix/ |
| - mv _build/docs/reference/gmodule/gmodule/ _reference/gmodule/ |
| - mv _build/docs/reference/gobject/gobject/ _reference/gobject/ |
| - mv _build/docs/reference/gio/gio/ _reference/gio/ |
| - mv _build/docs/reference/gio/gio-unix/ _reference/gio-unix/ |
| - mv _build/docs/reference/girepository/girepository/ _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 |
| - tar -c -J -f "gmodule-docs-$CI_COMMIT_TAG.tar.xz" -C _build/docs/reference/gmodule gmodule |
| - tar -c -J -f "gobject-docs-$CI_COMMIT_TAG.tar.xz" -C _build/docs/reference/gobject gobject |
| - tar -c -J -f "gio-docs-$CI_COMMIT_TAG.tar.xz" -C _build/docs/reference/gio gio |
| - tar -c -J -f "girepository-docs-$CI_COMMIT_TAG.tar.xz" -C _build/docs/reference/girepository girepository |
| 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 |