blob: 31b15a5a1a1a1e79c3cc12da73a240830b0e0bed [file] [log] [blame]
include:
- template: Code-Quality.gitlab-ci.yml
- template: License-Management.gitlab-ci.yml
- template: SAST.gitlab-ci.yml
image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-debian:10-master-97554983
cache:
key: "$CI_JOB_NAME-"
paths:
- cache/
stages:
- test
- post
- publish
variables:
SAST_DISABLE_DIND: "true"
SAST_GOSEC_LEVEL: 2
PYTEST_ADDOPTS: "--color=yes"
INTEGRATION_CACHE: "${CI_PROJECT_DIR}/cache/integration-cache"
PYTEST_ARGS: "--color=yes --integration -n 2"
TEST_COMMAND: "tox -- ${PYTEST_ARGS}"
EXTERNAL_TESTS_COMMAND: "tox -e py{35,36,37}-external -- ${PYTEST_ARGS}"
COVERAGE_PREFIX: "${CI_JOB_NAME}."
#####################################################
# Test stage #
#####################################################
# Run premerge commits
#
.tests-template: &tests
stage: test
before_script:
# Diagnostics
- mount
- df -h
- tox --version
script:
- mkdir -p "${INTEGRATION_CACHE}"
- useradd -Um buildstream
- chown -R buildstream:buildstream .
# Run the tests as a simple user to test for permission issues
- su buildstream -c "${TEST_COMMAND}"
- su buildstream -c "${EXTERNAL_TESTS_COMMAND}"
after_script:
except:
- schedules
artifacts:
paths:
- .coverage-reports
test-stuff:
image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-debian:9-master-93453213
script:
- useradd -Um buildstream
- chown -R buildstream:buildstream .
- su buildstream -c "BST_FORCE_SESSION_REBUILD=yes tox -e docs"
- git diff
# tests-debian-9:
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-debian:9-master-93453213
# <<: *tests
# tests-debian-10:
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-debian:10-master-97554983
# <<: *tests
# tests-fedora-30:
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:30-master-93453213
# <<: *tests
# tests-fedora-31:
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:31-master-97748867
# <<: *tests
# tests-ubuntu-18.04:
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-ubuntu:18.04-master-93453213
# <<: *tests
# tests-centos-7.6:
# <<: *tests
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-centos:7.6.1810-master-93453213
# overnight-fedora-30-aarch64:
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:aarch64-30-master-59168197
# tags:
# - aarch64
# <<: *tests
# # We need to override the exclusion from the template
# # in order to run on schedules
# except: []
# only:
# - schedules
# tests-unix:
# # Use fedora here, to a) run a test on fedora and b) ensure that we
# # can get rid of ostree - this is not possible with debian-8
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:31-master-97748867
# <<: *tests
# variables:
# BST_FORCE_SANDBOX: "chroot"
# script:
# # We remove the Bubblewrap and OSTree packages here so that we catch any
# # codepaths that try to use them. Removing OSTree causes fuse-libs to
# # disappear unless we mark it as user-installed.
# - dnf mark install fuse-libs systemd-udev
# - dnf erase -y bubblewrap ostree
# # Since the unix platform is required to run as root, no user change required
# - ${TEST_COMMAND}
# tests-buildbox:
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:31-master-97748867
# <<: *tests
# variables:
# BST_FORCE_SANDBOX: "buildbox"
# script:
# - dnf install -y fuse3
# # Before buildbox is a first class citizen we need a good install story for users and this test
# # should mirror that story, for now we build in the test as it is quick and easy.
# # Build and install buildbox
# - dnf install -y fuse3-devel glibc-static grpc-plugins grpc-devel protobuf-devel cmake gcc gcc-c++ libuuid-devel
# - git clone https://gitlab.com/BuildGrid/buildbox/buildbox-fuse.git
# - cd buildbox-fuse
# # Pin a specific commit so that any changes to buildbox do not result in unexpected/unannounced buildstream failures
# - git checkout cdd2b00842c39a8f7162c2ae55bf2cefb925e339
# - cmake -B build
# - cmake --build build
# - cmake --build build --target install
# - cd ..
# - useradd -Um buildstream
# - chown -R buildstream:buildstream .
# - su buildstream -c "${TEST_COMMAND}"
# tests-fedora-missing-deps:
# # Ensure that tests behave nicely while missing bwrap and ostree
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:31-master-97748867
# <<: *tests
# script:
# # We remove the Bubblewrap and OSTree packages here so that we catch any
# # codepaths that try to use them. Removing OSTree causes fuse-libs to
# # disappear unless we mark it as user-installed.
# - dnf mark install fuse-libs systemd-udev
# - dnf erase -y bubblewrap ostree
# - useradd -Um buildstream
# - chown -R buildstream:buildstream .
# - ${TEST_COMMAND}
# tests-fedora-update-deps:
# # Check if the tests pass after updating requirements to their latest
# # allowed version.
# allow_failure: true
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:31-master-97748867
# <<: *tests
# script:
# - useradd -Um buildstream
# - chown -R buildstream:buildstream .
# - make --always-make --directory requirements
# - cat requirements/*.txt
# - su buildstream -c "${TEST_COMMAND}"
# tests-remote-execution:
# allow_failure: true
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:31-master-97748867
# <<: *tests
# before_script:
# - dnf install -y docker docker-compose
# - docker-compose --file ${COMPOSE_MANIFEST} up --detach
# after_script:
# - docker-compose --file ${COMPOSE_MANIFEST} stop
# - docker-compose --file ${COMPOSE_MANIFEST} logs
# - docker-compose --file ${COMPOSE_MANIFEST} down
# services:
# - docker:stable-dind
# variables:
# DOCKER_HOST: tcp://docker:2375
# DOCKER_DRIVER: overlay2
# # Required to be able to connect to the docker daemon. See https://gitlab.com/gitlab-org/gitlab-runner/issues/4501
# DOCKER_TLS_CERTDIR: ""
# COMPOSE_MANIFEST: .gitlab-ci/buildgrid-compose.yml
# ARTIFACT_CACHE_SERVICE: http://docker:50052
# REMOTE_EXECUTION_SERVICE: http://docker:50051
# SOURCE_CACHE_SERVICE: http://docker:50052
# PYTEST_ARGS: "--color=yes --remote-execution"
# tests-spawn-multiprocessing-start-method:
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:31-master-97748867
# <<: *tests
# variables:
# BST_FORCE_START_METHOD: "spawn"
# script:
# # FIXME: Until all the tests pass as normal, override which tests will run here.
# - mkdir -p "${INTEGRATION_CACHE}"
# - useradd -Um buildstream
# - chown -R buildstream:buildstream .
# - su buildstream -c "tox -- ${PYTEST_ARGS} tests/{artifactcache,cachekey,elements,format,frontend,internals,plugins,sourcecache}"
# # Run type checkers
# mypy:
# stage: test
# script:
# - tox -e mypy
# except:
# - schedules
# # Lint separately from testing
# lint:
# # We can't use the default debian:9 based image here since that comes with
# # Python 3.5, and Black requires Python >= 3.6.
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:31-master-97748867
# stage: test
# before_script:
# # Diagnostics
# - python3 --version
# script:
# - tox -e format-check,lint
# except:
# - schedules
# # Catch regressions in native windows support
# tests-win32-master:
# stage: test
# variables:
# LC_ALL: C.UTF-8
# LANG: C.UTF-8
# tags:
# - win32
# script:
# - tox -e win32
# only:
# - master
# # Optional test to catch regressions in native windows support on non-master branches
# tests-win32-non-master:
# stage: test
# variables:
# LC_ALL: C.UTF-8
# LANG: C.UTF-8
# tags:
# - win32
# script:
# - tox -e win32
# except:
# - master
# when: manual
# tests-wsl-master:
# stage: test
# variables:
# LC_ALL: C.UTF-8
# LANG: C.UTF-8
# tags:
# - wsl
# before_script:
# - mount
# - df -h
# - PATH=/root/.local/bin:$PATH tox --version
# script:
# # Install static buildbox-casd binary
# - wget https://buildbox-casd-binaries.nyc3.cdn.digitaloceanspaces.com/buildbox-casd-x86_64-linux-20191104-598100dd.tar.xz
# - tar -C /root/.local/bin -xf buildbox-casd-x86_64-linux-20191104-598100dd.tar.xz
# - PATH=/root/.local/bin:$PATH ${TEST_COMMAND}
# only:
# - master
# tests-wsl-non-master:
# stage: test
# variables:
# LC_ALL: C.UTF-8
# LANG: C.UTF-8
# tags:
# - wsl
# before_script:
# - mount
# - df -h
# - PATH=/root/.local/bin:$PATH tox --version
# script:
# # Install static buildbox-casd binary
# - wget https://buildbox-casd-binaries.nyc3.cdn.digitaloceanspaces.com/buildbox-casd-x86_64-linux-20191104-598100dd.tar.xz
# - tar -C /root/.local/bin -xf buildbox-casd-x86_64-linux-20191104-598100dd.tar.xz
# - PATH=/root/.local/bin:$PATH ${TEST_COMMAND}
# when: manual
# except:
# - master
# # Automatically build documentation for every commit, we want to know
# # if building documentation fails even if we're not deploying it.
# docs:
# stage: test
# variables:
# BST_FORCE_SESSION_REBUILD: 1
# script:
# - env BST_SOURCE_CACHE="$(pwd)/cache/integration-cache/sources" tox -e docs
# - mv doc/build/html public
# except:
# - schedules
# artifacts:
# paths:
# - public/
# .overnight-tests: &overnight-tests-template
# stage: test
# image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:31-master-97748867
# variables:
# BST_EXT_URL: git+https://gitlab.com/BuildStream/bst-plugins-experimental.git
# BST_EXT_REF: 0.12.0-173-gbe5ac19#egg=bst_plugins_experimental[ostree,cargo]
# FD_SDK_REF: freedesktop-sdk-19.08.3-buildstream2-0-gb66129f8e86acb1b6f35b825607b8e60362773a2
# before_script:
# - |
# mkdir -p "${HOME}/.config"
# cat <<EOF >"${HOME}/.config/buildstream.conf"
# scheduler:
# fetchers: 2
# EOF
# - dnf install -y ostree python3-gobject-base
# - pip3 install -r requirements/requirements.txt -r requirements/plugin-requirements.txt
# - pip3 wheel --wheel-dir wheels/ --no-deps .
# - pip3 install --no-index wheels/*
# - pip3 install --user -e ${BST_EXT_URL}@${BST_EXT_REF}
# - git clone https://gitlab.com/freedesktop-sdk/freedesktop-sdk.git
# - git -C freedesktop-sdk checkout ${FD_SDK_REF}
# artifacts:
# paths:
# - "${HOME}/.cache/buildstream/logs"
# only:
# - schedules
# overnight-tests:
# <<: *overnight-tests-template
# script:
# - make -C freedesktop-sdk
# tags:
# - overnight-tests
# overnight-tests-no-cache:
# <<: *overnight-tests-template
# script:
# - sed -i '/artifacts:/,+1 d' freedesktop-sdk/project.conf
# - make -C freedesktop-sdk
# tags:
# - overnight-tests
# #####################################################
# # Post stage #
# #####################################################
# analysis:
# stage: post
# script:
# - |
# pip3 install radon
# mkdir analysis
# - |
# echo "Calculating Maintainability Index"
# radon mi -s -j src/buildstream > analysis/mi.json
# radon mi -s src/buildstream
# - |
# echo "Calculating Cyclomatic Complexity"
# radon cc -a -s -j src/buildstream > analysis/cc.json
# radon cc -a -s src/buildstream
# - |
# echo "Calculating Raw Metrics"
# radon raw -s -j src/buildstream > analysis/raw.json
# radon raw -s src/buildstream
# except:
# - schedules
# artifacts:
# paths:
# - analysis/
# # Collate coverage reports
# #
# coverage:
# stage: post
# coverage: '/TOTAL +\d+ +\d+ +(\d+\.\d+)%/'
# script:
# - cp -a .coverage-reports/ ./coverage-sources
# - tox -e coverage
# - cp -a .coverage-reports/ ./coverage-report
# dependencies:
# - tests-centos-7.6
# - tests-debian-9
# - tests-debian-10
# - tests-fedora-30
# - tests-fedora-31
# - tests-fedora-missing-deps
# - tests-fedora-update-deps
# - tests-remote-execution
# - tests-ubuntu-18.04
# - tests-unix
# except:
# - schedules
# artifacts:
# paths:
# - coverage-sources/
# - coverage-report/
# # Deploy, only for merges which land on master branch.
# #
# pages:
# stage: publish
# dependencies:
# - coverage
# - docs
# variables:
# ACME_DIR: public/.well-known/acme-challenge
# COVERAGE_DIR: public/coverage
# script:
# - mkdir -p ${ACME_DIR}
# # Required to finish the creation of the Let's Encrypt certificate,
# # which allows using https://docs.buildstream.build/ for accessing
# # the documentation.
# - echo ${ACME_CHALLENGE} > ${ACME_DIR}/$(echo ${ACME_CHALLENGE} | cut -c1-43)
# - mkdir -p ${COVERAGE_DIR}
# - cp -a ./coverage-report/ ${COVERAGE_DIR}
# artifacts:
# paths:
# - public/
# only:
# #
# # FIXME:
# #
# # Ideally we want to publish to a different subdir of
# # pages depending on which stable branch we are building here,
# # not currently automatically supported but can be worked around.
# #
# # See https://gitlab.com/gitlab-org/gitlab-ce/issues/35141
# #
# - master
# except:
# - schedules