libvirt/.gitlab-ci.yml
Andrea Bolognani 3ab9b399bc ci: Build on macOS 11 instead of macOS 10.15
macOS builder capacity on Cirrus CI is quite limited, and so we
can't afford to keep the old build job around after adding the
new one like we do for FreeBSD.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2021-02-16 11:35:44 +01:00

624 lines
15 KiB
YAML

variables:
GIT_DEPTH: 100
stages:
- containers
- builds
- sanity_checks
.script_variables: &script_variables |
export CCACHE_BASEDIR="$(pwd)"
export CCACHE_DIR="$CCACHE_BASEDIR/ccache"
export CCACHE_MAXSIZE="500M"
export PATH="$CCACHE_WRAPPERSDIR:$PATH"
# Common templates
.container_job:
image: docker:stable
stage: containers
needs: []
services:
- docker:dind
rules:
- if: "$TEMPORARILY_DISABLED"
allow_failure: true
- when: on_success
before_script:
- export TAG="$CI_REGISTRY_IMAGE/ci-$NAME:latest"
- export COMMON_TAG="$CI_REGISTRY/libvirt/libvirt/ci-$NAME:latest"
- docker info
- docker login registry.gitlab.com -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"
script:
- docker pull "$TAG" || docker pull "$COMMON_TAG" || true
- docker build --cache-from "$TAG" --cache-from "$COMMON_TAG" --tag "$TAG" -f "ci/containers/ci-$NAME.Dockerfile" ci/containers
- docker push "$TAG"
after_script:
- docker logout
# We build many containers which can be useful to debug problems but are not
# needed for the pipeline itself to complete: those sometimes fail, and when
# that happens it's mostly because of temporary issues with Debian sid. We
# don't want those failures to affect the overall pipeline status
.container_optional_job:
extends: .container_job
allow_failure: true
.native_build_job:
stage: builds
image: $CI_REGISTRY_IMAGE/ci-$NAME:latest
rules:
- if: "$TEMPORARILY_DISABLED"
allow_failure: true
- when: on_success
cache:
paths:
- ccache/
key: "$CI_JOB_NAME"
before_script:
- *script_variables
script:
- meson build --werror || (cat build/meson-logs/meson-log.txt && exit 1)
- if test "$DIST" != "skip";
then
ninja -C build dist;
else
ninja -C build;
ninja -C build test;
fi
- if test -x /usr/bin/rpmbuild && test "$RPM" != "skip";
then
rpmbuild --nodeps -ta build/meson-dist/libvirt-*.tar.xz;
fi
# Jobs that we delegate to Cirrus CI because they require an operating
# system other than Linux. These jobs will only run if the required
# setup has been performed on the GitLab account (see ci/README.rst).
#
# The Cirrus CI configuration is generated by replacing target-specific
# variables in a generic template: some of these variables are provided
# when the GitLab CI job is defined, others are taken from a shell
# snippet generated using lcitool.
#
# Note that the $PATH environment variable has to be treated with
# special care, because we can't just override it at the GitLab CI job
# definition level or we risk breaking it completely.
.cirrus_build_job:
stage: builds
image: registry.gitlab.com/libvirt/libvirt-ci/cirrus-run:master
needs: []
script:
- source ci/cirrus/$NAME.vars
- sed -e "s|[@]CI_REPOSITORY_URL@|$CI_REPOSITORY_URL|g"
-e "s|[@]CI_COMMIT_REF_NAME@|$CI_COMMIT_REF_NAME|g"
-e "s|[@]CI_COMMIT_SHA@|$CI_COMMIT_SHA|g"
-e "s|[@]CIRRUS_VM_INSTANCE_TYPE@|$CIRRUS_VM_INSTANCE_TYPE|g"
-e "s|[@]CIRRUS_VM_IMAGE_SELECTOR@|$CIRRUS_VM_IMAGE_SELECTOR|g"
-e "s|[@]CIRRUS_VM_IMAGE_NAME@|$CIRRUS_VM_IMAGE_NAME|g"
-e "s|[@]UPDATE_COMMAND@|$UPDATE_COMMAND|g"
-e "s|[@]INSTALL_COMMAND@|$INSTALL_COMMAND|g"
-e "s|[@]PATH@|$PATH_EXTRA${PATH_EXTRA:+:}\$PATH|g"
-e "s|[@]PKG_CONFIG_PATH@|$PKG_CONFIG_PATH|g"
-e "s|[@]PKGS@|$PKGS|g"
-e "s|[@]MAKE@|$MAKE|g"
-e "s|[@]PYTHON@|$PYTHON|g"
-e "s|[@]PIP3@|$PIP3|g"
-e "s|[@]PYPI_PKGS@|$PYPI_PKGS|g"
<ci/cirrus/build.yml >ci/cirrus/$NAME.yml
- cat ci/cirrus/$NAME.yml
- cirrus-run -v --show-build-log always ci/cirrus/$NAME.yml
rules:
- if: "$TEMPORARILY_DISABLED"
allow_failure: true
- if: "$CIRRUS_GITHUB_REPO && $CIRRUS_API_TOKEN"
.cross_build_job:
stage: builds
image: $CI_REGISTRY_IMAGE/ci-$NAME-cross-$CROSS:latest
cache:
paths:
- ccache/
key: "$CI_JOB_NAME"
rules:
- if: "$TEMPORARILY_DISABLED"
allow_failure: true
- when: on_success
before_script:
- *script_variables
script:
- meson build --werror $MESON_OPTS || (cat build/meson-logs/meson-log.txt && exit 1)
- ninja -C build
- if test "$CROSS" = "i686" ; then ninja -C build test ; fi
# Native container build jobs
x64-centos-7-container:
extends: .container_job
variables:
NAME: centos-7
x64-centos-8-container:
extends: .container_job
variables:
NAME: centos-8
x64-centos-stream-container:
extends: .container_job
variables:
NAME: centos-stream
x64-debian-10-container:
extends: .container_job
variables:
NAME: debian-10
x64-debian-sid-container:
extends: .container_job
variables:
NAME: debian-sid
x64-fedora-32-container:
extends: .container_job
variables:
NAME: fedora-32
x64-fedora-33-container:
extends: .container_job
variables:
NAME: fedora-33
x64-fedora-rawhide-container:
extends: .container_job
variables:
NAME: fedora-rawhide
x64-opensuse-152-container:
extends: .container_job
variables:
NAME: opensuse-152
x64-ubuntu-1804-container:
extends: .container_job
variables:
NAME: ubuntu-1804
x64-ubuntu-2004-container:
extends: .container_job
variables:
NAME: ubuntu-2004
# Cross-build containers build jobs
aarch64-debian-10-container:
extends: .container_optional_job
variables:
NAME: debian-10-cross-aarch64
armv6l-debian-10-container:
extends: .container_job
variables:
NAME: debian-10-cross-armv6l
armv7l-debian-10-container:
extends: .container_job
variables:
NAME: debian-10-cross-armv7l
i686-debian-10-container:
extends: .container_optional_job
variables:
NAME: debian-10-cross-i686
mips-debian-10-container:
extends: .container_job
variables:
NAME: debian-10-cross-mips
mips64el-debian-10-container:
extends: .container_optional_job
variables:
NAME: debian-10-cross-mips64el
mipsel-debian-10-container:
extends: .container_job
variables:
NAME: debian-10-cross-mipsel
ppc64le-debian-10-container:
extends: .container_job
variables:
NAME: debian-10-cross-ppc64le
s390x-debian-10-container:
extends: .container_optional_job
variables:
NAME: debian-10-cross-s390x
aarch64-debian-sid-container:
extends: .container_job
variables:
NAME: debian-sid-cross-aarch64
armv6l-debian-sid-container:
extends: .container_optional_job
variables:
NAME: debian-sid-cross-armv6l
armv7l-debian-sid-container:
extends: .container_optional_job
variables:
NAME: debian-sid-cross-armv7l
i686-debian-sid-container:
extends: .container_job
variables:
NAME: debian-sid-cross-i686
mips64el-debian-sid-container:
extends: .container_job
variables:
NAME: debian-sid-cross-mips64el
mipsel-debian-sid-container:
extends: .container_optional_job
variables:
NAME: debian-sid-cross-mipsel
ppc64le-debian-sid-container:
extends: .container_optional_job
variables:
NAME: debian-sid-cross-ppc64le
s390x-debian-sid-container:
extends: .container_job
variables:
NAME: debian-sid-cross-s390x
mingw32-fedora-rawhide-container:
extends: .container_job
variables:
NAME: fedora-rawhide-cross-mingw32
mingw64-fedora-rawhide-container:
extends: .container_job
variables:
NAME: fedora-rawhide-cross-mingw64
# Native architecture build + test jobs
x64-debian-10:
extends: .native_build_job
needs:
- x64-debian-10-container
variables:
NAME: debian-10
x64-debian-10-clang:
extends: .native_build_job
needs:
- x64-debian-10-container
variables:
NAME: debian-10
CC: clang
x64-debian-sid:
extends: .native_build_job
needs:
- x64-debian-sid-container
variables:
NAME: debian-sid
x64-centos-7:
extends: .native_build_job
needs:
- x64-centos-7-container
variables:
NAME: centos-7
# meson dist fails on CentOS 7 because of old git that fails to clone
# from shallow git repository which is done when running meson dist
DIST: skip
RPM: skip
x64-centos-8:
extends: .native_build_job
needs:
- x64-centos-8-container
variables:
NAME: centos-8
RPM: skip
x64-centos-8-clang:
extends: .native_build_job
needs:
- x64-centos-8-container
variables:
NAME: centos-8
CC: clang
RPM: skip
x64-centos-stream:
extends: .native_build_job
needs:
- x64-centos-stream-container
variables:
NAME: centos-stream
RPM: skip
x64-fedora-32:
extends: .native_build_job
needs:
- x64-fedora-32-container
variables:
NAME: fedora-32
RPM: skip
x64-fedora-33:
extends: .native_build_job
needs:
- x64-fedora-33-container
variables:
NAME: fedora-33
x64-fedora-rawhide:
extends: .native_build_job
needs:
- x64-fedora-rawhide-container
variables:
NAME: fedora-rawhide
# Temp workaround until we see what resolution is for
# https://bugzilla.redhat.com/show_bug.cgi?id=1919965
# Hopefully remove before F34 is released.
CFLAGS: -gdwarf-4
x64-fedora-rawhide-clang:
extends: .native_build_job
needs:
- x64-fedora-rawhide-container
variables:
NAME: fedora-rawhide
CC: clang
RPM: skip
x64-opensuse-152:
extends: .native_build_job
needs:
- x64-opensuse-152-container
variables:
NAME: opensuse-152
RPM: skip
x64-ubuntu-1804:
extends: .native_build_job
needs:
- x64-ubuntu-1804-container
variables:
NAME: ubuntu-1804
x64-ubuntu-2004:
extends: .native_build_job
needs:
- x64-ubuntu-2004-container
variables:
NAME: ubuntu-2004
x64-freebsd-11-build:
extends: .cirrus_build_job
variables:
NAME: freebsd-11
CIRRUS_VM_INSTANCE_TYPE: freebsd_instance
CIRRUS_VM_IMAGE_SELECTOR: image_family
CIRRUS_VM_IMAGE_NAME: freebsd-11-4
UPDATE_COMMAND: pkg update
INSTALL_COMMAND: pkg install -y
x64-freebsd-12-build:
extends: .cirrus_build_job
variables:
NAME: freebsd-12
CIRRUS_VM_INSTANCE_TYPE: freebsd_instance
CIRRUS_VM_IMAGE_SELECTOR: image_family
CIRRUS_VM_IMAGE_NAME: freebsd-12-2
UPDATE_COMMAND: pkg update
INSTALL_COMMAND: pkg install -y
x64-macos-11-build:
extends: .cirrus_build_job
variables:
NAME: macos-11
CIRRUS_VM_INSTANCE_TYPE: osx_instance
CIRRUS_VM_IMAGE_SELECTOR: image
CIRRUS_VM_IMAGE_NAME: big-sur-base
UPDATE_COMMAND: brew update
INSTALL_COMMAND: brew install
PATH_EXTRA: /usr/local/opt/ccache/libexec:/usr/local/opt/gettext/bin:/usr/local/opt/libpcap/bin:/usr/local/opt/libxslt/bin:/usr/local/opt/rpcgen/bin
PKG_CONFIG_PATH: /usr/local/opt/curl/lib/pkgconfig:/usr/local/opt/libpcap/lib/pkgconfig:/usr/local/opt/libxml2/lib/pkgconfig:/usr/local/opt/ncurses/lib/pkgconfig:/usr/local/opt/readline/lib/pkgconfig
# Cross compiled build jobs
aarch64-debian-sid:
extends: .cross_build_job
needs:
- aarch64-debian-sid-container
variables:
NAME: debian-sid
CROSS: aarch64
armv6l-debian-10:
extends: .cross_build_job
needs:
- armv6l-debian-10-container
variables:
NAME: debian-10
CROSS: armv6l
armv7l-debian-10:
extends: .cross_build_job
needs:
- armv7l-debian-10-container
variables:
NAME: debian-10
CROSS: armv7l
i686-debian-sid:
extends: .cross_build_job
needs:
- i686-debian-sid-container
variables:
NAME: debian-sid
CROSS: i686
mips-debian-10:
extends: .cross_build_job
needs:
- mips-debian-10-container
variables:
NAME: debian-10
CROSS: mips
mips64el-debian-sid:
extends: .cross_build_job
needs:
- mips64el-debian-sid-container
variables:
NAME: debian-sid
CROSS: mips64el
mipsel-debian-10:
extends: .cross_build_job
needs:
- mipsel-debian-10-container
variables:
NAME: debian-10
CROSS: mipsel
ppc64le-debian-10:
extends: .cross_build_job
needs:
- ppc64le-debian-10-container
variables:
NAME: debian-10
CROSS: ppc64le
s390x-debian-sid:
extends: .cross_build_job
needs:
- s390x-debian-sid-container
variables:
NAME: debian-sid
CROSS: s390x
mingw32-fedora-rawhide:
extends: .cross_build_job
needs:
- mingw32-fedora-rawhide-container
variables:
NAME: fedora-rawhide
CROSS: mingw32
mingw64-fedora-rawhide:
extends: .cross_build_job
needs:
- mingw64-fedora-rawhide-container
variables:
NAME: fedora-rawhide
CROSS: mingw64
# This artifact published by this job is downloaded by libvirt.org to
# be deployed to the web root:
# https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=website
website:
stage: builds
image: $CI_REGISTRY_IMAGE/ci-centos-8:latest
needs:
- x64-centos-8-container
before_script:
- *script_variables
script:
- meson build --prefix=$(pwd)/vroot || (cat build/meson-logs/meson-log.txt && exit 1)
- ninja -C build install-web
- mv vroot/share/doc/libvirt/html/ website
artifacts:
expose_as: 'Website'
name: 'website'
when: on_success
expire_in: 30 days
paths:
- website
codestyle:
stage: builds
image: $CI_REGISTRY_IMAGE/ci-opensuse-152:latest
needs:
- x64-opensuse-152-container
before_script:
- *script_variables
script:
- meson build || (cat build/meson-logs/meson-log.txt && exit 1)
- ninja -C build libvirt-pot-dep
- meson test -C build --suite syntax-check --no-rebuild || (cat build/meson-logs/testlog.txt && exit 1)
# This artifact published by this job is downloaded to push to Weblate
# for translation usage:
# https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=potfile
potfile:
stage: builds
image: $CI_REGISTRY_IMAGE/ci-centos-8:latest
needs:
- x64-centos-8-container
rules:
- if: "$CI_COMMIT_BRANCH == 'master'"
before_script:
- *script_variables
script:
- meson build || (cat build/meson-logs/meson-log.txt && exit 1)
- ninja -C build libvirt-pot-dep
- ninja -C build libvirt-pot
- cp po/libvirt.pot libvirt.pot
artifacts:
expose_as: 'Potfile'
name: 'potfile'
when: on_success
expire_in: 30 days
paths:
- libvirt.pot
# Check that all commits are signed-off for the DCO.
# Skip on "libvirt" namespace, since we only need to run
# this test on developer's personal forks from which
# merge requests are submitted
check-dco:
stage: sanity_checks
needs: []
image: registry.gitlab.com/libvirt/libvirt-ci/check-dco:master
script:
- /check-dco
rules:
- if: "$CI_PROJECT_NAMESPACE != 'libvirt'"
variables:
GIT_DEPTH: 1000
# Coverity job that is run only by schedules
coverity:
image: $CI_REGISTRY_IMAGE/ci-centos-8:latest
needs:
- x64-centos-8-container
stage: builds
script:
- curl https://scan.coverity.com/download/linux64 --form project=$COVERITY_SCAN_PROJECT_NAME --form token=$COVERITY_SCAN_TOKEN -o /tmp/cov-analysis-linux64.tgz
- tar xfz /tmp/cov-analysis-linux64.tgz
- meson build
- cov-analysis-linux64-*/bin/cov-build --dir cov-int ninja -C 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="$(git describe --tags)" --form description="$(git describe --tags) / $CI_COMMIT_TITLE / $CI_COMMIT_REF_NAME:$CI_PIPELINE_ID"
rules:
- if: "$CI_PIPELINE_SOURCE == 'schedule' && $COVERITY_SCAN_PROJECT_NAME && $COVERITY_SCAN_TOKEN"