# -*- indent-tabs-mode: nil -*- include: - template: 'Workflows/Branch-Pipelines.gitlab-ci.yml' - project: 'freedesktop/ci-templates' ref: '88ed1082df2af02090916566742543f1dbaee988' file: '/templates/fedora.yml' # From https://gitlab.freedesktop.org/freedesktop/ci-templates/-/blob/master/src/gitlab-ci.tmpl workflow: rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS' when: never - if: $CI_COMMIT_BRANCH variables: FDO_UPSTREAM_REPO: 'cairo/cairo' FDO_DISTRIBUTION_VERSION: '34' FDO_DISTRIBUTION_TAG: '2021-09-20.0' # TODO: should probably get its own image at some point instead of reusing the GStreamer one # See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/.gitlab-image-tags.yml for latest WINDOWS_IMAGE: "registry.freedesktop.org/gstreamer/gstreamer/amd64/windows:2023-04-03.0-main" DEFAULT_MESON_ARGS: > --default-library=both stages: - prep - build - test # Global CI policy: This can be used to configure global behaviour our our jobs default: retry: max: 2 when: - 'runner_system_failure' - 'stuck_or_timeout_failure' - 'scheduler_failure' - 'api_failure' interruptible: true .ccache_setup: variables: CCACHE_BASEDIR: "$CI_PROJECT_DIR" CCACHE_DIR: "$CI_PROJECT_DIR/ccache" CC: "ccache gcc" CXX: "ccache g++" before_script: - mkdir -p ccache - ccache --show-stats cache: # Each job will have it's own cache key: "$CI_JOB_NAME" paths: - ccache/ fedora image: extends: - '.fdo.container-build@fedora' stage: 'prep' variables: FDO_DISTRIBUTION_PACKAGES: > meson ninja-build ccache gcc g++ zlib-devel expat-devel libpng-devel fontconfig-devel freetype-devel libX11-devel libXrender-devel glib2-devel librsvg2-devel gtk2-devel poppler-glib-devel libspectre-devel ghostscript pixman-devel systemd-devel systemd-udev expat-devel autoconf automake make which libtool diffutils xorg-x11-server-Xvfb dejavu-sans-fonts dejavu-sans-mono-fonts dejavu-serif-fonts google-noto-emoji-color-fonts fonttools .test fedora meson: dependencies: - 'fedora meson build' needs: - 'fedora meson build' extends: - '.fdo.distribution-image@fedora' - '.ccache_setup' stage: 'test' artifacts: when: 'always' expire_in: "7 days" paths: - builddir/meson-logs/* - builddir/test/*.log - builddir/test/pdiff/*.log - builddir/test/output exclude: - "builddir/test/**/*.cs" - "builddir/test/**/*.trace" fedora meson build check-refs.sh: extends: '.test fedora meson' script: # Check for duplicate reference images - ./test/check-refs.sh "$(pwd)/builddir/test/pdiff/perceptualdiff" test fedora meson pdf: extends: '.test fedora meson' script: - export CAIRO_TEST_IGNORE_pdf_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-pdf-argb32.txt) - export CAIRO_TEST_IGNORE_pdf_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-pdf-rgb24.txt) - export CAIRO_TEST_TARGET=pdf - export srcdir=../../test - (cd builddir/test && xvfb-run ./cairo-test-suite) test fedora meson ps2: extends: '.test fedora meson' script: - export CAIRO_TEST_IGNORE_ps2_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-ps2-argb32.txt) - export CAIRO_TEST_IGNORE_ps2_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-ps2-rgb24.txt) - export CAIRO_TEST_TARGET=ps2 - export CAIRO_TEST_UGLY_HACK_TO_IGNORE_PS_FAILURES=1 - export srcdir=../../test - (cd builddir/test && xvfb-run ./cairo-test-suite) test fedora meson ps3: extends: '.test fedora meson' script: - export CAIRO_TEST_IGNORE_ps3_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-ps3-argb32.txt) - export CAIRO_TEST_IGNORE_ps3_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-ps3-rgb24.txt) - export CAIRO_TEST_TARGET=ps3 - export CAIRO_TEST_UGLY_HACK_TO_IGNORE_PS_FAILURES=1 - export srcdir=../../test - (cd builddir/test && xvfb-run ./cairo-test-suite) test fedora meson script: extends: '.test fedora meson' script: - export CAIRO_TEST_UGLY_HACK_TO_SOMETIMES_IGNORE_SCRIPT_XCB_HUGE_IMAGE_SHM=1 - export CAIRO_TEST_IGNORE_script_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-script-argb32.txt) - export CAIRO_TEST_TARGET=script - export srcdir=../../test - (cd builddir/test && xvfb-run ./cairo-test-suite) test fedora meson image: extends: '.test fedora meson' script: - export CAIRO_TEST_IGNORE_image_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-image-argb32.txt) - export CAIRO_TEST_IGNORE_image_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-image-rgb24.txt) - export CAIRO_TEST_IGNORE_image16_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-image16-rgb24.txt) - export CAIRO_TEST_TARGET=image,image16 - export srcdir=../../test - (cd builddir/test && xvfb-run ./cairo-test-suite) test fedora meson recording: extends: '.test fedora meson' script: - export CAIRO_TEST_IGNORE_recording_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-recording-argb32.txt) - export CAIRO_TEST_IGNORE_recording_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-recording-rgb24.txt) - export CAIRO_TEST_TARGET=recording - export srcdir=../../test - (cd builddir/test && xvfb-run ./cairo-test-suite) test fedora meson svg: extends: '.test fedora meson' script: - export CAIRO_TEST_IGNORE_svg11_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-svg11-argb32.txt) - export CAIRO_TEST_IGNORE_svg11_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-svg11-rgb24.txt) - export CAIRO_TEST_TARGET=svg11 - export CAIRO_BOILERPLATE_OPEN_NO_DAEMON=1 - export CAIRO_BOILERPLATE_DO_NOT_CRASH_ON_ANY2PPM_ERROR=1 - export ANY2PPM="timeout 3m ./any2ppm" - ulimit -S -s 131072 - export srcdir=../../test - (cd builddir/test && xvfb-run ./cairo-test-suite) test fedora meson xcb: extends: '.test fedora meson' script: - export CAIRO_TEST_IGNORE_xcb_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-xcb-argb32.txt) - export CAIRO_TEST_IGNORE_xcb_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xcb-rgb24.txt) - export CAIRO_TEST_IGNORE_xcb_window_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xcb-window-rgb24.txt) - export CAIRO_TEST_IGNORE_xcb_window__rgb24=$(tr '\n' ',' < '.gitlab-ci/ignore-xcb-window&-rgb24.txt') - export CAIRO_TEST_IGNORE_xcb_render_0_0_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-xcb-render-0-0-argb32.txt) - export CAIRO_TEST_IGNORE_xcb_render_0_0_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xcb-render-0-0-rgb24.txt) - export CAIRO_TEST_IGNORE_xcb_fallback_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xcb-fallback-rgb24.txt) - export CAIRO_TEST_TARGET="xcb,xcb-window,xcb-window&,xcb-render-0_0,xcb-fallback" - export srcdir=../../test - (cd builddir/test && xvfb-run ./cairo-test-suite) test fedora meson xlib: extends: '.test fedora meson' script: - export CAIRO_TEST_IGNORE_xlib_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-xlib-argb32.txt) - export CAIRO_TEST_IGNORE_xlib_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xlib-rgb24.txt) - export CAIRO_TEST_IGNORE_xlib_window_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xlib-window-rgb24.txt) - export CAIRO_TEST_IGNORE_xlib_render_0_0_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xlib-render-0-0-rgb24.txt) - export CAIRO_TEST_IGNORE_xlib_fallback_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xlib-fallback-rgb24.txt) - export CAIRO_TEST_TARGET="xlib,xlib-window,xlib-render-0_0,xlib-fallback" - export srcdir=../../test - (cd builddir/test && xvfb-run ./cairo-test-suite) fedora meson build: extends: - '.fdo.distribution-image@fedora' - '.ccache_setup' stage: 'build' variables: MESON_ARGS: > ${DEFAULT_MESON_ARGS} script: - export CFLAGS="-Werror -Wno-error=deprecated-declarations" - meson builddir ${MESON_ARGS} - ninja -C builddir # Run test scripts - mkdir builddir/src/.libs - touch builddir/src/.libs/libfoo.so # Run all the tests, except for the big test executable which # gets run separately - meson test -C builddir --no-suite=slow --print-errorlogs # TODO: These aren't set up as Meson tests yet - (cd doc/public && bash "check-doc-syntax.sh") # FIXME: The following line really needs gtk-doc to run first - (cd doc/public && DOC_MODULE=cairo bash "check-doc-coverage.sh") - ninja -C builddir install artifacts: expire_in: "7 days" when: "always" paths: - "*" meson mingw-32 build: extends: - '.fdo.distribution-image@fedora' stage: 'build' before_script: - dnf install -y 'dnf-command(builddep)' - dnf builddep -y mingw32-cairo script: - mkdir builddir - cd builddir - mingw32-meson --default-library=both - ninja install artifacts: expire_in: "7 days" when: "always" paths: - 'builddir/meson-logs/' meson mingw-64 build: extends: - '.fdo.distribution-image@fedora' stage: 'build' before_script: - dnf install -y 'dnf-command(builddep)' - dnf builddep -y mingw64-cairo script: - mkdir builddir - cd builddir - mingw64-meson --default-library=both - ninja install artifacts: expire_in: "7 days" when: "always" paths: - 'builddir/meson-logs/' # Based on https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/.gitlab-ci.yml (.build windows) .build meson windows: image: $WINDOWS_IMAGE stage: 'build' tags: - 'docker' - 'windows' - '2022' timeout: '30min' variables: MESON_ARGS: > ${DEFAULT_MESON_ARGS} -Dfontconfig=enabled -Dfreetype=enabled -Dglib=enabled -Dzlib=enabled ${EXTRA_MESON_ARGS} before_script: # Make sure meson is up to date, so we don't need to rebuild the image with each release # FIXME: don't update meson version for now, since there seems to be a bug # in newer meson versions (0.63.3 at the time of writing) where it can't # find some hash file and then meson subprojects update fails) # - pip3 install -U meson script: # Make sure powershell exists on errors # https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-6 - $ErrorActionPreference = "Stop" # Copy GLib from existing subproject cache to avoid downloading it # FIXME: no longer cached in GStreamer image, using tarball for now #- cd $env:CI_PROJECT_DIR #- cp -r C:/subprojects/glib subprojects/ # For some reason, options are separated by newline instead of space, so we # have to replace them first. - $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ") # Gitlab executes PowerShell in docker, but VsDevCmd.bat is a batch script. # Environment variables substitutions is done by PowerShell before calling # cmd.exe, that's why we use $env:FOO instead of %FOO% - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH && meson subprojects update --reset && meson build $env:MESON_ARGS && ninja -C build" meson vs2019 shared amd64: extends: '.build meson windows' variables: ARCH: 'amd64' EXTRA_MESON_ARGS: '--default-library=shared' meson vs2019 static amd64: extends: '.build meson windows' variables: ARCH: 'amd64' EXTRA_MESON_ARGS: '--default-library=static' meson vs2019 shared x86: extends: '.build meson windows' variables: ARCH: 'x86' EXTRA_MESON_ARGS: '--default-library=shared' meson android arm64 fedora: # TODO: should probably build our own image here some day # See https://gitlab.freedesktop.org/gstreamer/gstreamer/container_registry/7689 for current images image: 'registry.freedesktop.org/gstreamer/gstreamer/amd64/android-fedora:2020-10-22.0-master' stage: 'build' artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" expire_in: '5 days' when: 'always' paths: - "build/meson-logs/*.txt" before_script: - dnf install -y python3-pip gcc ninja-build gperf - pip3 install --user meson script: - export PATH="$HOME/.local/bin:$PATH" - | cat > android-cross-file.txt <