.gitlab-ci.yml 7.89 KB
Newer Older
1
image: buildstream/testsuite-debian:9-5da27168-32c47d1c
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 34 35 36
  script:
  - useradd -Um buildstream
  - chown -R buildstream:buildstream .

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

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

47
tests-debian-9:
48
  image: buildstream/testsuite-debian:9-5da27168-32c47d1c
49
  <<: *tests
50

51
tests-fedora-27:
52
  image: buildstream/testsuite-fedora:27-5da27168-32c47d1c
53
  <<: *tests
54

55
tests-fedora-28:
56
  image: buildstream/testsuite-fedora:28-5da27168-32c47d1c
57
  <<: *tests
58

59
tests-ubuntu-18.04:
60
  image: buildstream/testsuite-ubuntu:18.04-5da27168-32c47d1c
61
  <<: *tests
Valentin David's avatar
Valentin David committed
62

63 64 65 66 67 68 69 70 71 72
tests-python-3.7-stretch:
  image: buildstream/testsuite-python:3.7-stretch-a60f0c39
  <<: *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

73
overnight-fedora-28-aarch64:
74
  image: buildstream/testsuite-fedora:aarch64-28-5da27168-32c47d1c
Valentin David's avatar
Valentin David committed
75 76
  tags:
    - aarch64
77 78 79 80
  <<: *tests
  # We need to override the exclusion from the template
  # in order to run on schedules
  except: []
81 82
  only:
  - schedules
83 84 85 86 87 88
  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++
89

90
tests-unix:
91 92
  # 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
93
  image: buildstream/testsuite-fedora:27-5da27168-32c47d1c
94
  <<: *tests
95 96
  variables:
    BST_FORCE_BACKEND: "unix"
97

98
  script:
99

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

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

109 110
tests-fedora-missing-deps:
  # Ensure that tests behave nicely while missing bwrap and ostree
111
  image: buildstream/testsuite-fedora:28-5da27168-32c47d1c
112 113 114 115 116 117 118 119 120 121 122 123
  <<: *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.
    - dnf mark install fuse-libs
    - dnf erase -y bubblewrap ostree

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

124
    - ${TEST_COMMAND}
125

126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
tests-fedora-update-deps:
  # Check if the tests pass after updating requirements to their latest
  # allowed version.
  allow_failure: true
  image: buildstream/testsuite-fedora:28-5da27168-32c47d1c
  <<: *tests

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

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

    - su buildstream -c "${TEST_COMMAND}"

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

  before_script:
  # Diagnostics
  - python3 --version

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

155 156 157 158
# Automatically build documentation for every commit, we want to know
# if building documentation fails even if we're not deploying it.
docs:
  stage: test
159 160
  variables:
    BST_FORCE_SESSION_REBUILD: 1
161
  script:
162 163
  - env BST_SOURCE_CACHE="$(pwd)/cache/integration-cache/sources" tox -e docs
  - mv doc/build/html public
164 165
  except:
  - schedules
166 167 168 169
  artifacts:
    paths:
    - public/

170 171 172
.overnight-tests: &overnight-tests-template
  stage: test
  variables:
Tiago Gomes's avatar
Tiago Gomes committed
173
    BST_EXT_URL: git+https://gitlab.com/BuildStream/bst-external.git
174
    BST_EXT_REF: 0.9.0-0-g63a19e8068bd777bd9cd59b1a9442f9749ea5a85
175
    FD_SDK_REF: freedesktop-sdk-18.08.25-0-g250939d465d6dd7768a215f1fa59c4a3412fc337
176
  before_script:
177 178 179 180 181 182
  - |
    mkdir -p "${HOME}/.config"
    cat <<EOF >"${HOME}/.config/buildstream.conf"
    scheduler:
      fetchers: 2
    EOF
183 184
  - pip3 install -r requirements/requirements.txt -r requirements/plugin-requirements.txt
  - pip3 install --no-index .
Tiago Gomes's avatar
Tiago Gomes committed
185
  - pip3 install --user -e ${BST_EXT_URL}@${BST_EXT_REF}#egg=bst_ext
186
  - git clone https://gitlab.com/freedesktop-sdk/freedesktop-sdk.git
Tiago Gomes's avatar
Tiago Gomes committed
187
  - git -C freedesktop-sdk checkout ${FD_SDK_REF}
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
  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
206

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

229 230 231 232
#####################################################
#                    Post stage                     #
#####################################################

233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
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

255 256
  except:
  - schedules
257 258 259 260
  artifacts:
    paths:
    - analysis/

261 262 263
# Collate coverage reports
#
coverage:
264
  stage: post
265
  coverage: '/TOTAL +\d+ +\d+ +(\d+\.\d+)%/'
266
  script:
267 268 269
    - cp -a .coverage-reports/ ./coverage-sources
    - tox -e coverage
    - cp -a .coverage-reports/ ./coverage-report
270
  dependencies:
271
  - tests-debian-9
272
  - tests-fedora-27
273
  - tests-fedora-28
274 275
  - tests-fedora-missing-deps
  - tests-ubuntu-18.04
276
  - tests-unix
277 278
  except:
  - schedules
279 280 281 282
  artifacts:
    paths:
    - coverage-sources/
    - coverage-report/
283

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