.gitlab-ci.yml 8.13 KB
Newer Older
Tristan Maat's avatar
Tristan Maat committed
1
image: buildstream/testsuite-debian:9-master-119-552f5fc6
2

3
cache:
4
  key: "$CI_JOB_NAME-"
5
  paths:
6
    - cache/
7

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

13 14 15 16
#####################################################
#                  Prepare stage                    #
#####################################################

17 18
# Create a source distribution
#
19 20
source_dist:
  stage: prepare
21 22 23 24 25 26 27 28
  script:

  # Generate the source distribution tarball
  #
  - python3 setup.py sdist
  - tar -ztf dist/*
  - tarball=$(cd dist && echo $(ls *))

29 30 31 32 33
  # Verify that the source distribution tarball can be installed correctly
  #
  - pip3 install dist/*.tar.gz
  - bst --version

34 35 36 37 38 39 40 41 42 43 44 45 46 47
  # 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/

48

49 50 51 52
#####################################################
#                    Test stage                     #
#####################################################

53 54
# Run premerge commits
#
55
.linux-tests-template: &linux-tests
56
  stage: test
57 58
  variables:
    PYTEST_ADDOPTS: "--color=yes"
59
  script:
60 61 62 63 64 65
  # Diagnostics
  - mount
  - df -h

  - useradd -Um buildstream
  - chown -R buildstream:buildstream .
66

67
  - export INTEGRATION_CACHE="$(pwd)/cache/integration-cache"
68

69 70 71 72 73 74 75
  # 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
76
  - su buildstream -c 'python3 setup.py test --index-url invalid://uri --addopts --integration'
77

78 79
  # Go back to the toplevel and collect our reports
  - cd ../..
80
  - mkdir -p coverage-linux/
81
  - cp dist/buildstream/.coverage coverage-linux/coverage."${CI_JOB_NAME}"
82 83 84
  artifacts:
    paths:
    - coverage-linux/
85

86
tests-debian-9:
Valentin David's avatar
Valentin David committed
87
  image: buildstream/testsuite-debian:9-master-123-7ce6581b
88
  <<: *linux-tests
89 90
  except:
  - schedules
91

92
tests-fedora-27:
Valentin David's avatar
Valentin David committed
93
  image: buildstream/testsuite-fedora:27-master-123-7ce6581b
94
  <<: *linux-tests
95 96
  except:
  - schedules
97

98
tests-fedora-28:
Valentin David's avatar
Valentin David committed
99
  image: buildstream/testsuite-fedora:28-master-123-7ce6581b
100
  <<: *linux-tests
101 102
  except:
  - schedules
103

104
tests-ubuntu-18.04:
Valentin David's avatar
Valentin David committed
105 106
  image: buildstream/testsuite-ubuntu:18.04-master-123-7ce6581b
  <<: *linux-tests
107 108
  except:
  - schedules
Valentin David's avatar
Valentin David committed
109

110
overnight-fedora-28-aarch64:
Valentin David's avatar
Valentin David committed
111 112 113
  image: buildstream/testsuite-fedora:aarch64-28-master-123-7ce6581b
  tags:
    - aarch64
114
  <<: *linux-tests
115 116
  only:
  - schedules
117

118
tests-unix:
119 120
  # 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
Valentin David's avatar
Valentin David committed
121
  image: buildstream/testsuite-fedora:27-master-123-7ce6581b
122 123 124
  stage: test
  variables:
    BST_FORCE_BACKEND: "unix"
125
    PYTEST_ADDOPTS: "--color=yes"
126
  script:
127

128
    - export INTEGRATION_CACHE="$(pwd)/cache/integration-cache"
129

130
    # We remove the Bubblewrap and OSTree packages here so that we catch any
131 132 133
    # 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
134
    - dnf erase -y bubblewrap ostree
135

136 137 138
    # Unpack and get into dist/buildstream
    - cd dist && ./unpack.sh && cd buildstream

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

142 143
    # Go back to the toplevel and collect our reports
    - cd ../..
144
    - mkdir -p coverage-unix/
145
    - cp dist/buildstream/.coverage coverage-unix/coverage.unix
146 147
  except:
  - schedules
148 149
  artifacts:
    paths:
150 151
    - coverage-unix/
    - logs-unix/
152

153 154 155

# Automatically build documentation for every commit, we want to know
# if building documentation fails even if we're not deploying it.
156 157
# Note: We still do not enforce a consistent installation of python3-sphinx,
#       as it will significantly grow the backing image.
158 159 160
docs:
  stage: test
  script:
161
  - export BST_SOURCE_CACHE="$(pwd)/cache/integration-cache/sources"
162 163
  # Currently sphinx_rtd_theme does not support Sphinx >1.8, this breaks search functionality
  - pip3 install sphinx==1.7.9
164
  - pip3 install sphinx-click
165
  - pip3 install sphinx_rtd_theme
166
  - cd dist && ./unpack.sh && cd buildstream
167
  - make BST_FORCE_SESSION_REBUILD=1 -C doc
168 169
  - cd ../..
  - mv dist/buildstream/doc/build/html public
170 171
  except:
  - schedules
172 173 174 175
  artifacts:
    paths:
    - public/

176 177 178
.overnight-tests: &overnight-tests-template
  stage: test
  variables:
Tiago Gomes's avatar
Tiago Gomes committed
179 180
    BST_EXT_URL: git+https://gitlab.com/BuildStream/bst-external.git
    BST_EXT_REF: 1d6ab71151b93c8cbc0a91a36ffe9270f3b835f1 # 0.5.1
181
    FD_SDK_REF: 88d7c22c2281b987faa02edd57df80d430eecf1f # 18.08.11-35-g88d7c22c
182
  before_script:
183 184 185 186 187 188
  - |
    mkdir -p "${HOME}/.config"
    cat <<EOF >"${HOME}/.config/buildstream.conf"
    scheduler:
      fetchers: 2
    EOF
189
  - (cd dist && ./unpack.sh && cd buildstream && pip3 install .)
Tiago Gomes's avatar
Tiago Gomes committed
190
  - pip3 install --user -e ${BST_EXT_URL}@${BST_EXT_REF}#egg=bst_ext
191
  - git clone https://gitlab.com/freedesktop-sdk/freedesktop-sdk.git
Tiago Gomes's avatar
Tiago Gomes committed
192
  - git -C freedesktop-sdk checkout ${FD_SDK_REF}
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
  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
211

212
# Check code quality with gitlab's built-in feature.
213
#
214
code_quality:
215
  image: docker:stable
216
  stage: test
217 218 219 220 221 222 223 224 225 226 227 228
  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
229 230
  except:
  - schedules
231
  artifacts:
232
    paths: [gl-code-quality-report.json]
233

234 235 236 237
#####################################################
#                    Post stage                     #
#####################################################

238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
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

260 261
  except:
  - schedules
262 263 264 265
  artifacts:
    paths:
    - analysis/

266 267 268
# Collate coverage reports
#
coverage:
269
  stage: post
270
  coverage: '/TOTAL +\d+ +\d+ +(\d+\.\d+)%/'
271
  script:
272
    - cd dist && ./unpack.sh && cd buildstream
273
    - pip3 install --no-index .
274 275
    - mkdir report
    - cd report
276
    - cp ../../../coverage-unix/coverage.unix .
277
    - cp ../../../coverage-linux/coverage.* .
278
    - ls coverage.*
279
    - coverage combine --rcfile=../.coveragerc -a coverage.*
280
    - coverage report --rcfile=../.coveragerc -m
281
  dependencies:
282
  - tests-debian-9
283
  - tests-fedora-27
284
  - tests-fedora-28
285
  - tests-unix
286
  - source_dist
287 288
  except:
  - schedules
289

290
# Deploy, only for merges which land on master branch.
291
#
292
pages:
293 294 295 296
  stage: post
  dependencies:
  - source_dist
  - docs
Tiago Gomes's avatar
Tiago Gomes committed
297 298
  variables:
    ACME_DIR: public/.well-known/acme-challenge
299
  script:
300
  - mkdir -p ${ACME_DIR}
Tiago Gomes's avatar
Tiago Gomes committed
301 302 303 304
    # 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)
305 306 307 308
  artifacts:
    paths:
    - public/
  only:
309 310 311 312 313 314 315 316 317
  #
  # 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
  #
318
  - master
319 320
  except:
  - schedules