.gitlab-ci.yml 8.76 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
  TEST_COMMAND: "tox -- --color=yes --integration"
16
  COVERAGE_PREFIX: "${CI_JOB_NAME}."
17

18

19 20 21 22
#####################################################
#                    Test stage                     #
#####################################################

23 24
# Run premerge commits
#
25
.tests-template: &tests
26
  stage: test
27

28
  before_script:
29 30 31 32
  # Diagnostics
  - mount
  - df -h

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

38
  # Run the tests as a simple user to test for permission issues
39
  - su buildstream -c "${TEST_COMMAND}"
40

41 42 43
  after_script:
  except:
  - schedules
44 45
  artifacts:
    paths:
46
    - .coverage-reports
47

48
tests-debian-9:
49
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-debian:9-master-46405991
50
  <<: *tests
51

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

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

60
tests-ubuntu-18.04:
61
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-ubuntu:18.04-master-46405991
62
  <<: *tests
Valentin David's avatar
Valentin David committed
63

64
tests-python-3.7-stretch:
65
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-python:3.7-stretch-master-46405991
66 67 68 69 70 71 72 73
  <<: *tests

  variables:
    # Note that we explicitly specify TOXENV in this case because this
    # image has both 3.6 and 3.7 versions. python3.6 cannot be removed because
    # some of our base dependencies declare it as their runtime dependency.
    TOXENV: py37

Benjamin Schubert's avatar
Benjamin Schubert committed
74 75
tests-centos-7.6:
  <<: *tests
76
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-centos:7.6.1810-master-46405991
Benjamin Schubert's avatar
Benjamin Schubert committed
77

78
overnight-fedora-28-aarch64:
79
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:aarch64-28-master-46405991
Valentin David's avatar
Valentin David committed
80 81
  tags:
    - aarch64
82 83 84 85
  <<: *tests
  # We need to override the exclusion from the template
  # in order to run on schedules
  except: []
86 87
  only:
  - schedules
88 89 90 91 92 93
  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++
94

95
tests-unix:
96 97
  # 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
98
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:28-master-46405991
99
  <<: *tests
100 101
  variables:
    BST_FORCE_BACKEND: "unix"
102

103
  script:
104

105
    # We remove the Bubblewrap and OSTree packages here so that we catch any
106 107
    # codepaths that try to use them. Removing OSTree causes fuse-libs to
    # disappear unless we mark it as user-installed.
108
    - dnf mark install fuse-libs systemd-udev
109
    - dnf erase -y bubblewrap ostree
110 111

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

114 115
tests-fedora-missing-deps:
  # Ensure that tests behave nicely while missing bwrap and ostree
116
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:28-master-46405991
117 118 119 120 121 122
  <<: *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.
123
    - dnf mark install fuse-libs systemd-udev
124 125 126 127 128
    - dnf erase -y bubblewrap ostree

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

129
    - ${TEST_COMMAND}
130

131 132 133 134
tests-fedora-update-deps:
  # Check if the tests pass after updating requirements to their latest
  # allowed version.
  allow_failure: true
135
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:28-master-46405991
136 137 138 139 140 141 142 143 144 145 146
  <<: *tests

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

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

    - su buildstream -c "${TEST_COMMAND}"

147 148 149 150 151 152 153 154 155 156 157 158
# Lint separately from testing
lint:
  stage: test

  before_script:
  # Diagnostics
  - python3 --version

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

160 161 162 163 164 165 166 167 168 169 170 171 172
tests-wsl:
  stage: test
  variables:
    LC_ALL: C.UTF-8
    LANG: C.UTF-8
  tags:
  - wsl
  before_script:
  - mount
  - df -h

  script:
  - "${TEST_COMMAND}"
173
  when: manual
174

175 176 177 178
# Automatically build documentation for every commit, we want to know
# if building documentation fails even if we're not deploying it.
docs:
  stage: test
179 180
  variables:
    BST_FORCE_SESSION_REBUILD: 1
181
  script:
182 183
  - env BST_SOURCE_CACHE="$(pwd)/cache/integration-cache/sources" tox -e docs
  - mv doc/build/html public
184 185
  except:
  - schedules
186 187 188 189
  artifacts:
    paths:
    - public/

190 191 192
.overnight-tests: &overnight-tests-template
  stage: test
  variables:
Tiago Gomes's avatar
Tiago Gomes committed
193
    BST_EXT_URL: git+https://gitlab.com/BuildStream/bst-external.git
194
    BST_EXT_REF: 0.9.0-0-g63a19e8068bd777bd9cd59b1a9442f9749ea5a85
195
    FD_SDK_REF: freedesktop-sdk-18.08.25-0-g250939d465d6dd7768a215f1fa59c4a3412fc337
196
  before_script:
197 198 199 200 201 202
  - |
    mkdir -p "${HOME}/.config"
    cat <<EOF >"${HOME}/.config/buildstream.conf"
    scheduler:
      fetchers: 2
    EOF
203 204
  - pip3 install -r requirements/requirements.txt -r requirements/plugin-requirements.txt
  - pip3 install --no-index .
Tiago Gomes's avatar
Tiago Gomes committed
205
  - pip3 install --user -e ${BST_EXT_URL}@${BST_EXT_REF}#egg=bst_ext
206
  - git clone https://gitlab.com/freedesktop-sdk/freedesktop-sdk.git
Tiago Gomes's avatar
Tiago Gomes committed
207
  - git -C freedesktop-sdk checkout ${FD_SDK_REF}
208 209 210
  artifacts:
    paths:
    - "${HOME}/.cache/buildstream/logs"
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228
  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
229

230
# Check code quality with gitlab's built-in feature.
231
#
232
code_quality:
233
  image: docker:stable
234
  stage: test
235 236 237 238 239 240 241 242 243 244 245 246
  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
247 248
  except:
  - schedules
249
  artifacts:
250
    paths: [gl-code-quality-report.json]
251

252 253 254 255
#####################################################
#                    Post stage                     #
#####################################################

256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277
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

278 279
  except:
  - schedules
280 281 282 283
  artifacts:
    paths:
    - analysis/

284 285 286
# Collate coverage reports
#
coverage:
287
  stage: post
288
  coverage: '/TOTAL +\d+ +\d+ +(\d+\.\d+)%/'
289
  script:
290 291 292
    - cp -a .coverage-reports/ ./coverage-sources
    - tox -e coverage
    - cp -a .coverage-reports/ ./coverage-report
293
  dependencies:
294
  - tests-debian-9
295
  - tests-fedora-28
296
  - tests-fedora-29
297 298
  - tests-fedora-missing-deps
  - tests-ubuntu-18.04
299
  - tests-unix
300 301
  except:
  - schedules
302 303 304 305
  artifacts:
    paths:
    - coverage-sources/
    - coverage-report/
306

307
# Deploy, only for merges which land on master branch.
308
#
309
pages:
310 311 312
  stage: post
  dependencies:
  - docs
Tiago Gomes's avatar
Tiago Gomes committed
313 314
  variables:
    ACME_DIR: public/.well-known/acme-challenge
315
  script:
316
  - mkdir -p ${ACME_DIR}
Tiago Gomes's avatar
Tiago Gomes committed
317 318 319 320
    # 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)
321 322 323 324
  artifacts:
    paths:
    - public/
  only:
325 326 327 328 329 330 331 332 333
  #
  # 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
  #
334
  - master
335 336
  except:
  - schedules