summaryrefslogtreecommitdiff
path: root/.gitlab-ci.yml
blob: 66674e83906909d5b32f57565a7fc0411160062d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
image: buildstream/buildstream-fedora:latest

cache:
  paths:
    - cache/buildstream/sources/

stages:
  - test
  - coverage
  - docs

before_script:
  # Diagnostics
  - mount
  - df -h

  # Store cache in the project directory
  - if [ -d "$(pwd)/cache" ]; then chmod -R a+rw "$(pwd)/cache"; fi
  - export XDG_CACHE_HOME="$(pwd)/cache"
  - adduser -m buildstream
  - chown -R buildstream:buildstream .

# Run premerge commits
#
pytest:
  stage: test
  script:
  # We run as a simple user to test for permission issues
  - su buildstream -c 'python3 setup.py test --index-url invalid://uri'

  - mkdir -p coverage-pytest/
  - cp .coverage.* coverage-pytest/coverage.pytest
  artifacts:
    paths:
    - coverage-pytest/

# Run integration tests
#
integration_linux:
  stage: test

  script:
    - pip3 install --no-index .
    - cd integration-tests

    # We run as a simple user to test for permission issues
    - su buildstream -c './run-test.sh --arg --colors --cov ../.coveragerc --sources ${XDG_CACHE_HOME}/buildstream/sources test'

    - cd ..
    - mkdir -p coverage-linux/
    - cp integration-tests/.coverage coverage-linux/coverage.linux
    - cp -a integration-tests/tmp/logs logs-linux

  artifacts:
    paths:
    - coverage-linux/
    - logs-linux/

pytest_unix:
  stage: test
  variables:
    BST_FORCE_BACKEND: "unix"
  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

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

    - mkdir -p coverage-pytest-unix
    - cp .coverage.* coverage-pytest-unix/coverage.pytest-unix
  artifacts:
    paths:
      - coverage-pytest-unix/

integration_unix:
  stage: test
  variables:
    BST_FORCE_BACKEND: "unix"
  script:
    - pip3 install --no-index .
    - cd integration-tests

    # Since the unix platform is required to run as root, no user change required
    - ./run-test.sh --arg --colors --cov ../.coveragerc --sources ${XDG_CACHE_HOME}/buildstream/sources test

    - cd ..
    - mkdir -p coverage-unix/
    - cp integration-tests/.coverage coverage-unix/coverage.unix
    - cp -a integration-tests/tmp/logs logs-unix

  artifacts:
    paths:
    - coverage-unix/
    - logs-unix/

# Collate coverage reports
#
coverage:
  stage: coverage
  script:
    - pip3 install --no-index .
    - mkdir report
    - cd report
    - cp ../coverage-linux/coverage.linux .coverage
    - cp ../coverage-unix/coverage.unix .
    - coverage combine --rcfile=../.coveragerc -a ../coverage-unix/coverage.unix
    - cp ../coverage-pytest/coverage.pytest .
    - coverage combine --rcfile=../.coveragerc -a coverage.pytest
    - cp ../coverage-pytest-unix/coverage.pytest-unix .
    - coverage combine --rcfile=../.coveragerc -a coverage.pytest-unix
    - coverage report --rcfile=../.coveragerc -m
  dependencies:
  - pytest
  - integration_linux
  - pytest_unix
  - integration_unix

# Automatically build documentation, only for merges which land
# on master branch.
#
# Note: We still do not enforce a consistent installation of python2
#       or sphinx, as python2 will significantly grow the backing image.
#
pages:
  stage: docs
  script:
  - dnf install -y python2
  - pip3 install sphinx
  - pip3 install sphinx-click
  - pip3 install --user .
  - make -C doc
  - mv doc/build/html public
  artifacts:
    paths:
    - public/
  only:
  - master