image: buildstream/buildstream-fedora:master-26-3fd7fe1 cache: paths: - cache/buildstream/sources/ stages: - dist - test - coverage - docs before_script: # Diagnostics - mount - df -h # Store cache in the project directory - if [ -d "$(pwd)/cache" ]; then chmod -R a+rw "$(pwd)/cache"; fi - export XDG_CACHE_HOME="$(pwd)/cache" - adduser -m buildstream - chown -R buildstream:buildstream . # Create a source distribution # distcheck: stage: dist 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/ # Run premerge commits # pytest_linux: stage: test script: # 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' # Go back to the toplevel and collect our reports - cd ../.. - mkdir -p coverage-pytest-linux/ - cp dist/buildstream/.coverage.* coverage-pytest-linux/coverage.pytest-linux artifacts: paths: - coverage-pytest-linux/ # Run integration tests # integration_linux: stage: test script: - cd dist && ./install.sh && cd .. - cd integration-tests # We run as a simple user to test for permission issues - su buildstream -c './run-test.sh --arg --colors --cov ../.coveragerc --sources ${XDG_CACHE_HOME}/buildstream/sources test' - cd .. - mkdir -p coverage-linux/ - cp integration-tests/.coverage coverage-linux/coverage.linux - cp -a integration-tests/tmp/logs logs-linux artifacts: paths: - coverage-linux/ - logs-linux/ dependencies: - distcheck pytest_unix: stage: test variables: BST_FORCE_BACKEND: "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 # 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 # Go back to the toplevel and collect our reports - cd ../.. - mkdir -p coverage-pytest-unix - cp dist/buildstream/.coverage.* coverage-pytest-unix/coverage.pytest-unix artifacts: paths: - coverage-pytest-unix/ integration_unix: stage: test variables: BST_FORCE_BACKEND: "unix" script: - cd dist && ./install.sh && cd .. - cd integration-tests # Since the unix platform is required to run as root, no user change required - ./run-test.sh --arg --colors --cov ../.coveragerc --sources ${XDG_CACHE_HOME}/buildstream/sources test - cd .. - mkdir -p coverage-unix/ - cp integration-tests/.coverage coverage-unix/coverage.unix - cp -a integration-tests/tmp/logs logs-unix artifacts: paths: - coverage-unix/ - logs-unix/ dependencies: - distcheck # Collate coverage reports # coverage: stage: coverage script: - pip3 install --no-index . - mkdir report - cd report - cp ../coverage-linux/coverage.linux .coverage - cp ../coverage-unix/coverage.unix . - coverage combine --rcfile=../.coveragerc -a ../coverage-unix/coverage.unix - cp ../coverage-pytest-linux/coverage.pytest-linux . - coverage combine --rcfile=../.coveragerc -a coverage.pytest-linux - cp ../coverage-pytest-unix/coverage.pytest-unix . - coverage combine --rcfile=../.coveragerc -a coverage.pytest-unix - coverage report --rcfile=../.coveragerc -m dependencies: - pytest_linux - integration_linux - pytest_unix - integration_unix # Automatically build documentation, only for merges which land # on master branch. # # Note: We still do not enforce a consistent installation of python2 # or sphinx, as python2 will significantly grow the backing image. # pages: stage: docs script: - dnf install -y python2 - pip3 install sphinx - pip3 install sphinx-click - cd dist && ./unpack.sh && cd buildstream - pip3 install . - make -C doc - cd ../.. - mv dist/buildstream/doc/build/html public artifacts: paths: - public/ only: - master dependencies: - distcheck