# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0 filetype=yaml: # # This is a bit complicated for two reasons: # - we really want to run dnf/apt/... only once, updating on the test runner for # each job takes forever. So we create a container image for each distribution # tested, then run the tests on this container image. # # Creating a container image is time-consuming, so we only do so for pushes to # libinput directly (not merge requests) and if the current image is 'old'. # # - GitLab only allows one script: set per job but we have a bunch of commands # we need to re-run for each build (meson && ninja && etc). YAML cannot merge # arrays templates so we're screwed. # # So instead we use a default_build template and override everything with # variables. The only two variables that matter: # MESON_ARGS=-Denable-something=true # NINJA_ARGS=dist ... to run 'ninja -C builddir dist' # Note that you cannot use scripts: in any target if you expect default_build # to work. # # # All jobs must follow the naming scheme of # :@activity: # e.g. fedora:31@build-default .templates_sha: &template_sha 8410d3382c4ba5e83da76a027cb332169f2a95ad # see https://docs.gitlab.com/ee/ci/yaml/#includefile include: # Alpine container builder template - project: 'wayland/ci-templates' ref: *template_sha file: '/templates/alpine.yml' # Arch container builder template - project: 'wayland/ci-templates' ref: *template_sha file: '/templates/arch.yml' # Fedora container builder template - project: 'wayland/ci-templates' ref: *template_sha file: '/templates/fedora.yml' # Ubuntu container builder template - project: 'wayland/ci-templates' ref: *template_sha file: '/templates/ubuntu.yml' stages: - prep # prep work like rebuilding the container images if there is a change - build # for actually building and testing things in a container - VM # for running the test suite in a VM - valgrind # for running the test suite under valgrind in a VM - distro # distribs test - deploy # trigger wayland's website generation - container_clean # clean up unused container images variables: ############################################################################### # This is the list of packages required to build libinput with the default # # configuration. # # # # Run dnf install/apt-get install/.. with the list of packages for your # # distribution # # # # See the documentation here: # # https://wayland.freedesktop.org/libinput/doc/latest/building_libinput.html # ############################################################################### FEDORA_RPMS: 'git gcc gcc-c++ pkgconf-pkg-config meson check-devel libudev-devel libevdev-devel doxygen graphviz python3-sphinx python3-recommonmark python3-sphinx_rtd_theme libwacom-devel cairo-devel gtk3-devel glib2-devel mtdev-devel diffutils' FEDORA_QEMU_RPMS: 'git gcc gcc-c++ pkgconf-pkg-config meson check-devel libudev-devel libevdev-devel doxygen graphviz python3-sphinx python3-recommonmark python3-sphinx_rtd_theme libwacom-devel cairo-devel gtk3-devel glib2-devel mtdev-devel diffutils valgrind' UBUNTU_CUSTOM_DEBS: 'git gcc g++ pkg-config meson check libudev-dev libevdev-dev doxygen graphviz python3-sphinx python3-recommonmark python3-sphinx-rtd-theme libwacom-dev libcairo2-dev libgtk-3-dev libglib2.0-dev libmtdev-dev' ARCH_PKGS: 'git gcc pkgconfig meson check libsystemd libevdev doxygen graphviz python-sphinx python-recommonmark python-sphinx_rtd_theme libwacom gtk3 mtdev diffutils' FREEBSD_BUILD_PKGS: 'meson' FREEBSD_PKGS: 'libepoll-shim libudev-devd libevdev libwacom gtk3 libmtdev ' ALPINE_PKGS: 'git gcc build-base pkgconfig meson check-dev eudev-dev libevdev-dev libwacom-dev cairo-dev gtk+3.0-dev mtdev-dev bash' ############################ end of package lists ############################# # these tags should be updated each time the list of packages is updated # changing these will force rebuilding the associated image # Note: these tags have no meaning and are not tied to a particular # libinput version FEDORA_TAG: '2019-12-24.0' UBUNTU_TAG: '2019-12-24.0' ARCH_TAG: '2019-12-24.0' ALPINE_TAG: '2019-12-24.0' FREEBSD_TAG: '2019-12-24.0' QEMU_TAG: 'qemu-vm-2020-02-24.0' UBUNTU_EXEC: "bash .gitlab-ci/ubuntu_install.sh $UBUNTU_CUSTOM_DEBS" UPSTREAM_REPO: libinput/libinput BUILDAH_IMAGE: $CI_REGISTRY/wayland/ci-templates/buildah:latest FEDORA_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FEDORA_VERSION:$FEDORA_TAG UBUNTU_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/ubuntu/$UBUNTU_VERSION:$UBUNTU_TAG ARCH_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/arch/$ARCH_VERSION:$ARCH_TAG ALPINE_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/alpine/$ALPINE_VERSION:$ALPINE_TAG FREEBSD_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/freebsd/11.2:$FREEBSD_TAG QEMU_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FEDORA_VERSION:$QEMU_TAG MESON_BUILDDIR: "build dir" NINJA_ARGS: '' MESON_ARGS: '' MESON_TEST_ARGS: '--no-suite=hardware' # udev isn't available/working properly in the containers UDEV_NOT_AVAILABLE: 1 GIT_DEPTH: 1 .policy: retry: max: 2 when: - runner_system_failure - stuck_or_timeout_failure # cancel run when a newer version is pushed to the branch interruptible: true .default_artifacts: artifacts: name: "meson-logs-$CI_JOB_NAME" when: always expire_in: 1 week paths: - $MESON_BUILDDIR/meson-logs reports: junit: $MESON_BUILDDIR/junit-*.xml ################################################################# # # # prep stage # # # ################################################################# # Re-generate the CI script and make sure it's the one currently checked in # If this job fails, re-generate the gitlab-ci.yml script, see # $SRCDIR/.gitlab-ci/generate-gitlab-ci.py # check-ci-script: image: golang:alpine stage: prep before_script: - apk add python3 git - pip3 install --user jinja2 script: - python3 ./.gitlab-ci/generate-gitlab-ci.py - git diff --exit-code && exit 0 || true - echo "Committed gitlab-ci.yml differs from generated gitlab-ci.yml. Please verify" - exit 1 # # Verify that commit messages are as expected, signed-off, etc. # check-commit: image: golang:alpine stage: prep before_script: - apk add python3 git script: - pip3 install GitPython - pip3 install pytest - | pytest --junitxml=results.xml \ --tb=line \ --assert=plain \ ./.gitlab-ci/check-commit.py except: - master@libinput/libinput variables: GIT_DEPTH: 100 artifacts: reports: junit: results.xml # # This stage will recreate the container images only if the image # is too old or if it is missing some dependencies. # .pull_upstream_or_rebuild: before_script: # log in to the registry - podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY # get the full container image name (DISTRIB_VERSION still has indirections) - IMAGE=$(eval echo "$DISTRIB_FLAVOR/$DISTRIB_VERSION:$TAG") # force rebuild if schedule, reuse otherwise - if [[ $CI_PIPELINE_SOURCE == "schedule" ]] ; then touch .scheduled; fi # pull the latest upstream image if it exists - test -e .scheduled || skopeo copy --dest-creds $CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD docker://$CI_REGISTRY/$UPSTREAM_REPO/$IMAGE docker://$CI_REGISTRY_IMAGE/$IMAGE && exit 0 || true ; # check if our image is already in the current registry - test -e .scheduled || skopeo inspect docker://$CI_REGISTRY_IMAGE/$IMAGE > /dev/null && exit 0 || true ; fedora:30@qemu-prep: extends: - .fedora@qemu-build - .policy - .pull_upstream_or_rebuild stage: prep tags: - kvm variables: GIT_STRATEGY: none FEDORA_VERSION: 30 FEDORA_TAG: $QEMU_TAG FEDORA_RPMS: $FEDORA_QEMU_RPMS DISTRIB_FLAVOR: fedora DISTRIB_VERSION: $FEDORA_VERSION TAG: $QEMU_TAG allow_failure: true fedora:30@container-prep: extends: - .fedora@container-build - .policy - .pull_upstream_or_rebuild stage: prep variables: GIT_STRATEGY: none FEDORA_VERSION: '30' DISTRIB_FLAVOR: fedora DISTRIB_VERSION: $FEDORA_VERSION TAG: $FEDORA_TAG fedora:31@container-prep: extends: - .fedora@container-build - .policy - .pull_upstream_or_rebuild stage: prep variables: GIT_STRATEGY: none FEDORA_VERSION: '31' DISTRIB_FLAVOR: fedora DISTRIB_VERSION: $FEDORA_VERSION TAG: $FEDORA_TAG ubuntu:19.10@container-prep: extends: - .ubuntu@container-build - .policy - .pull_upstream_or_rebuild stage: prep variables: GIT_STRATEGY: none UBUNTU_VERSION: '19.10' DISTRIB_FLAVOR: ubuntu DISTRIB_VERSION: $UBUNTU_VERSION TAG: $UBUNTU_TAG ubuntu:19.04@container-prep: extends: - .ubuntu@container-build - .policy - .pull_upstream_or_rebuild stage: prep variables: GIT_STRATEGY: none UBUNTU_VERSION: '19.04' DISTRIB_FLAVOR: ubuntu DISTRIB_VERSION: $UBUNTU_VERSION TAG: $UBUNTU_TAG arch:rolling@container-prep: extends: - .arch@container-build - .policy - .pull_upstream_or_rebuild stage: prep variables: GIT_STRATEGY: none ARCH_VERSION: 'rolling' DISTRIB_FLAVOR: arch DISTRIB_VERSION: $ARCH_VERSION TAG: $ARCH_TAG alpine:latest@container-prep: extends: - .alpine@container-build - .policy - .pull_upstream_or_rebuild stage: prep variables: GIT_STRATEGY: none ALPINE_VERSION: 'latest' DISTRIB_FLAVOR: alpine DISTRIB_VERSION: $ALPINE_VERSION TAG: $ALPINE_TAG .freebsd@container-prep: extends: - .policy - .pull_upstream_or_rebuild stage: prep image: $BUILDAH_IMAGE script: - export BUILDAH_RUN="buildah run --isolation chroot" - export BUILDAH_COMMIT="buildah commit --format docker" - buildcntr=$(buildah from --quiet myfreeweb/freebsd-cross:latest) - $BUILDAH_RUN $buildcntr apk add --no-cache $FREEBSD_BUILD_PKGS - $BUILDAH_RUN $buildcntr pkg -r /freebsd update -f - $BUILDAH_RUN $buildcntr pkg -r /freebsd install -y $FREEBSD_PKGS - buildah config --workingdir /app $buildcntr # tag the current container - $BUILDAH_COMMIT $buildcntr $FREEBSD_CONTAINER_IMAGE # clean up the working container - buildah rm $buildcntr # push the container image to the libinput registry - podman push --quiet $FREEBSD_CONTAINER_IMAGE - skopeo copy --dest-creds $CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD docker://$FREEBSD_CONTAINER_IMAGE docker://$CI_REGISTRY_IMAGE/freebsd/$FREEBSD_VERSION:$CI_JOB_ID freebsd:11.2@container-prep: extends: - .freebsd@container-prep variables: GIT_STRATEGY: none FREEBSD_VERSION: "11.2" DISTRIB_FLAVOR: freebsd DISTRIB_VERSION: $FREEBSD_VERSION TAG: $FREEBSD_TAG ################################################################# # # # container clean stage # # run during the clean stage # # # ################################################################# # # This stage will look for the container images we currently have in # the registry and will remove any that are not tagged with the provided # $container_image:$tag # .container-clean: extends: - .policy stage: container_clean image: $BUILDAH_IMAGE script: # get the full container image name (CURRENT_CONTAINER_IMAGE still has indirections) - CONTAINER_IMAGE=$(eval echo "$CURRENT_CONTAINER_IMAGE") - GITLAB=$(echo $CI_PROJECT_URL | cut -f3 -d/) - REPOSITORY=$(echo $CONTAINER_IMAGE | cut -f2- -d/ | cut -f1 -d:) - IMAGE_PATH=$(echo $CONTAINER_IMAGE | cut -f1 -d:) - LATEST_TAG=$(echo $CONTAINER_IMAGE | cut -f2 -d:) # log in to the registry (read only) - podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY # get the r/w token from the settings to access the registry # # each developer needs to register a secret variable that contains # a personal token with api access. The token # - must be named PERSONAL_TOKEN_$USER (for example PERSONAL_TOKEN_bentiss) # - must be registered in the CI/CD Variables section as type file # - value must be a netrc file as a single-line string: # default login password # e.g. "default login bentiss password 1235abcde" - tokenname="PERSONAL_TOKEN_$GITLAB_USER_LOGIN" - netrcfile=$(eval echo "\$$tokenname") - if [[ ! -f "$netrcfile" ]]; then echo "No netrc file found or token is missing, skipping job" && false; fi # request a token for the registry API - REGISTRY_TOKEN=$(curl https://$GITLAB/jwt/auth --get --silent --show-error -d client_id=docker -d offline_token=true -d service=container_registry -d "scope=repository:$REPOSITORY:pull,*" --fail --netrc-file "$netrcfile" | sed -r 's/(\{"token":"|"\})//g') # get the digest of the latest image - LATEST_MANIFEST=$(skopeo inspect docker://$IMAGE_PATH:$LATEST_TAG | jq -r '.Digest') # get the list of tags - TAGS=$(skopeo inspect docker://$IMAGE_PATH:$LATEST_TAG | jq -r '.RepoTags[]') # FIXME: is the above command working properly? If not, use below: # - TAGS=$(curl -X GET -H "accept:application/vnd.docker.distribution.manifest.v2+json" # -H "authorization:Bearer $REGISTRY_TOKEN" # https://$CI_REGISTRY/v2/$REPOSITORY/tags/list | jq -r '.tags[]') # iterate over the tags - for tag in $TAGS; do MANIFEST=$(skopeo inspect docker://$IMAGE_PATH:$tag | jq -r '.Digest'); if test x"$MANIFEST" != x"$LATEST_MANIFEST"; then echo removing $tag as $MANIFEST; curl https://$CI_REGISTRY/v2/$REPOSITORY/manifests/$MANIFEST --silent -H "accept:application/vnd.docker.distribution.manifest.v2+json" -H "authorization:Bearer $REGISTRY_TOKEN" --fail --show-error -X DELETE || true ;fi ;done dependencies: [] allow_failure: true only: - schedules fedora:30@container-clean: extends: - .container-clean variables: GIT_STRATEGY: none FEDORA_VERSION: '30' CURRENT_CONTAINER_IMAGE: $FEDORA_CONTAINER_IMAGE fedora:31@container-clean: extends: - .container-clean variables: GIT_STRATEGY: none FEDORA_VERSION: '31' CURRENT_CONTAINER_IMAGE: $FEDORA_CONTAINER_IMAGE ubuntu:19.10@container-clean: extends: - .container-clean variables: GIT_STRATEGY: none UBUNTU_VERSION: '19.10' CURRENT_CONTAINER_IMAGE: $UBUNTU_CONTAINER_IMAGE ubuntu:19.04@container-clean: extends: - .container-clean variables: GIT_STRATEGY: none UBUNTU_VERSION: '19.04' CURRENT_CONTAINER_IMAGE: $UBUNTU_CONTAINER_IMAGE arch:rolling@container-clean: extends: - .container-clean variables: GIT_STRATEGY: none ARCH_VERSION: 'rolling' CURRENT_CONTAINER_IMAGE: $ARCH_CONTAINER_IMAGE alpine:latest@container-clean: extends: - .container-clean variables: GIT_STRATEGY: none ALPINE_VERSION: 'latest' CURRENT_CONTAINER_IMAGE: $ALPINE_CONTAINER_IMAGE freebsd:11.2@container-clean: extends: - .container-clean variables: GIT_STRATEGY: none CURRENT_CONTAINER_IMAGE: $FREEBSD_CONTAINER_IMAGE ################################################################# # # # build stage # # # ################################################################# .build@template: extends: - .policy - .default_artifacts stage: build script: - .gitlab-ci/meson-build.sh dependencies: [] # # Fedora # .check_tainted: &check_tainted | # make sure the kernel is not tainted if [[ "$(ssh localhost -p 5555 cat /proc/sys/kernel/tainted)" -gt 0 ]]; then echo tainted kernel ; exit 1 ; fi # Run in a test suite. Special variables: # - SUITES: the meson test suites to run, or # - SUITE_NAMES: all elements will be expanded to libinput-test-suite-$value # Set one or the other, not both. .fedora:30@test-suite-vm: extends: - .policy stage: VM image: $QEMU_CONTAINER_IMAGE tags: - kvm variables: FEDORA_VERSION: 30 MESON_BUILDDIR: build_dir # remove the global --no-suite=hardware MESON_TEST_ARGS: '' before_script: - if ! [[ -z $SUITE_NAMES ]]; then SUITES=$(echo $SUITE_NAMES | sed 's/\([^ ]*\)/libinput-test-suite-\1/g'); fi - echo "Testing $SUITES" script: # start our vm, no args required - /app/start_vm.sh || (echo "Error - Failed to start the VM." && exit 1) - *check_tainted - "scp -P 5555 -r $PWD localhost:" - echo "CI_JOB_ID=\"$CI_JOB_ID\"" > sshenv - echo "CI_JOB_NAME=\"$CI_JOB_NAME\"" >> sshenv - echo "MESON_ARGS=\"$MESON_ARGS\"" >> sshenv - echo "MESON_BUILDDIR=\"$MESON_BUILDDIR\"" >> sshenv - echo "MESON_TEST_ARGS=\"$MESON_TEST_ARGS $SUITES\"" >> sshenv - echo "NINJA_ARGS=\"$NINJA_ARGS\"" >> sshenv - "scp -P 5555 sshenv localhost:~/$CI_PROJECT_NAME/.meson_environment" - ssh localhost -p 5555 "cd $CI_PROJECT_NAME ; .gitlab-ci/meson-build.sh" && touch .success || true # no matter the results of the tests, we want to fetch the logs - scp -P 5555 -r localhost:$CI_PROJECT_NAME/$MESON_BUILDDIR . - *check_tainted - ssh localhost -p 5555 halt || true - sleep 2 - pkill qemu || true - if [[ ! -e .success ]] ; then exit 1 ; fi artifacts: name: "qemu-meson-logs-$CI_JOB_NAME" when: always expire_in: 1 week paths: - $MESON_BUILDDIR/meson-logs - console.out reports: junit: $MESON_BUILDDIR/junit-*.xml allow_failure: true retry: max: 2 when: script_failure needs: ['fedora:30@qemu-prep'] fedora:30@vm-touchpad: extends: - .fedora:30@test-suite-vm variables: SUITE_NAMES: 'touchpad' fedora:30@vm-touchpad-no-libwacom: extends: - fedora:30@vm-touchpad variables: MESON_ARGS: '-Dlibwacom=false' fedora:30@vm-tap: extends: - .fedora:30@test-suite-vm variables: SUITE_NAMES: 'tap' fedora:30@vm-tap-no-libwacom: extends: - fedora:30@vm-tap variables: MESON_ARGS: '-Dlibwacom=false' fedora:30@vm-tablet: extends: - .fedora:30@test-suite-vm variables: SUITE_NAMES: 'tablet' fedora:30@vm-tablet-no-libwacom: extends: - fedora:30@vm-tablet variables: MESON_ARGS: '-Dlibwacom=false' fedora:30@vm-gestures-device: extends: - .fedora:30@test-suite-vm variables: SUITE_NAMES: 'gestures device' fedora:30@vm-gestures-device-no-libwacom: extends: - fedora:30@vm-gestures-device variables: MESON_ARGS: '-Dlibwacom=false' fedora:30@vm-others: extends: - .fedora:30@test-suite-vm variables: SUITE_NAMES: 'context config misc events totem udev lid log timer tablet-mode quirks trackball pad path keyboard switch touch trackpoint' fedora:30@vm-others-no-libwacom: extends: - fedora:30@vm-others variables: MESON_ARGS: '-Dlibwacom=false' fedora:30@vm-pointer: extends: - .fedora:30@test-suite-vm variables: SUITE_NAMES: 'pointer' fedora:30@vm-pointer-no-libwacom: extends: - fedora:30@vm-pointer variables: MESON_ARGS: '-Dlibwacom=false' fedora:30@valgrind-touchpad: stage: valgrind extends: - fedora:30@vm-touchpad variables: MESON_TEST_ARGS: '--setup=valgrind' fedora:30@valgrind-tap: stage: valgrind extends: - fedora:30@vm-tap variables: MESON_TEST_ARGS: '--setup=valgrind' fedora:30@valgrind-tablet: stage: valgrind extends: - fedora:30@vm-tablet variables: MESON_TEST_ARGS: '--setup=valgrind' fedora:30@valgrind-gestures-device: stage: valgrind extends: - fedora:30@vm-gestures-device variables: MESON_TEST_ARGS: '--setup=valgrind' fedora:30@valgrind-others: stage: valgrind extends: - fedora:30@vm-others variables: MESON_TEST_ARGS: '--setup=valgrind' fedora:30@valgrind-pointer: stage: valgrind extends: - fedora:30@vm-pointer variables: MESON_TEST_ARGS: '--setup=valgrind' .fedora-build@template: extends: - .build@template image: $FEDORA_CONTAINER_IMAGE variables: FEDORA_VERSION: 30 needs: ['fedora:30@container-prep'] default-build-release@fedora:30: stage: distro extends: - .fedora-build@template variables: MESON_ARGS: "-Dbuildtype=release" CFLAGS: "-Werror" scan-build@fedora:30: extends: - .fedora-build@template variables: NINJA_ARGS: scan-build MESON_TEST_ARGS: '' before_script: - dnf install -y clang-analyzer findutils after_script: - test ! -d "$MESON_BUILDDIR"/meson-logs/scanbuild && exit 0 - test $(find "$MESON_BUILDDIR"/meson-logs/scanbuild -maxdepth 0 ! -empty -exec echo "not empty" \; | wc -l) -eq 0 && exit 0 - echo "Check scan-build results" - /bin/false # Below jobs are build option combinations. We only # run them on one image, they shouldn't fail on one distro # when they succeed on another. build-no-libwacom@fedora:30: extends: - .fedora-build@template variables: MESON_ARGS: "-Dlibwacom=false" build-no-libwacom-nodeps@fedora:30: extends: - .fedora-build@template variables: MESON_ARGS: "-Dlibwacom=false" before_script: - dnf remove -y libwacom libwacom-devel build-no-docs@fedora:30: extends: - .fedora-build@template variables: MESON_ARGS: "-Ddocumentation=false" build-no-docs-nodeps@fedora:30: extends: - .fedora-build@template variables: MESON_ARGS: "-Ddocumentation=false" before_script: - dnf remove -y doxygen graphviz build-no-debuggui@fedora:30: extends: - .fedora-build@template variables: MESON_ARGS: "-Ddebug-gui=false" build-no-debuggui-nodeps@fedora:30: extends: - .fedora-build@template variables: MESON_ARGS: "-Ddebug-gui=false" before_script: - dnf remove -y gtk3-devel build-no-tests@fedora:30: extends: - .fedora-build@template variables: MESON_ARGS: "-Dtests=false" build-no-tests-nodeps@fedora:30: extends: - .fedora-build@template variables: MESON_ARGS: "-Dtests=false" before_script: - dnf remove -y check-devel valgrind@fedora:30: extends: - .fedora-build@template variables: MESON_TEST_ARGS: '--suite=valgrind --no-suite=hardware --setup=valgrind' before_script: - dnf install -y valgrind # Python checks, only run on Fedora usr-bin-env-python@fedora:30: extends: - .fedora-build@template script: - | if git grep -l '^#!/usr/bin/python'; then echo "Use '/usr/bin/env python3' in the above files"; /bin/false fi flake8@fedora:30: extends: - .fedora-build@template before_script: - dnf install -y python3-flake8 script: - flake8-3 --ignore=W501,E501,W504 $(git grep -l '^#!/usr/bin/env python3') ################################################################# # # # distro stage # # # ################################################################# fedora:30@default-build: stage: distro extends: - .build@template image: $FEDORA_CONTAINER_IMAGE variables: FEDORA_VERSION: '30' needs: ['fedora:30@container-prep'] fedora:31@default-build: stage: distro extends: - .build@template image: $FEDORA_CONTAINER_IMAGE variables: FEDORA_VERSION: '31' needs: ['fedora:31@container-prep'] ubuntu:19.10@default-build: stage: distro extends: - .build@template image: $UBUNTU_CONTAINER_IMAGE variables: UBUNTU_VERSION: '19.10' needs: ['ubuntu:19.10@container-prep'] ubuntu:19.04@default-build: stage: distro extends: - .build@template image: $UBUNTU_CONTAINER_IMAGE variables: UBUNTU_VERSION: '19.04' needs: ['ubuntu:19.04@container-prep'] arch:rolling@default-build: stage: distro extends: - .build@template image: $ARCH_CONTAINER_IMAGE variables: ARCH_VERSION: 'rolling' needs: ['arch:rolling@container-prep'] alpine:latest@default-build: stage: distro extends: - .build@template image: $ALPINE_CONTAINER_IMAGE variables: ALPINE_VERSION: 'latest' MESON_ARGS: '-Ddocumentation=false' # alpine does not have python-recommonmark MESON_TEST_ARGS: '' # litest-selftest fails on musl needs: ['alpine:latest@container-prep'] # # FreeBSD # .freebsd@template: stage: distro extends: - .build@template image: $FREEBSD_CONTAINER_IMAGE variables: MESON_ARGS: '--cross-file freebsd -Ddocumentation=false -Dtests=false -Depoll-dir=/freebsd/usr/local/' # Can't run FreeBSD tests on Linux machine, so MESON_TEST_ARGS shouldn't be "test" MESON_TEST_ARGS: '' freebsd:11.2@default-build: extends: - .freebsd@template needs: ['freebsd:11.2@container-prep'] # # deploy # wayland-web: image: $BUILDAH_IMAGE stage: deploy script: # Requirements: # - variable WAYLAND_WEB_TOKEN defined as type File in libinput's CI/CD settings # - content of that file is the token value, as generated by the Pipeline Triggers # of the wayland.freedesktop.org project. - curl --request POST --form "token=<$WAYLAND_WEB_TOKEN" --form ref=master https://gitlab.freedesktop.org/api/v4/projects/wayland${SLASH}wayland${DOT}freedesktop${DOT}org/trigger/pipeline except: refs: - schedules only: refs: - master variables: - $CI_PROJECT_PATH == "libinput/libinput" dependencies: [] variables: DOT: "%2E" SLASH: "%2F"