.gitlab-ci.yml 8.42 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 -n 2"
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

Benjamin Schubert's avatar
Benjamin Schubert committed
64 65
tests-centos-7.6:
  <<: *tests
66
  image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-centos:7.6.1810-master-46405991
Benjamin Schubert's avatar
Benjamin Schubert committed
67

68 69
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
70 71
  tags:
    - aarch64
72 73 74 75
  <<: *tests
  # We need to override the exclusion from the template
  # in order to run on schedules
  except: []
76 77
  only:
  - schedules
78 79 80 81 82 83
  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++
84

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

93
  script:
94

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

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

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

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

119
    - ${TEST_COMMAND}
120

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

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

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

    - su buildstream -c "${TEST_COMMAND}"

137 138 139 140 141 142 143 144 145 146 147 148
# Lint separately from testing
lint:
  stage: test

  before_script:
  # Diagnostics
  - python3 --version

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

150 151 152 153 154 155 156 157 158 159 160 161 162
tests-wsl:
  stage: test
  variables:
    LC_ALL: C.UTF-8
    LANG: C.UTF-8
  tags:
  - wsl
  before_script:
  - mount
  - df -h

  script:
  - "${TEST_COMMAND}"
163
  allow_failure: true
164

165 166 167 168
# Automatically build documentation for every commit, we want to know
# if building documentation fails even if we're not deploying it.
docs:
  stage: test
169 170
  variables:
    BST_FORCE_SESSION_REBUILD: 1
171
  script:
172 173
  - env BST_SOURCE_CACHE="$(pwd)/cache/integration-cache/sources" tox -e docs
  - mv doc/build/html public
174 175
  except:
  - schedules
176 177 178 179
  artifacts:
    paths:
    - public/

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

220
# Check code quality with gitlab's built-in feature.
221
#
222
code_quality:
223
  image: docker:stable
224
  stage: test
225 226 227 228 229 230 231 232 233 234 235 236
  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
237 238
  except:
  - schedules
239
  artifacts:
240
    paths: [gl-code-quality-report.json]
241

242 243 244 245
#####################################################
#                    Post stage                     #
#####################################################

246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267
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

268 269
  except:
  - schedules
270 271 272 273
  artifacts:
    paths:
    - analysis/

274 275 276
# Collate coverage reports
#
coverage:
277
  stage: post
278
  coverage: '/TOTAL +\d+ +\d+ +(\d+\.\d+)%/'
279
  script:
280 281 282
    - cp -a .coverage-reports/ ./coverage-sources
    - tox -e coverage
    - cp -a .coverage-reports/ ./coverage-report
283
  dependencies:
284
  - tests-centos-7.6
285
  - tests-debian-9
286
  - tests-fedora-28
287
  - tests-fedora-29
288
  - tests-fedora-missing-deps
289
  - tests-fedora-update-deps
290
  - tests-ubuntu-18.04
291
  - tests-unix
292 293
  except:
  - schedules
294 295 296 297
  artifacts:
    paths:
    - coverage-sources/
    - coverage-report/
298

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