image: buildstream/testsuite-debian:9-master-123-7ce6581b cache: key: "$CI_JOB_NAME-" paths: - cache/ stages: - prepare - test - post variables: PYTEST_ADDOPTS: "--color=yes" INTEGRATION_CACHE: "${CI_PROJECT_DIR}/cache/integration-cache" TEST_COMMAND: 'python3 setup.py test --index-url invalid://uri --addopts --integration' ##################################################### # Prepare stage # ##################################################### # Create a source distribution # source_dist: stage: prepare script: # Generate the source distribution tarball # - python3 setup.py sdist - tar -ztf dist/* - tarball=$(cd dist && echo $(ls *)) # Verify that the source distribution tarball can be installed correctly # - pip3 install dist/*.tar.gz - bst --version # unpack tarball as `dist/buildstream` directory - | cat > dist/unpack.sh << EOF #!/bin/sh tar -zxf ${tarball} mv ${tarball%.tar.gz} buildstream EOF # Make our helpers executable - chmod +x dist/unpack.sh artifacts: paths: - dist/ ##################################################### # Test stage # ##################################################### # Run premerge commits # .tests-template: &tests stage: test variables: COVERAGE_DIR: coverage-linux before_script: # Diagnostics - mount - df -h # Unpack - cd dist && ./unpack.sh - cd buildstream script: - useradd -Um buildstream - chown -R buildstream:buildstream . # Run the tests from the source distribution, We run as a simple # user to test for permission issues - su buildstream -c "${TEST_COMMAND}" after_script: # Collect our reports - mkdir -p ${COVERAGE_DIR} - cp dist/buildstream/.coverage ${COVERAGE_DIR}/coverage."${CI_JOB_NAME}" except: - schedules artifacts: paths: - ${COVERAGE_DIR} tests-debian-9: image: buildstream/testsuite-debian:9-master-123-7ce6581b <<: *tests tests-fedora-27: image: buildstream/testsuite-fedora:27-master-123-7ce6581b <<: *tests tests-fedora-28: image: buildstream/testsuite-fedora:28-master-123-7ce6581b <<: *tests tests-ubuntu-18.04: image: buildstream/testsuite-ubuntu:18.04-master-123-7ce6581b <<: *tests overnight-fedora-28-aarch64: image: buildstream/testsuite-fedora:aarch64-28-master-123-7ce6581b 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: buildstream/testsuite-fedora:27-master-123-7ce6581b <<: *tests variables: BST_FORCE_BACKEND: "unix" COVERAGE_DIR: coverage-unix 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 - dnf erase -y bubblewrap ostree # Since the unix platform is required to run as root, no user change required - ${TEST_COMMAND} tests-fedora-missing-deps: # Ensure that tests behave nicely while missing bwrap and ostree image: buildstream/testsuite-fedora:28-master-123-7ce6581b <<: *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 - dnf erase -y bubblewrap ostree - useradd -Um buildstream - chown -R buildstream:buildstream . - ${TEST_COMMAND} # Automatically build documentation for every commit, we want to know # if building documentation fails even if we're not deploying it. # Note: We still do not enforce a consistent installation of python3-sphinx, # as it will significantly grow the backing image. docs: stage: test script: - export BST_SOURCE_CACHE="$(pwd)/cache/integration-cache/sources" # Currently sphinx_rtd_theme does not support Sphinx >1.8, this breaks search functionality - pip3 install sphinx==1.7.9 - pip3 install sphinx-click - pip3 install sphinx_rtd_theme - cd dist && ./unpack.sh && cd buildstream - make BST_FORCE_SESSION_REBUILD=1 -C doc - cd ../.. - mv dist/buildstream/doc/build/html public except: - schedules artifacts: paths: - public/ .overnight-tests: &overnight-tests-template stage: test variables: BST_EXT_URL: git+https://gitlab.com/BuildStream/bst-external.git BST_EXT_REF: 573843768f4d297f85dc3067465b3c7519a8dcc3 # 0.7.0 FD_SDK_REF: 612f66e218445eee2b1a9d7dd27c9caba571612e # freedesktop-sdk-18.08.19-54-g612f66e2 before_script: - | mkdir -p "${HOME}/.config" cat <"${HOME}/.config/buildstream.conf" scheduler: fetchers: 2 EOF - (cd dist && ./unpack.sh && cd buildstream && pip3 install .) - pip3 install --user -e ${BST_EXT_URL}@${BST_EXT_REF}#egg=bst_ext - git clone https://gitlab.com/freedesktop-sdk/freedesktop-sdk.git - git -C freedesktop-sdk checkout ${FD_SDK_REF} 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/bootstrap/project.conf - sed -i '/artifacts:/,+1 d' freedesktop-sdk/project.conf - make -C freedesktop-sdk tags: - overnight-tests # Check code quality with gitlab's built-in feature. # code_quality: image: docker:stable stage: test variables: DOCKER_DRIVER: overlay2 allow_failure: true services: - docker:stable-dind script: - export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') - docker run --env SOURCE_CODE="$PWD" --volume "$PWD":/code --volume /var/run/docker.sock:/var/run/docker.sock "registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code except: - schedules artifacts: paths: [gl-code-quality-report.json] ##################################################### # Post stage # ##################################################### analysis: stage: post script: - | pip3 install radon mkdir analysis - | echo "Calculating Maintainability Index" radon mi -s -j buildstream > analysis/mi.json radon mi -s buildstream - | echo "Calculating Cyclomatic Complexity" radon cc -a -s -j buildstream > analysis/cc.json radon cc -a -s buildstream - | echo "Calculating Raw Metrics" radon raw -s -j buildstream > analysis/raw.json radon raw -s buildstream except: - schedules artifacts: paths: - analysis/ # Collate coverage reports # coverage: stage: post coverage: '/TOTAL +\d+ +\d+ +(\d+\.\d+)%/' script: - cd dist && ./unpack.sh && cd buildstream - pip3 install --no-index . - mkdir report - cd report - cp ../../../coverage-unix/coverage.* . - cp ../../../coverage-linux/coverage.* . - ls coverage.* - coverage combine --rcfile=../.coveragerc -a coverage.* - coverage report --rcfile=../.coveragerc -m dependencies: - tests-debian-9 - tests-fedora-27 - tests-fedora-28 - tests-unix - source_dist except: - schedules # Deploy, only for merges which land on master branch. # pages: stage: post dependencies: - source_dist - docs variables: ACME_DIR: public/.well-known/acme-challenge 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) 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