monado/.gitlab-ci.yml
2020-04-28 16:52:23 -05:00

238 lines
7 KiB
YAML

# SPDX-License-Identifier: CC0-1.0
# SPDX-FileCopyrightText: 2018-2020 Collabora, Ltd. and the Monado contributors
variables:
FDO_UPSTREAM_REPO: monado/monado
.templates_sha: &templates_sha 322bf2b8f29b6491caeb13861201e96969ddc169
# Variables for build and usage of Debian 10 (Buster) image
.monado.debian:buster:
variables:
FDO_DISTRIBUTION_VERSION: buster
FDO_DISTRIBUTION_TAG: "2019-04-28.1"
# Variables for build and usage of Debian 10 (Buster) + Android NDK image
.monado.debian:buster-ndk:
variables:
FDO_DISTRIBUTION_VERSION: buster
FDO_DISTRIBUTION_TAG: "2019-04-28.1"
FDO_REPO_SUFFIX: ndk
# Variables for build and usage of Arch Linux image
.monado.arch:rolling:
variables:
FDO_DISTRIBUTION_TAG: "2019-04-28.0"
include:
- project: "freedesktop/ci-templates"
ref: *templates_sha
file: "/templates/debian.yml"
- project: "freedesktop/ci-templates"
ref: *templates_sha
file: "/templates/arch.yml"
stages:
- container_prep
- build
- pages
- deploy
###
# Container prep jobs
# Base for all container prep
.monado.container_base:
# "stage" set here doesn't work, for some reason
variables:
# no need to pull the whole tree for rebuilding the image - is this still needed?
GIT_STRATEGY: none
# Each most-derived job has a script to set up stuff for it.
FDO_DISTRIBUTION_EXEC: "bash .gitlab-ci/${CI_JOB_NAME}.sh"
# Debian Buster (x64 + i386)
debian:container_prep:
stage: container_prep
extends:
- .monado.debian:buster # local
- .monado.container_base # local
- .fdo.container-build@debian # from ci-templates
variables:
# a list of packages to install
FDO_DISTRIBUTION_PACKAGES: "build-essential git wget unzip cmake meson ninja-build doxygen graphviz libeigen3-dev curl patch python3 pkg-config libx11-dev libxxf86vm-dev libxrandr-dev libxcb-randr0-dev libhidapi-dev libwayland-dev libvulkan-dev glslang-dev glslang-tools libglvnd-dev libgl1-mesa-dev ca-certificates libusb-1.0-0-dev libuvc-dev libavcodec-dev libopencv-dev libudev-dev clang-format-7 codespell libv4l-dev libegl1-mesa-dev python3-pip python3-click"
# Arch Linux (x64)
arch:container_prep:
stage: container_prep
extends:
- .monado.arch:rolling # local
- .monado.container_base # local
- .fdo.container-build@arch # from ci-templates
variables:
# a list of packages to install
FDO_DISTRIBUTION_PACKAGES: "git gcc cmake meson ninja pkgconfig python3 diffutils patch doxygen graphviz eigen hidapi libxrandr mesa glslang vulkan-headers vulkan-icd-loader check glfw-x11 libusb opencv gtk3 ffmpeg v4l-utils qt5-base"
# Debian Buster + the Android NDK in /opt/android-ndk
# The NDK itself gets installed by .gitlab-ci/ndk:container_prep.sh
ndk:container_prep:
stage: container_prep
extends:
- .monado.debian:buster-ndk # local
- .monado.container_base # local
- .fdo.container-build@debian # from ci-templates
variables:
# Repo suffix is set in .monado.debian:buster-ndk
# a list of packages to install
FDO_DISTRIBUTION_PACKAGES: "git wget unzip cmake meson ninja-build libeigen3-dev python3 pkg-config ca-certificates glslang-tools"
format-and-spellcheck:
extends:
- .monado.debian:buster # local
- .fdo.distribution-image@debian # from ci-templates
stage: build
script:
- scripts/format-and-spellcheck.sh
artifacts:
paths:
- patches/
expire_in: 1 week
when: on_failure
# "Base" job for a CMake build
.monado.build-cmake:
stage: build
script:
- mkdir build
- pushd build
- cmake -GNinja .. $CMAKE_ARGS
- ninja
# "Base" job for a Meson build
.monado.build-meson:
stage: build
script:
- mkdir build
- pushd build
- meson .. $MESON_ARGS
- ninja
debian:cmake:
extends:
- .monado.debian:buster # local
- .fdo.distribution-image@debian # from ci-templates
- .monado.build-cmake # local
before_script:
# Generate "changes since last release" and add to changelog,
# since this is the build that makes our docs.
- pip3 install proclamation
- pushd doc/changes
- proclamation build --overwrite vNEXT
- popd
artifacts:
paths:
- build/doc/html/
debian:cmake-no-opencv:
extends:
- .monado.debian:buster # local
- .fdo.distribution-image@debian # from ci-templates
- .monado.build-cmake # local
variables:
CMAKE_ARGS: -DBUILD_WITH_OPENCV=OFF
debian:cmake-no-opengl:
extends:
- .monado.debian:buster # local
- .fdo.distribution-image@debian # from ci-templates
- .monado.build-cmake # local
variables:
CMAKE_ARGS: -DBUILD_WITH_OPENGL=OFF
debian:cmake-no-sdl2:
extends:
- .monado.debian:buster # local
- .fdo.distribution-image@debian # from ci-templates
- .monado.build-cmake # local
variables:
CMAKE_ARGS: -DBUILD_WITH_SDL2=OFF
arch:cmake:
extends:
- .monado.arch:rolling # local
- .fdo.distribution-image@arch # from ci-templates
- .monado.build-cmake # local
debian:meson:
extends:
- .monado.debian:buster # local
- .fdo.distribution-image@debian # from ci-templates
- .monado.build-meson # local
arch:meson:
extends:
- .monado.arch:rolling # local
- .fdo.distribution-image@arch # from ci-templates
- .monado.build-meson # local
variables:
MESON_ARGS: -Ddocs=disabled
# Cross-compiling
debian:meson:32bit:
extends:
- .monado.debian:buster # local
- .fdo.distribution-image@debian # from ci-templates
- .monado.build-meson # local
variables:
MESON_ARGS: --prefix /usr --libdir /usr/lib/i386-linux-gnu --cross-file ../.gitlab-ci/i386-cross.txt
debian:cmake:32bit:
extends:
- .monado.debian:buster # local
- .fdo.distribution-image@debian # from ci-templates
- .monado.build-cmake # local
variables:
# OpenCV and local OpenHMD doesn't play nicely with us in multi-arch.
CMAKE_ARGS: -DCMAKE_TOOLCHAIN_FILE=../.gitlab-ci/i386.cmake -DBUILD_WITH_OPENCV=off -DBUILD_WITH_OPENHMD=off
# Base of Android NDK builds.
# Takes the last :-delimited part of the name as the ABI to build for,
# so you don't need to do anything other than "extends" in the job
.monado.ndk:build-base:
stage: build
extends:
- .monado.debian:buster-ndk # local
- .fdo.suffixed-image@debian # from ci-templates
variables:
ANDROID_PLATFORM: 24
script:
- mkdir build
- pushd build
# This extracts the ABI from the job name
- export ABI=$(echo $CI_JOB_NAME | cut --delimiter=":" -f 2)
# Note we are pointing CMake to the host install of Eigen3 because it's header-only
# and thus this is safe to do.
- cmake -GNinja .. -DANDROID_PLATFORM=$ANDROID_PLATFORM -DANDROID_ABI=$ABI -DCMAKE_TOOLCHAIN_FILE=/opt/android-ndk/build/cmake/android.toolchain.cmake -DEigen3_DIR=/usr/lib/cmake/eigen3/
- ninja
ndk:armeabi-v7a:
extends: .monado.ndk:build-base
ndk:arm64-v8a:
extends: .monado.ndk:build-base
###
# Pages
###
pages:
stage: pages
only:
- master
dependencies:
- debian:cmake
script:
- mkdir -p public
- mv build/doc/html/* public/
artifacts:
paths:
- public