summaryrefslogtreecommitdiff
path: root/.gitlab-ci.yml
blob: af6506fbe04422bddb8e018f591f6f608efb99b4 (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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# Continuous Integration configuration for at-spi2-core
#
# For documentation on how this works, see devel-docs/gitlab-ci.md
#
# Full documentation for Gitlab CI: https://docs.gitlab.com/ee/ci/
#
# Introduction to Gitlab CI: https://docs.gitlab.com/ee/ci/quick_start/index.html

variables:
  OPENSUSE_TUMBLEWEED_IMAGE: "registry.gitlab.gnome.org/gnome/at-spi2-core/opensuse:latest"

# Stages in the CI pipeline in which jobs will be run
stages:
#  - style-check
  - build
  - analysis
  - docs
  - deploy

# Base definition for jobs.
#
# We have the package dependencies to install on top of a stock opensuse/tumbleweed image,
# and the rules for when to run each job (on merge requests and on personal branches).
.only-default:
  only:
    - merge_requests
    - branches
  except:
    - tags

# C coding style checker.
#
# Disabled for now, since we need to decide to reindent all the code first.
#
# style-check-diff:
#   extends: .only-default
#   image: fedora:latest
#   stage: style-check
#   script:
#     - dnf install -y clang-tools-extra curl diffutils git
#     - sh -x ./.gitlab-ci/run-style-check.sh


# Template for the default build recipe.
#
# Depends on these variables:
# @MESON_EXTRA_FLAGS: extra arguments for the meson setup invocation
.build-default:
  image: $OPENSUSE_TUMBLEWEED_IMAGE
  extends: .only-default
  script:
    - meson setup ${MESON_EXTRA_FLAGS} --prefix /usr _build .
    - meson compile -C _build
    - meson install -C _build
    - mkdir /tmp/test+dir+with+funny+chars
    - export XDG_RUNTIME_DIR=/tmp/test+dir+with+funny+chars # See https://gitlab.gnome.org/GNOME/at-spi2-core/-/issues/48
    - dbus-run-session -- .gitlab-ci/run-tests.sh
  artifacts:
    reports:
      junit: "_build/meson-logs/testlog.junit.xml"
    when: always
    name: "at-spi2-core-${CI_COMMIT_REF_NAME}"
    paths:
      - "${CI_PROJECT_DIR}/_build/meson-logs"
      - "${CI_PROJECT_DIR}/_build/atspi/Atspi-2.0.gir"

# Inherit to build the API reference via gi-docgen
# @PROJECT_DEPS: the dependencies of the project (on Fedora)
# @MESON_EXTRA_FLAGS: extra arguments for the meson setup invocation
# @DOCS_FLAGS: doc-related arguments for the meson setup invocation
# @DOCS_PATH: the docs output directory under the build directory
# .gidocgen-build:
#   image: fedora:latest
#   before_script:
#     - export PATH="$HOME/.local/bin:$PATH"
#     - dnf install -y python3 python3-pip python3-wheel gobject-introspection-devel graphviz ninja-build redhat-rpm-config
#     - dnf install -y ${PROJECT_DEPS}
#     - pip3 install --user meson==${MESON_VERSION} gi-docgen jinja2 Markdown markupsafe pygments toml typogrify
#   script:
#     - meson setup ${MESON_EXTRA_FLAGS} ${DOCS_FLAGS} _docs .
#     - meson compile -C _docs
#     - |
#       pushd "_docs/${DOCS_PATH}" > /dev/null
#       tar cf ${CI_PROJECT_NAME}-docs.tar .
#       popd > /dev/null
#     - mv _docs/${DOCS_PATH}/${CI_PROJECT_NAME}-docs.tar .
#   artifacts:
#     when: always
#     name: 'Documentation'
#     expose_as: 'Download the API reference'
#     paths:
#       - ${CI_PROJECT_NAME}-docs.tar

# Build and run the test suite.
#
# Look at .build-default for where the artifacts are stored (build/test logs, built binaries).
opensuse-x86_64:
  extends: .build-default
  stage: build
  needs: []
  variables:
    MESON_EXTRA_FLAGS: "--buildtype=debug" # -Dwerror=true

# Run static analysis on the code.
#
# The logs are part of the compilation stderr.
static-scan:
  image: $OPENSUSE_TUMBLEWEED_IMAGE
  stage: analysis
  needs: []
  variables:
    MESON_EXTRA_FLAGS: "--buildtype=debug -Dintrospection=no -Ddocs=false"
  script:
    - meson setup ${MESON_EXTRA_FLAGS} --prefix /usr _scan_build .
    - ninja -C _scan_build scan-build
  artifacts:
    name: "at-spi2-core-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
    when: always
    paths:
      - "_scan_build/meson-logs/scanbuild"

# Build and run with address sanitizer (asan).
asan-build:
  image: $OPENSUSE_TUMBLEWEED_IMAGE
  stage: analysis
  needs: []
  variables:
    MESON_EXTRA_FLAGS: "--buildtype=debug -Db_sanitize=address -Db_lundef=false -Dintrospection=no -Ddocs=false"
  script:
    - CC=clang meson setup ${MESON_EXTRA_FLAGS} --prefix /usr _build .
    - meson compile -C _build
    - meson install -C _build
    - dbus-run-session -- .gitlab-ci/run-tests.sh
  artifacts:
    name: "at-spi2-core-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
    when: always
    paths:
      - "_asan_build/meson-logs"
  allow_failure: true

# Run the test suite and extract code coverage information.
#
# See the _coverage/ artifact for the HTML report.
coverage:
  image: $OPENSUSE_TUMBLEWEED_IMAGE
  stage: analysis
  needs: []
  variables:
    MESON_EXTRA_FLAGS: "--buildtype=debug -Ddocs=false -Dintrospection=no"
    CFLAGS: "-coverage -ftest-coverage -fprofile-arcs"
  script:
    - meson setup ${MESON_EXTRA_FLAGS} --prefix /usr _build .
    - meson compile -C _build
    - meson install -C _build
    - mkdir -p _coverage
    - lcov --config-file .gitlab-ci/lcovrc --directory _build --capture --initial --output-file "_coverage/${CI_JOB_NAME}-baseline.lcov"
    - dbus-run-session -- .gitlab-ci/run-tests.sh
    - lcov --config-file .gitlab-ci/lcovrc --directory _build --capture --output-file "_coverage/${CI_JOB_NAME}.lcov"
    - bash -x .gitlab-ci/gen-coverage.sh
  coverage: '/^\s+lines\.+:\s+([\d.]+\%)\s+/'
  artifacts:
    name: "at-spi2-core-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
    when: always
    paths:
      - "_build/meson-logs"
      - "_coverage"
  allow_failure: true

# Build the reference documentation.
#
# reference:
#   stage: docs
#   needs: []
#   extends: .gidocgen-build
#   variables:
#     PROJECT_DEPS:
#       gdk-pixbuf2-devel
#       geocode-glib-devel
#       gettext
#       git
#       gobject-introspection-devel
#       itstool
#       libsoup-devel
#       libxml2-devel
#       ninja-build
#       pylint
#       python3
#       python3-gobject
#       python3-pip
#       python3-wheel
#       redhat-rpm-config
#       vala
#     MESON_VERSION: "0.55.3"
#     DOCS_FLAGS: -Dgtk_doc=true
#     DOCS_PATH: doc/libgweather-4.0
#
#
# Publish the generated HTML reference documentation.
#
# pages:
#   stage: deploy
#   needs: ['reference']
#   script:
#     - mkdir public && cd public
#     - tar xf ../${CI_PROJECT_NAME}-docs.tar
#   artifacts:
#     paths:
#       - public
#   only:
#     - master
#     - main