# #
########################################
-.templates_sha: &template_sha df52af2195b052325daf5d715c88be90f8ec7d86 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
+.templates_sha: &template_sha ca99d9418390fb5faaa7f2407b94c733d7ec6a37 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
include:
# Alpine container builder template
- - project: 'wayland/ci-templates'
+ - project: 'freedesktop/ci-templates'
ref: *template_sha
file: '/templates/alpine.yml'
# Arch container builder template
- - project: 'wayland/ci-templates'
+ - project: 'freedesktop/ci-templates'
ref: *template_sha
file: '/templates/arch.yml'
# Centos container builder template
- - project: 'wayland/ci-templates'
+ - project: 'freedesktop/ci-templates'
ref: *template_sha
file: '/templates/centos.yml'
# Debian container builder template
- - project: 'wayland/ci-templates'
+ - project: 'freedesktop/ci-templates'
ref: *template_sha
file: '/templates/debian.yml'
# Fedora container builder template
- - project: 'wayland/ci-templates'
+ - project: 'freedesktop/ci-templates'
ref: *template_sha
file: '/templates/fedora.yml'
# Ubuntu container builder template
- - project: 'wayland/ci-templates'
+ - project: 'freedesktop/ci-templates'
ref: *template_sha
file: '/templates/ubuntu.yml'
- meson # distribution builds with meson
- tarballs # tarball builds
- container_clean # clean up unused container images
+ - merge-check # check for a merge request
variables:
# The upstrem repository we will check for images
script:
- .gitlab-ci/meson-build.sh
-# Base image for a given distribution, provides
-# - the image of that distribution
-# - DISTRO_CONTAINER_IMAGE for any manipulation the job needs to be
-.distribution_image:
- image: $CI_REGISTRY_IMAGE/$DISTRIB_NAME/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
- variables:
- DISTRO_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/$DISTRIB_NAME/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
-
.fedora:30:
- extends: .distribution_image
+ extends: .fdo.distribution-image@fedora
variables:
- DISTRIB_NAME: 'fedora'
- FDO_DISTRIBUTION_TAG: '2020-03-06.0'
+ FDO_DISTRIBUTION_TAG: '2020-03-17.0'
FDO_DISTRIBUTION_VERSION: '30'
.fedora:31:
- extends: .distribution_image
+ extends: .fdo.distribution-image@fedora
variables:
- DISTRIB_NAME: 'fedora'
- FDO_DISTRIBUTION_TAG: '2020-03-06.0'
+ FDO_DISTRIBUTION_TAG: '2020-03-17.0'
FDO_DISTRIBUTION_VERSION: '31'
-.ubuntu:19.10:
- extends: .distribution_image
+.ubuntu:20.04:
+ extends: .fdo.distribution-image@ubuntu
variables:
- DISTRIB_NAME: 'ubuntu'
- FDO_DISTRIBUTION_TAG: '2020-03-06.0'
- FDO_DISTRIBUTION_VERSION: '19.10'
+ FDO_DISTRIBUTION_TAG: '2020-03-17.0'
+ FDO_DISTRIBUTION_VERSION: '20.04'
-.ubuntu:19.04:
- extends: .distribution_image
+.ubuntu:19.10:
+ extends: .fdo.distribution-image@ubuntu
variables:
- DISTRIB_NAME: 'ubuntu'
- FDO_DISTRIBUTION_TAG: '2020-03-06.0'
- FDO_DISTRIBUTION_VERSION: '19.04'
+ FDO_DISTRIBUTION_TAG: '2020-03-17.0'
+ FDO_DISTRIBUTION_VERSION: '19.10'
.debian:stable:
- extends: .distribution_image
+ extends: .fdo.distribution-image@debian
variables:
- DISTRIB_NAME: 'debian'
- FDO_DISTRIBUTION_TAG: '2020-03-06.0'
+ FDO_DISTRIBUTION_TAG: '2020-03-17.0'
FDO_DISTRIBUTION_VERSION: 'stable'
.debian:sid:
- extends: .distribution_image
+ extends: .fdo.distribution-image@debian
variables:
- DISTRIB_NAME: 'debian'
- FDO_DISTRIBUTION_TAG: '2020-03-06.0'
+ FDO_DISTRIBUTION_TAG: '2020-03-17.0'
FDO_DISTRIBUTION_VERSION: 'sid'
.centos:7:
- extends: .distribution_image
+ extends: .fdo.distribution-image@centos
variables:
- DISTRIB_NAME: 'centos'
- FDO_DISTRIBUTION_TAG: '2020-03-06.0'
+ FDO_DISTRIBUTION_TAG: '2020-03-17.0'
FDO_DISTRIBUTION_VERSION: '7'
.centos:8:
- extends: .distribution_image
+ extends: .fdo.distribution-image@centos
variables:
- DISTRIB_NAME: 'centos'
- FDO_DISTRIBUTION_TAG: '2020-03-06.0'
+ FDO_DISTRIBUTION_TAG: '2020-03-17.0'
FDO_DISTRIBUTION_VERSION: '8'
.arch:rolling:
- extends: .distribution_image
+ extends: .fdo.distribution-image@arch
variables:
- DISTRIB_NAME: 'arch'
- FDO_DISTRIBUTION_TAG: '2020-03-06.0'
+ FDO_DISTRIBUTION_TAG: '2020-03-17.0'
FDO_DISTRIBUTION_VERSION: 'rolling'
.alpine:latest:
- extends: .distribution_image
+ extends: .fdo.distribution-image@alpine
variables:
- DISTRIB_NAME: 'alpine'
- FDO_DISTRIBUTION_TAG: '2020-03-06.0'
+ FDO_DISTRIBUTION_TAG: '2020-03-17.0'
FDO_DISTRIBUTION_VERSION: 'latest'
image: golang:alpine
stage: prep
before_script:
- - apk add python3 git
- - pip3 install --user jinja2 PyYAML
+ - apk add python3 py-pip git
+ - pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
script:
- - python3 ./.gitlab-ci/generate-gitlab-ci.py
+ - ci-fairy generate-template
- 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
+ - apk add python3 py-pip git
+ - pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
script:
- - pip3 install GitPython
- - pip3 install pytest
- - |
- pytest --junitxml=results.xml \
- --tb=line \
- --assert=plain \
- ./.gitlab-ci/check-commit.py
+ - ci-fairy check-commits --signed-off-by --junit-xml=results.xml
except:
- master@libevdev/libevdev
variables:
GIT_DEPTH: 100
artifacts:
- expire_in: 1 week
- when: on_failure
- paths:
- - results.xml
reports:
junit: results.xml
-.pull_upstream_or_rebuild:
+#
+# Verify that the merge request has the allow-collaboration checkbox ticked
+#
+
+check-merge-request:
+ image: golang:alpine
+ stage: merge-check
before_script:
- # log in to the registry
- - podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+ - apk add python3 py-pip git
+ - pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
+ script:
+ - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
+ artifacts:
+ when: on_failure
+ reports:
+ junit: results.xml
+ allow_failure: true
- # get the full container image name (FDO_DISTRIBUTION_VERSION still has indirections)
- - IMAGE=$(eval echo "$DISTRIB_NAME/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG")
- - |
- # force rebuild if schedule, reuse otherwise
- if [[ $CI_PIPELINE_SOURCE != "schedule" ]] ;
- then
- # pull the latest upstream image if it exists
- skopeo copy docker://$CI_REGISTRY/$FDO_UPSTREAM_REPO/$IMAGE \
- docker://$CI_REGISTRY_IMAGE/$IMAGE && exit 0 || true ;
+.fedora.packages:
+ variables:
+ FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer'
- # check if our image is already in the current registry
- skopeo inspect docker://$CI_REGISTRY_IMAGE/$IMAGE > /dev/null && exit 0 || true ;
- fi
+.ubuntu.packages:
+ variables:
+ FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkg-config python3 check valgrind binutils doxygen xz-utils'
+
+.debian.packages:
+ variables:
+ FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkg-config python3 check valgrind binutils doxygen xz-utils'
+
+.centos.packages:
+ variables:
+ FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils xz'
+
+.arch.packages:
+ variables:
+ FDO_DISTRIBUTION_PACKAGES: 'git gcc meson automake autoconf libtool make pkgconfig python3 check valgrind binutils doxygen'
+.alpine.packages:
+ variables:
+ FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkgconfig python3 check-dev valgrind binutils doxygen xz linux-headers'
+
+
+# Pulls in the qemu container from upstream or rebuilds it if missing
.fedora:30@qemu-prep:
extends:
- .fedora:30
+ - .fedora.packages
- .fdo.qemu-build@fedora
- - .pull_upstream_or_rebuild
stage: prep
tags:
- kvm
variables:
GIT_STRATEGY: none
- FDO_DISTRIBUTION_TAG: qemu-2020-03-06.0
- FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer'
+ FDO_DISTRIBUTION_TAG: qemu-2020-03-17.0
allow_failure: true
+# Always rebuilds the container
+.fedora:30@qemu-forced-rebuild:
+ extends:
+ - .fedora:30@qemu-prep
+ variables:
+ FDO_FORCE_REBUILD: 1
+ only:
+ - schedules
+
+# Pulls in the qemu container from upstream or rebuilds it if missing
.fedora:31@qemu-prep:
extends:
- .fedora:31
+ - .fedora.packages
- .fdo.qemu-build@fedora
- - .pull_upstream_or_rebuild
stage: prep
tags:
- kvm
variables:
GIT_STRATEGY: none
- FDO_DISTRIBUTION_TAG: qemu-2020-03-06.0
- FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer'
+ FDO_DISTRIBUTION_TAG: qemu-2020-03-17.0
allow_failure: true
+# Always rebuilds the container
+.fedora:31@qemu-forced-rebuild:
+ extends:
+ - .fedora:31@qemu-prep
+ variables:
+ FDO_FORCE_REBUILD: 1
+ only:
+ - schedules
+
+# This is the actual job
fedora:31@qemu-prep:
extends: .fedora:31@qemu-prep
+fedora:31@qemu-forced-rebuild:
+ extends: .fedora:31@qemu-forced-rebuild
-### fedora 30
+
+# Pulls in the container from upstream or rebuilds it if missing
fedora:30@container-prep:
extends:
- .fedora:30
+ - .fedora.packages
- .fdo.container-build@fedora
- - .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
- FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer'
+# Always rebuilds the container
+fedora:30@container-forced-rebuild:
+ extends:
+ - fedora:30@container-prep
+ only:
+ - schedules
+ variables:
+ FDO_FORCE_REBUILD: 1
-### fedora 31
+
+# Pulls in the container from upstream or rebuilds it if missing
fedora:31@container-prep:
extends:
- .fedora:31
+ - .fedora.packages
- .fdo.container-build@fedora
- - .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
- FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer'
+
+# Always rebuilds the container
+fedora:31@container-forced-rebuild:
+ extends:
+ - fedora:31@container-prep
+ only:
+ - schedules
+ variables:
+ FDO_FORCE_REBUILD: 1
-### ubuntu 19.10
-ubuntu:19.10@container-prep:
+# Pulls in the container from upstream or rebuilds it if missing
+ubuntu:20.04@container-prep:
extends:
- - .ubuntu:19.10
+ - .ubuntu:20.04
+ - .ubuntu.packages
- .fdo.container-build@ubuntu
- - .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
- FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkg-config python3 check valgrind binutils doxygen xz-utils'
+# Always rebuilds the container
+ubuntu:20.04@container-forced-rebuild:
+ extends:
+ - ubuntu:20.04@container-prep
+ only:
+ - schedules
+ variables:
+ FDO_FORCE_REBUILD: 1
-### ubuntu 19.04
-ubuntu:19.04@container-prep:
+
+# Pulls in the container from upstream or rebuilds it if missing
+ubuntu:19.10@container-prep:
extends:
- - .ubuntu:19.04
+ - .ubuntu:19.10
+ - .ubuntu.packages
- .fdo.container-build@ubuntu
- - .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
- FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkg-config python3 check valgrind binutils doxygen xz-utils'
+
+# Always rebuilds the container
+ubuntu:19.10@container-forced-rebuild:
+ extends:
+ - ubuntu:19.10@container-prep
+ only:
+ - schedules
+ variables:
+ FDO_FORCE_REBUILD: 1
-### debian stable
+# Pulls in the container from upstream or rebuilds it if missing
debian:stable@container-prep:
extends:
- .debian:stable
+ - .debian.packages
- .fdo.container-build@debian
- - .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
- FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkg-config python3 check valgrind binutils doxygen xz-utils'
+
+# Always rebuilds the container
+debian:stable@container-forced-rebuild:
+ extends:
+ - debian:stable@container-prep
+ only:
+ - schedules
+ variables:
+ FDO_FORCE_REBUILD: 1
-### debian sid
+# Pulls in the container from upstream or rebuilds it if missing
debian:sid@container-prep:
extends:
- .debian:sid
+ - .debian.packages
- .fdo.container-build@debian
- - .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
- FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkg-config python3 check valgrind binutils doxygen xz-utils'
+# Always rebuilds the container
+debian:sid@container-forced-rebuild:
+ extends:
+ - debian:sid@container-prep
+ only:
+ - schedules
+ variables:
+ FDO_FORCE_REBUILD: 1
-### centos 7
+
+# Pulls in the container from upstream or rebuilds it if missing
centos:7@container-prep:
extends:
- .centos:7
+ - .centos.packages
- .fdo.container-build@centos
- - .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
- FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils xz'
+# Always rebuilds the container
+centos:7@container-forced-rebuild:
+ extends:
+ - centos:7@container-prep
+ only:
+ - schedules
+ variables:
+ FDO_FORCE_REBUILD: 1
-### centos 8
+
+# Pulls in the container from upstream or rebuilds it if missing
centos:8@container-prep:
extends:
- .centos:8
+ - .centos.packages
- .fdo.container-build@centos
- - .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
- FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils xz'
+
+# Always rebuilds the container
+centos:8@container-forced-rebuild:
+ extends:
+ - centos:8@container-prep
+ only:
+ - schedules
+ variables:
+ FDO_FORCE_REBUILD: 1
-### arch rolling
+# Pulls in the container from upstream or rebuilds it if missing
arch:rolling@container-prep:
extends:
- .arch:rolling
+ - .arch.packages
- .fdo.container-build@arch
- - .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
- FDO_DISTRIBUTION_PACKAGES: 'git gcc meson automake autoconf libtool make pkgconfig python3 check valgrind binutils doxygen'
+
+# Always rebuilds the container
+arch:rolling@container-forced-rebuild:
+ extends:
+ - arch:rolling@container-prep
+ only:
+ - schedules
+ variables:
+ FDO_FORCE_REBUILD: 1
-### alpine latest
+# Pulls in the container from upstream or rebuilds it if missing
alpine:latest@container-prep:
extends:
- .alpine:latest
+ - .alpine.packages
- .fdo.container-build@alpine
- - .pull_upstream_or_rebuild
stage: prep
variables:
GIT_STRATEGY: none
- FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkgconfig python3 check-dev valgrind binutils doxygen xz linux-headers'
+
+# Always rebuilds the container
+alpine:latest@container-forced-rebuild:
+ extends:
+ - alpine:latest@container-prep
+ only:
+ - schedules
+ variables:
+ FDO_FORCE_REBUILD: 1
#################################################################
stage: container_clean
image: golang:alpine
before_script:
- - apk add python3
- - pip3 install --user python-gitlab
+ - apk add python3 py-pip git
+ - pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
script:
- - LATEST_TAG=$(echo $DISTRO_CONTAINER_IMAGE | cut -f2 -d:)
# Go to your Profile, Settings, Access Tokens
# Create a personal token with 'api' scope, copy the value.
- # Go to Settings, CI/CD, Variables
+ # Go to CI/CD, Schedules, schedule a new monthly job (or edit the existing one)
# Define a variable of type File named AUTHFILE. Content is that token
# value.
- - python3 .gitlab-ci/gitlab-container-delete $CI_SERVER_URL $CI_PROJECT_PATH
- --repository $DISTRIB_NAME/$FDO_DISTRIBUTION_VERSION
- --authfile $AUTHFILE --exclude-tag "$LATEST_TAG"
+ - ci-fairy -v --authfile $AUTHFILE delete-image
+ --repository $FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION
+ --exclude-tag $FDO_DISTRIBUTION_TAG
dependencies: []
allow_failure: true
only:
extends:
- .fedora:30
- .container-clean
+ needs: ["fedora:30@container-prep"]
### fedora 31
fedora:31@container-clean:
extends:
- .fedora:31
- .container-clean
+ needs: ["fedora:31@container-prep"]
-### ubuntu 19.10
-ubuntu:19.10@container-clean:
+### ubuntu 20.04
+ubuntu:20.04@container-clean:
extends:
- - .ubuntu:19.10
+ - .ubuntu:20.04
- .container-clean
+ needs: ["ubuntu:20.04@container-prep"]
-### ubuntu 19.04
-ubuntu:19.04@container-clean:
+### ubuntu 19.10
+ubuntu:19.10@container-clean:
extends:
- - .ubuntu:19.04
+ - .ubuntu:19.10
- .container-clean
+ needs: ["ubuntu:19.10@container-prep"]
### debian stable
debian:stable@container-clean:
extends:
- .debian:stable
- .container-clean
+ needs: ["debian:stable@container-prep"]
### debian sid
debian:sid@container-clean:
extends:
- .debian:sid
- .container-clean
+ needs: ["debian:sid@container-prep"]
### centos 7
centos:7@container-clean:
extends:
- .centos:7
- .container-clean
+ needs: ["centos:7@container-prep"]
### centos 8
centos:8@container-clean:
extends:
- .centos:8
- .container-clean
+ needs: ["centos:8@container-prep"]
### arch rolling
arch:rolling@container-clean:
extends:
- .arch:rolling
- .container-clean
+ needs: ["arch:rolling@container-prep"]
### alpine latest
alpine:latest@container-clean:
extends:
- .alpine:latest
- .container-clean
+ needs: ["alpine:latest@container-prep"]
#################################################################
needs: ['fedora:31@container-prep']
-ubuntu:19.10@autotools-build:
+ubuntu:20.04@autotools-build:
extends:
- - .ubuntu:19.10
+ - .ubuntu:20.04
- .autotools-build@template
stage: autotools
- needs: ['ubuntu:19.10@container-prep']
+ needs: ['ubuntu:20.04@container-prep']
-ubuntu:19.10@meson-build:
+ubuntu:20.04@meson-build:
extends:
- - .ubuntu:19.10
+ - .ubuntu:20.04
- .meson-build@template
stage: meson
- needs: ['ubuntu:19.10@container-prep']
+ needs: ['ubuntu:20.04@container-prep']
-ubuntu:19.04@autotools-build:
+ubuntu:19.10@autotools-build:
extends:
- - .ubuntu:19.04
+ - .ubuntu:19.10
- .autotools-build@template
stage: autotools
- needs: ['ubuntu:19.04@container-prep']
+ needs: ['ubuntu:19.10@container-prep']
-ubuntu:19.04@meson-build:
+ubuntu:19.10@meson-build:
extends:
- - .ubuntu:19.04
+ - .ubuntu:19.10
- .meson-build@template
stage: meson
- needs: ['ubuntu:19.04@container-prep']
+ needs: ['ubuntu:19.10@container-prep']
debian:stable@autotools-build:
extends:
- .fedora:31
stage: VM
- image:
- $CI_REGISTRY_IMAGE/$DISTRIB_NAME/$FDO_DISTRIBUTION_VERSION:qemu-$FDO_DISTRIBUTION_TAG
+ image: $CI_REGISTRY_IMAGE/$FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION:qemu-$FDO_DISTRIBUTION_TAG
tags:
- kvm
variables: