.gitlab-ci.yml 4.68 KB
Newer Older
1
image: buildstream/buildstream-fedora:master-56-5d7ee17
2

Tristan Maat's avatar
Tristan Maat committed
3
cache:
4
  key: "$CI_JOB_NAME-"
Tristan Maat's avatar
Tristan Maat committed
5
  paths:
6
    - cache/
Tristan Maat's avatar
Tristan Maat committed
7

8
stages:
9
  - prepare
10
  - test
11
  - post
12

13
before_script:
14 15 16
  # Diagnostics
  - mount
  - df -h
17

18 19
  - adduser -m buildstream
  - chown -R buildstream:buildstream .
20

21 22 23 24
#####################################################
#                  Prepare stage                    #
#####################################################

25 26
# Create a source distribution
#
27 28
source_dist:
  stage: prepare
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
  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/

61 62 63 64
#####################################################
#                    Test stage                     #
#####################################################

65 66
# Run premerge commits
#
67
linux-tests:
68
  stage: test
69 70
  variables:
    PYTEST_ADDOPTS: "--color=yes"
71
  script:
72

73
  - export INTEGRATION_CACHE="$(pwd)/cache/integration-cache"
74

75 76 77 78 79 80 81
  # 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
82
  - su buildstream -c 'python3 setup.py test --index-url invalid://uri --addopts --integration'
83

84 85
  # Go back to the toplevel and collect our reports
  - cd ../..
86 87
  - mkdir -p coverage-linux/
  - cp dist/buildstream/.coverage.* coverage-linux/coverage.linux
88 89 90
  artifacts:
    paths:
    - coverage-linux/
91
  dependencies:
92
  - source_dist
93

94
unix-tests:
95 96 97
  stage: test
  variables:
    BST_FORCE_BACKEND: "unix"
98
    PYTEST_ADDOPTS: "--color=yes"
99
  script:
100

101
    - export INTEGRATION_CACHE="$(pwd)/cache/integration-cache"
102

103
    # We remove the Bubblewrap and OSTree packages here so that we catch any
104 105 106
    # 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
107
    - dnf erase -y bubblewrap ostree
108

109 110 111
    # Unpack and get into dist/buildstream
    - cd dist && ./unpack.sh && cd buildstream

112
    # Since the unix platform is required to run as root, no user change required
113
    - python3 setup.py test --index-url invalid://uri --addopts --integration
114

115 116
    # Go back to the toplevel and collect our reports
    - cd ../..
117
    - mkdir -p coverage-unix/
118
    - cp dist/buildstream/.coverage.* coverage-unix/coverage.unix
119 120
  artifacts:
    paths:
121 122
    - coverage-unix/
    - logs-unix/
123

124
  dependencies:
125 126 127 128 129 130 131 132 133 134 135 136 137 138
  - source_dist

# 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 python2
#       or sphinx, as python2 will significantly grow the backing image.
#
docs:
  stage: test
  script:
  - dnf install -y python2
  - pip3 install sphinx
  - pip3 install sphinx-click
139
  - pip3 install sphinx_rtd_theme
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
  - cd dist && ./unpack.sh && cd buildstream
  - pip3 install .
  - make -C doc
  - cd ../..
  - mv dist/buildstream/doc/build/html public
  artifacts:
    paths:
    - public/
  dependencies:
  - source_dist


#####################################################
#                    Post stage                     #
#####################################################
155

156 157 158
# Collate coverage reports
#
coverage:
159
  stage: post
160
  script:
161
    - cd dist && ./unpack.sh && cd buildstream
162
    - pip3 install --no-index .
163 164
    - mkdir report
    - cd report
165 166 167 168
    - cp ../../../coverage-linux/coverage.linux .
    - cp ../../../coverage-unix/coverage.unix .
    - coverage combine --rcfile=../.coveragerc -a coverage.linux
    - coverage combine --rcfile=../.coveragerc -a coverage.unix
169
    - coverage report --rcfile=../.coveragerc -m
170
  dependencies:
171 172 173
  - linux-tests
  - unix-tests
  - source_dist
174

175
# Deploy, only for merges which land on master branch.
176
#
177
pages:
178 179 180 181
  stage: post
  dependencies:
  - source_dist
  - docs
182
  script:
183
  - find public/
184 185 186 187
  artifacts:
    paths:
    - public/
  only:
188 189 190 191 192 193 194 195 196
  #
  # 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
  #
197
  - master