| image: buildstream/buildstream-debian:master-88-4d92c106 |
| |
| cache: |
| key: "$CI_JOB_NAME-" |
| paths: |
| - cache/ |
| |
| stages: |
| - prepare |
| - test |
| - post |
| |
| ##################################################### |
| # 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 *)) |
| |
| # Create an installer script |
| - | |
| cat > dist/install.sh << EOF |
| #!/bin/sh |
| tar -zxf ${tarball} |
| cd ${tarball%.tar.gz} |
| pip3 install --no-index . |
| EOF |
| |
| # 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/install.sh |
| - chmod +x dist/unpack.sh |
| artifacts: |
| paths: |
| - dist/ |
| |
| |
| ##################################################### |
| # Test stage # |
| ##################################################### |
| |
| # Run premerge commits |
| # |
| .linux-tests-template: &linux-tests |
| stage: test |
| variables: |
| PYTEST_ADDOPTS: "--color=yes" |
| script: |
| # Diagnostics |
| - mount |
| - df -h |
| |
| - useradd -Um buildstream |
| - chown -R buildstream:buildstream . |
| |
| - export INTEGRATION_CACHE="$(pwd)/cache/integration-cache" |
| |
| # Unpack and get into dist/buildstream |
| - cd dist && ./unpack.sh |
| - chown -R buildstream:buildstream buildstream |
| - cd buildstream |
| |
| # Run the tests from the source distribution, We run as a simple |
| # user to test for permission issues |
| - su buildstream -c 'python3 setup.py test --index-url invalid://uri --addopts --integration' |
| |
| # Go back to the toplevel and collect our reports |
| - cd ../.. |
| - mkdir -p coverage-linux/ |
| - cp dist/buildstream/.coverage.* coverage-linux/coverage."${CI_JOB_NAME}" |
| artifacts: |
| paths: |
| - coverage-linux/ |
| |
| tests-debian-9: |
| image: buildstream/buildstream-debian:master-88-4d92c106 |
| <<: *linux-tests |
| |
| tests-fedora-27: |
| image: buildstream/buildstream-fedora:master-88-4d92c106 |
| <<: *linux-tests |
| |
| |
| 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/buildstream-fedora:master-88-4d92c106 |
| stage: test |
| variables: |
| BST_FORCE_BACKEND: "unix" |
| PYTEST_ADDOPTS: "--color=yes" |
| script: |
| |
| - export INTEGRATION_CACHE="$(pwd)/cache/integration-cache" |
| |
| # 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 |
| |
| # Unpack and get into dist/buildstream |
| - cd dist && ./unpack.sh && cd buildstream |
| |
| # Since the unix platform is required to run as root, no user change required |
| - python3 setup.py test --index-url invalid://uri --addopts --integration |
| |
| # Go back to the toplevel and collect our reports |
| - cd ../.. |
| - mkdir -p coverage-unix/ |
| - cp dist/buildstream/.coverage.* coverage-unix/coverage.unix |
| artifacts: |
| paths: |
| - coverage-unix/ |
| - logs-unix/ |
| |
| |
| # 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" |
| - pip3 install sphinx |
| - pip3 install sphinx-click |
| - pip3 install sphinx_rtd_theme |
| - cd dist && ./unpack.sh && cd buildstream |
| - pip3 install . |
| - make BST_FORCE_SESSION_REBUILD=1 -C doc |
| - cd ../.. |
| - mv dist/buildstream/doc/build/html public |
| artifacts: |
| paths: |
| - public/ |
| |
| |
| ##################################################### |
| # Post stage # |
| ##################################################### |
| |
| # Check code quality with codeclimate |
| # This needs some refactoring; we probably just want to provide the codeclimate.json directly |
| # as an output of radon, with some conversion |
| # |
| codequality: |
| image: docker:stable |
| stage: post |
| 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 |
| artifacts: |
| paths: [codeclimate.json] |
| |
| 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 |
| |
| 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.unix . |
| - 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-unix |
| - source_dist |
| |
| # Deploy, only for merges which land on master branch. |
| # |
| pages: |
| stage: post |
| dependencies: |
| - source_dist |
| - docs |
| script: |
| - find public/ |
| 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 |