.gitlab-ci.yml 8.87 KB
Newer Older
1
image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-debian:9-master-46405991
2

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

8 9
stages:
  - test
10
  - post
11

12 13 14
variables:
  PYTEST_ADDOPTS: "--color=yes"
  INTEGRATION_CACHE: "${CI_PROJECT_DIR}/cache/integration-cache"
15 16 17
  PYTEST_ARGS: "--color=yes --integration -n 2"
  TEST_COMMAND: "tox -- ${PYTEST_ARGS}"
  EXTERNAL_TESTS_COMMAND: "tox -e py{35,36,37}-external -- ${PYTEST_ARGS}"
18
  COVERAGE_PREFIX: "${CI_JOB_NAME}."
19

20

21 22 23 24
#####################################################
#                    Test stage                     #
#####################################################

25 26
# Run premerge commits
#
27
.tests-template: &tests
28
  stage: test
29

30
  before_script:
31 32 33
  # Diagnostics
  - mount
  - df -h
34
  - tox --version
35

36
  script:
Benjamin Schubert's avatar
Benjamin Schubert committed
37
  - mkdir -p "${INTEGRATION_CACHE}"
38 39 40
  - useradd -Um buildstream
  - chown -R buildstream:buildstream .

41
  # Run the tests as a simple user to test for permission issues
42
  - su buildstream -c "${TEST_COMMAND}"
43
  - su buildstream -c "${EXTERNAL_TESTS_COMMAND}"
44

45 46 47
  after_script:
  except:
  - schedules
48 49
  artifacts:
    paths:
50
    - .coverage-reports
51

52
tests-debian-9:
53
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-debian:9-master-46405991
54
  <<: *tests
55

56
tests-fedora-28:
57
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:28-master-46405991
58
  <<: *tests
59

60 61 62 63
tests-fedora-29:
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:29-master-47052095
  <<: *tests

64
tests-ubuntu-18.04:
65
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-ubuntu:18.04-master-46405991
66
  <<: *tests
Valentin David's avatar
Valentin David committed
67

Benjamin Schubert's avatar
Benjamin Schubert committed
68 69
tests-centos-7.6:
  <<: *tests
70
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-centos:7.6.1810-master-46405991
Benjamin Schubert's avatar
Benjamin Schubert committed
71

72 73
overnight-fedora-29-aarch64:
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:aarch64-29-master-47052095
Valentin David's avatar
Valentin David committed
74 75
  tags:
    - aarch64
76 77 78 79
  <<: *tests
  # We need to override the exclusion from the template
  # in order to run on schedules
  except: []
80 81
  only:
  - schedules
82 83 84 85 86 87
  before_script:
    # grpcio needs to be compiled from source on aarch64 so we additionally
    # need a C++ compiler here.
    # FIXME: Ideally this would be provided by the base image. This will be
    # unblocked by https://gitlab.com/BuildStream/buildstream-docker-images/issues/34
    - dnf install -y gcc-c++
88

89
tests-unix:
90 91
  # 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
92
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:29-master-47052095
93
  <<: *tests
94 95
  variables:
    BST_FORCE_BACKEND: "unix"
96

97
  script:
98

99
    # We remove the Bubblewrap and OSTree packages here so that we catch any
100 101
    # codepaths that try to use them. Removing OSTree causes fuse-libs to
    # disappear unless we mark it as user-installed.
102
    - dnf mark install fuse-libs systemd-udev
103
    - dnf erase -y bubblewrap ostree
104 105

    # Since the unix platform is required to run as root, no user change required
106
    - ${TEST_COMMAND}
107

108 109
tests-fedora-missing-deps:
  # Ensure that tests behave nicely while missing bwrap and ostree
110
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:29-master-47052095
111 112 113 114 115 116
  <<: *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.
117
    - dnf mark install fuse-libs systemd-udev
118 119 120 121 122
    - dnf erase -y bubblewrap ostree

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

123
    - ${TEST_COMMAND}
124

125 126 127 128
tests-fedora-update-deps:
  # Check if the tests pass after updating requirements to their latest
  # allowed version.
  allow_failure: true
129
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:29-master-47052095
130 131 132 133 134 135 136 137 138 139 140
  <<: *tests

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

    - make --always-make --directory requirements
    - cat requirements/*.txt

    - su buildstream -c "${TEST_COMMAND}"

141 142 143 144 145 146 147 148 149 150 151 152
# Lint separately from testing
lint:
  stage: test

  before_script:
  # Diagnostics
  - python3 --version

  script:
  - tox -e lint
  except:
  - schedules
153

154
tests-wsl-master:
155 156 157 158 159 160 161 162 163
  stage: test
  variables:
    LC_ALL: C.UTF-8
    LANG: C.UTF-8
  tags:
  - wsl
  before_script:
  - mount
  - df -h
164
  - PATH=/root/.local/bin:$PATH tox --version
165 166 167 168
  script:
  - PATH=/root/.local/bin:$PATH ${TEST_COMMAND}
  only:
  - master
169

170 171 172 173 174 175 176 177 178 179 180
tests-wsl-non-master:
  stage: test
  variables:
    LC_ALL: C.UTF-8
    LANG: C.UTF-8
  tags:
  - wsl
  before_script:
  - mount
  - df -h
  - PATH=/root/.local/bin:$PATH tox --version
181
  script:
182
  - PATH=/root/.local/bin:$PATH ${TEST_COMMAND}
183 184 185
  when: manual
  except:
  - master
186

187 188 189 190
# Automatically build documentation for every commit, we want to know
# if building documentation fails even if we're not deploying it.
docs:
  stage: test
191 192
  variables:
    BST_FORCE_SESSION_REBUILD: 1
193
  script:
194 195
  - env BST_SOURCE_CACHE="$(pwd)/cache/integration-cache/sources" tox -e docs
  - mv doc/build/html public
196 197
  except:
  - schedules
198 199 200 201
  artifacts:
    paths:
    - public/

202 203 204
.overnight-tests: &overnight-tests-template
  stage: test
  variables:
Tiago Gomes's avatar
Tiago Gomes committed
205
    BST_EXT_URL: git+https://gitlab.com/BuildStream/bst-external.git
206
    BST_EXT_REF: 0.9.0-0-g63a19e8068bd777bd9cd59b1a9442f9749ea5a85
207
    FD_SDK_REF: freedesktop-sdk-18.08.28-0-g29cf2127554cdd83a1532afa53824b23cee2eed3
208
  before_script:
209 210 211 212 213 214
  - |
    mkdir -p "${HOME}/.config"
    cat <<EOF >"${HOME}/.config/buildstream.conf"
    scheduler:
      fetchers: 2
    EOF
215 216
  - pip3 install -r requirements/requirements.txt -r requirements/plugin-requirements.txt
  - pip3 install --no-index .
Tiago Gomes's avatar
Tiago Gomes committed
217
  - pip3 install --user -e ${BST_EXT_URL}@${BST_EXT_REF}#egg=bst_ext
218
  - git clone https://gitlab.com/freedesktop-sdk/freedesktop-sdk.git
Tiago Gomes's avatar
Tiago Gomes committed
219
  - git -C freedesktop-sdk checkout ${FD_SDK_REF}
220 221 222
  artifacts:
    paths:
    - "${HOME}/.cache/buildstream/logs"
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
  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/project.conf
  - make -C freedesktop-sdk
  tags:
  - overnight-tests
240

241
# Check code quality with gitlab's built-in feature.
242
#
243
code_quality:
244
  image: docker:stable
245
  stage: test
246 247 248 249 250 251 252 253 254 255 256 257
  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
258 259
  except:
  - schedules
260
  artifacts:
261
    paths: [gl-code-quality-report.json]
262

263 264 265 266
#####################################################
#                    Post stage                     #
#####################################################

267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288
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

289 290
  except:
  - schedules
291 292 293 294
  artifacts:
    paths:
    - analysis/

295 296 297
# Collate coverage reports
#
coverage:
298
  stage: post
299
  coverage: '/TOTAL +\d+ +\d+ +(\d+\.\d+)%/'
300
  script:
301 302 303
    - cp -a .coverage-reports/ ./coverage-sources
    - tox -e coverage
    - cp -a .coverage-reports/ ./coverage-report
304
  dependencies:
305
  - tests-centos-7.6
306
  - tests-debian-9
307
  - tests-fedora-28
308
  - tests-fedora-29
309
  - tests-fedora-missing-deps
310
  - tests-fedora-update-deps
311
  - tests-ubuntu-18.04
312
  - tests-unix
313 314
  except:
  - schedules
315 316 317 318
  artifacts:
    paths:
    - coverage-sources/
    - coverage-report/
319

320
# Deploy, only for merges which land on master branch.
321
#
322
pages:
323 324 325
  stage: post
  dependencies:
  - docs
Tiago Gomes's avatar
Tiago Gomes committed
326 327
  variables:
    ACME_DIR: public/.well-known/acme-challenge
328
  script:
329
  - mkdir -p ${ACME_DIR}
Tiago Gomes's avatar
Tiago Gomes committed
330 331 332 333
    # 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)
334 335 336 337
  artifacts:
    paths:
    - public/
  only:
338 339 340 341 342 343 344 345 346
  #
  # 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
  #
347
  - master
348 349
  except:
  - schedules