# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0: .templates_sha: &template_sha 567700e483aabed992d0a4fea84994a0472deff6 # see https://docs.gitlab.com/ee/ci/yaml/#includefile # This file uses the freedesktop ci-templates to build Weston and run our # tests in CI. # # ci-templates uses a multi-stage build process. First, the base container # image is built which contains the core distribution, the toolchain, and # all our build dependencies. This container is aggressively cached; if a # container image matching $FDO_DISTRIBUTION_TAG is found in either the # upstream repo (wayland/weston) or the user's downstream repo, it is # reused for the build. This gives us predictability of build and far # quicker runtimes, however it means that any changes to the base container # must also change $FDO_DISTRIBUTION_TAG. When changing this, please use # the current date as well as a unique build identifier. # # After the container is either rebuilt (tag mismatch) or reused (tag # previously used), the build stage executes within this container. # # The final stage is used to expose documentation and coverage information, # including publishing documentation to the public site when built on the # main branch. # # Apart from the 'variables', 'include', and 'stages' top-level anchors, # everything not beginning with a dot ('.') is the name of a job which will # be executed as part of CI, unless the rules specify that it should not be # run. # # Variables prefixed with CI_ are generally provided by GitLab itself; # variables prefixed with FDO_ and templates prefixed by .fdo are provided # by the ci-templates. # # For more information on GitLab CI, including the YAML syntax, see: # https://docs.gitlab.com/ee/ci/yaml/README.html # # Note that freedesktop.org uses the 'Community Edition' of GitLab, so features # marked as 'premium' or 'ultimate' are not available to us. # # For more information on ci-templates, see: # - documentation at https://freedesktop.pages.freedesktop.org/ci-templates/ # - repo at https://gitlab.freedesktop.org/freedesktop/ci-templates/ variables: FDO_UPSTREAM_REPO: wayland/weston include: # Here we use a fixed ref in order to isolate ourselves from ci-templates # API changes. If you need new features from ci-templates you must bump # this to the current SHA you require from the ci-templates repo, however # be aware that you may need to account for API changes when doing so. - project: 'freedesktop/ci-templates' ref: *template_sha file: '/templates/debian.yml' - project: 'freedesktop/ci-templates' ref: *template_sha file: '/templates/ci-fairy.yml' # Define the build stages. These are used for UI grouping as well as # dependencies. stages: - review - container_prep - build - pages # Base variables used for anything using a Debian environment .debian: variables: FDO_DISTRIBUTION_VERSION: buster FDO_DISTRIBUTION_EXEC: 'env FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash .gitlab-ci/debian-install.sh' FDO_DISTRIBUTION_TAG: '2021-07-31.1-wayland-protocols' .ci-rules: rules: - when: on_success # does not inherit .ci-rules check-commit: extends: - .fdo.ci-fairy stage: review rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' when: always - when: never script: - ci-fairy check-commits --signed-off-by --junit-xml=results.xml variables: GIT_DEPTH: 100 artifacts: reports: junit: results.xml # Build our base container image, which contains the core distribution, the # toolchain, and all our build dependencies. This will be reused in the build # stage. container_prep: extends: - .ci-rules - .debian - .fdo.container-build@debian timeout: 30m stage: container_prep # Core templates for all of our build steps. These are reused by all build jobs # through the `extends` keyword. .build-env: extends: - .ci-rules - .debian - .fdo.distribution-image@debian timeout: 5m stage: build variables: BUILDDIR: $CI_PROJECT_DIR/build-weston-$CI_JOB_NAME PREFIX: $CI_PROJECT_DIR/prefix-weston-$CI_JOB_NAME before_script: - export PATH=~/.local/bin:$PATH - export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)" - export TESTS_RES_PATH="$BUILDDIR/tests-res.txt" - mkdir "$BUILDDIR" "$PREFIX" # Extends the core build templates to also provide for running our testing. We # run this inside a virtme (qemu wrapper) VM environment so we can test the DRM # backend using the 'vkms' virtual driver under Linux. .build-and-test: extends: .build-env tags: - kvm script: - cd "$BUILDDIR" - meson --prefix="$PREFIX" -Db_sanitize=address ${MESON_OPTIONS} .. - ninja -k0 -j${FDO_CI_CONCURRENT:-4} - ninja install - virtme-run --rw --pwd --kimg /weston-virtme/bzImage --kopt quiet --script-dir ../.gitlab-ci/virtme-scripts --qemu-opts -m 4096 -smp ${FDO_CI_CONCURRENT:-4} - TEST_RES=$(cat $TESTS_RES_PATH) - rm $TESTS_RES_PATH - cp -R /weston-virtme ./ - rm weston-virtme/bzImage - exit $TEST_RES artifacts: name: weston-$CI_COMMIT_SHA when: always paths: - $BUILDDIR/*.png - $BUILDDIR/meson-logs - $BUILDDIR/weston-virtme - $PREFIX reports: junit: $BUILDDIR/meson-logs/testlog.junit.xml # Same as above, but without running any tests. .build-no-test: extends: .build-env tags: - kvm script: - cd "$BUILDDIR" - meson --prefix="$PREFIX" ${MESON_OPTIONS} .. - ninja -k0 -j${FDO_CI_CONCURRENT:-4} - ninja install - ninja clean artifacts: name: weston-$CI_COMMIT_SHA when: always paths: - $BUILDDIR/meson-logs - $PREFIX full-build: variables: MESON_OPTIONS: > -Doptimization=0 -Db_coverage=true -Dwerror=true -Dtest-skip-is-failure=true -Dlauncher-libseat=true extends: .build-and-test after_script: - ninja -C "$BUILDDIR" coverage-html > "$BUILDDIR/meson-logs/ninja-coverage-html.txt" - ninja -C "$BUILDDIR" coverage-xml - sed -i -e 's/\/build-weston-build-full//' -e 's/\"..\//\"/' "$BUILDDIR/meson-logs/coverage.xml" artifacts: reports: cobertura: $BUILDDIR/meson-logs/coverage.xml docs-build: variables: MESON_OPTIONS: > -Dwerror=true -Ddoc=true extends: .build-no-test no-gl-build: variables: MESON_OPTIONS: > -Dsimple-clients=damage,im,shm,touch,dmabuf-v4l -Drenderer-gl=false -Dremoting=false -Dpipewire=false -Dwerror=true -Dlauncher-libseat=true extends: .build-and-test # Expose docs and coverage reports, so we can show users any changes to these # inside their merge requests, letting us check them before merge. # # This does not build the docs or coverage information itself, but just reuses # the docs and coverage information from the x86-64 Debian builds as the # canonical sources of coverage information; the docs themselves should be # invariant across any architecture or OS. docs-and-coverage: extends: - .ci-rules - .debian - .fdo.distribution-image@debian stage: pages timeout: 5m script: - mv prefix-weston-docs-build/share/doc/weston Documentation - mv build-weston-full-build/meson-logs/coveragereport Test_Coverage - rm Test_Coverage/gcov.css - cp doc/style/lcov-style.css Test_Coverage/gcov.css - cp doc/style/*.png Test_Coverage/ - rm -rf build-* prefix-* dependencies: - docs-build - full-build artifacts: expose_as: 'Documentation preview and test coverage report' paths: - Documentation/ - Test_Coverage/ # Generate the documentation for https://wayland.pages.freedesktop.org/weston/ # Anything under public/ is published to this URL. # # Does not inherit .ci-rules as it should only run in our default branch for # the upstream repo. pages: extends: - .debian - .fdo.distribution-image@debian stage: pages timeout: 5m dependencies: - docs-build script: - export PREFIX=$(pwd)/prefix-weston-docs-build - mkdir public - cp -R $PREFIX/share/doc/weston/* public/ artifacts: paths: - public rules: - if: '$CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_PATH == "wayland/weston" && $CI_BUILD_REF_NAME == $CI_DEFAULT_BRANCH' when: on_success - when: never