1include:
2  - project: 'gnome/citemplates'
3    file: 'flatpak/flatpak_ci_initiative.yml'
4
5stages:
6  - build
7  - analysis
8  - docs
9  - flatpak
10  - publish
11  - deploy
12
13.cache-paths: &cache-paths
14  paths:
15    - _ccache/
16    - subprojects/gdk-pixbuf/
17    - subprojects/glib/
18    - subprojects/graphene/
19    - subprojects/libepoxy/
20    - subprojects/pango/
21
22# Common variables
23variables:
24  COMMON_MESON_FLAGS: "-Dwerror=true -Dglib:werror=false -Dpango:werror=false -Dgtk-doc:werror=false -Dwayland-protocols:werror=false -Dsysprof:werror=false"
25  BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true"
26  FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled"
27  MESON_TEST_TIMEOUT_MULTIPLIER: 3
28  FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v33"
29  FLATPAK_IMAGE: "registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:master"
30
31.only-default:
32  only:
33    - branches
34  except:
35    - tags
36
37style-check-diff:
38  extends: .only-default
39  image: $FEDORA_IMAGE
40  stage: .pre
41  allow_failure: true
42  script:
43    - .gitlab-ci/run-style-check-diff.sh
44
45.build-fedora-default:
46  extends: .only-default
47  image: $FEDORA_IMAGE
48  artifacts:
49    when: always
50    reports:
51      junit:
52        - "${CI_PROJECT_DIR}/_build/report-x11.xml"
53        - "${CI_PROJECT_DIR}/_build/report-wayland.xml"
54        - "${CI_PROJECT_DIR}/_build/report-broadway.xml"
55    name: "gtk-${CI_COMMIT_REF_NAME}"
56    paths:
57      - "${CI_PROJECT_DIR}/_build/meson-logs"
58      - "${CI_PROJECT_DIR}/_build/report*.xml"
59      - "${CI_PROJECT_DIR}/_build/report*.html"
60      - "${CI_PROJECT_DIR}/_build/testsuite/reftests/output/*/*.png"
61      - "${CI_PROJECT_DIR}/_build/testsuite/tools/output/*/*"
62      - "${CI_PROJECT_DIR}/_build/testsuite/gsk/compare/*/*/*.png"
63      - "${CI_PROJECT_DIR}/_build/testsuite/css/output/*/*.syscap"
64      - "${CI_PROJECT_DIR}/_build_hello/meson-logs"
65  cache:
66    key: "$CI_JOB_NAME"
67    paths:
68      - _ccache/
69      - subprojects/gdk-pixbuf/
70      - subprojects/glib/
71      - subprojects/graphene/
72      - subprojects/libepoxy/
73      - subprojects/pango/
74
75fedora-x86_64:
76  extends: .build-fedora-default
77  stage: build
78  needs: []
79  variables:
80    EXTRA_MESON_FLAGS: "--buildtype=debug --default-library=both"
81  script:
82    - .gitlab-ci/show-info-linux.sh
83    - meson subprojects update
84    - mkdir _install
85    - meson --prefix=${CI_PROJECT_DIR}/_install
86            ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
87            _build
88    - meson compile -C _build
89    - meson install -C _build
90    - PKG_CONFIG_PATH=${CI_PROJECT_DIR}/_install/lib64/pkgconfig:${CI_PROJECT_DIR}/_install/share/pkgconfig meson setup _build_hello examples/hello
91    - meson compile -C _build_hello
92    - .gitlab-ci/run-tests.sh _build x11
93    - .gitlab-ci/run-tests.sh _build wayland
94    - .gitlab-ci/run-tests.sh _build broadway
95
96release-build:
97  extends: .build-fedora-default
98  stage: build
99  needs: []
100  variables:
101    EXTRA_MESON_FLAGS: "--buildtype=release"
102  script:
103    - .gitlab-ci/show-info-linux.sh
104    - meson subprojects update
105    - meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
106            _build
107    - ninja -C _build
108    - .gitlab-ci/run-tests.sh _build x11
109
110installed-tests:
111  extends: .build-fedora-default
112  stage: build
113  needs: []
114  variables:
115    EXTRA_MESON_FLAGS: "--prefix=/usr --libdir=/usr/lib64 -Dinstall-tests=true"
116    G_TEST_ACCESSIBLE: 1
117  script:
118    - .gitlab-ci/show-info-linux.sh
119    - meson subprojects update
120    - meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
121            _build
122    - ninja -C _build
123    - sudo ninja -C _build install
124    - dbus-run-session xvfb-run -a -s "-screen 0 1024x768x24"
125            gnome-desktop-testing-runner
126                   --report-directory=_build/installed-tests-report/failed/
127                   --parallel=0
128                   gtk-4.0
129  artifacts:
130    paths:
131      - "_build/installed-tests-report/"
132
133
134.mingw-defaults:
135  extends: .only-default
136  stage: build
137  tags:
138    - win32-ps
139  script:
140    - C:\msys64\usr\bin\pacman --noconfirm -Syyuu
141    - C:\msys64\usr\bin\bash -lc "bash -x ./.gitlab-ci/test-msys2.sh"
142  cache:
143    key: "$CI_JOB_NAME"
144    paths:
145      - _ccache/
146      - subprojects/gdk-pixbuf/
147      - subprojects/glib/
148      - subprojects/graphene/
149      - subprojects/libepoxy/
150      - subprojects/pango/
151
152msys2-mingw64:
153  extends: .mingw-defaults
154  needs: []
155  variables:
156    MSYSTEM: "MINGW64"
157    CHERE_INVOKING: "yes"
158
159macos:
160  extends: .only-default
161  only:
162    - branches@GNOME/gtk
163  stage: build
164  tags:
165    - macos
166  needs: []
167  before_script:
168    - bash .gitlab-ci/show-info-osx.sh
169    - pip3 install --user meson==0.56
170    - pip3 install --user ninja
171    - export PATH=/Users/gitlabrunner/Library/Python/3.7/bin:$PATH
172    - export MESON_FORCE_BACKTRACE=1
173  script:
174    - meson -Dx11-backend=false
175            -Dbroadway-backend=true
176            -Dmacos-backend=true
177            -Dmedia-gstreamer=disabled
178            -Dintrospection=disabled
179            -Dcpp_std=c++11
180            -Dpixman:tests=disabled
181            _build
182    - ninja -C _build
183  artifacts:
184    when: always
185    paths:
186      - "${CI_PROJECT_DIR}/_build/meson-logs"
187
188vs2017-x64:
189  extends: .only-default
190  # TODO: Uncomment this when ready to merge.
191  #only:
192  #  - branches@GNOME/gtk
193  stage: build
194  tags:
195    - win32-ps
196  needs: []
197  script:
198    - .gitlab-ci/test-msvc.bat
199  artifacts:
200    when: always
201    paths:
202      - "${CI_PROJECT_DIR}/_build/meson-logs"
203
204.flatpak-defaults:
205  image: $FLATPAK_IMAGE
206  stage: flatpak
207  allow_failure: true
208  tags:
209    - flatpak
210  artifacts:
211    paths:
212      - "${APPID}-dev.flatpak"
213      - 'repo.tar'
214    expire_in: 1 day
215  script:
216    - bash -x ./.gitlab-ci/flatpak-build.sh "${APPID}"
217
218# Manual jobs, for branches and MRs
219.flatpak-manual:
220  extends: .flatpak-defaults
221  when: manual
222
223# Only build Flatpak bundles automatically on master
224.flatpak-master:
225  extends: .flatpak-defaults
226  only:
227    - master
228
229flatpak-manual:demo:
230  extends: .flatpak-manual
231  needs: []
232  variables:
233    APPID: org.gtk.Demo4
234
235flatpak-master:demo:
236  extends: .flatpak-master
237  needs: []
238  variables:
239    APPID: org.gtk.Demo4
240
241flatpak-manual:widget-factory:
242  extends: .flatpak-manual
243  needs: []
244  variables:
245    APPID: org.gtk.WidgetFactory4
246
247flatpak-master:widget-factory:
248  extends: .flatpak-master
249  needs: []
250  variables:
251    APPID: org.gtk.WidgetFactory4
252
253flatpak-manual:icon-browser:
254  extends: .flatpak-manual
255  needs: []
256  variables:
257    APPID: org.gtk.IconBrowser4
258
259flatpak-master:icon-browser:
260  extends: .flatpak-master
261  needs: []
262  variables:
263    APPID: org.gtk.IconBrowser4
264
265# Publish the demo apps to the GNOME Nightly repo
266# https://wiki.gnome.org/Apps/Nightly
267# https://gitlab.gnome.org/GNOME/Initiatives/-/wikis/DevOps-with-Flatpak
268nightly demo:
269    extends: '.publish_nightly'
270    dependencies: ['flatpak-master:demo']
271    needs: ['flatpak-master:demo']
272
273nightly factory:
274    extends: '.publish_nightly'
275    dependencies: ['flatpak-master:widget-factory']
276    needs: ['flatpak-master:widget-factory']
277
278nightly icon-browser:
279    extends: '.publish_nightly'
280    dependencies: ['flatpak-master:icon-browser']
281    needs: ['flatpak-master:icon-browser']
282
283static-scan:
284  image: $FEDORA_IMAGE
285  stage: analysis
286  needs: []
287  variables:
288    EXTRA_MESON_FLAGS: "--buildtype=debug"
289  script:
290    - meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} _scan_build
291    - ninja -C _scan_build scan-build
292  artifacts:
293    paths:
294      - _scan_build/meson-logs
295  allow_failure: true
296
297# Run tests with the address sanitizer. We need to turn off introspection,
298# since it is incompatible with asan
299asan-build:
300  image: $FEDORA_IMAGE
301  tags: [ asan ]
302  stage: analysis
303  needs: []
304  variables:
305  script:
306    - CC=clang meson --buildtype=debugoptimized -Db_sanitize=address -Db_lundef=false -Dintrospection=disabled _build
307    - ninja -C _build
308    - .gitlab-ci/run-tests.sh _build wayland
309  artifacts:
310    paths:
311      - _build/meson-logs
312  allow_failure: true
313
314reference:
315  image: $FEDORA_IMAGE
316  stage: docs
317  needs: []
318  variables:
319    EXTRA_MESON_FLAGS: "--buildtype=release --force-fallback-for=gdk-pixbuf,pango"
320  script:
321    - meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} -Dgtk_doc=true -Dgdk-pixbuf:gtk_doc=true -Dpango:gtk_doc=true _build
322    - meson compile -C _build
323    - mkdir -p _reference/
324    - mv _build/docs/reference/gdk/gdk4/ _reference/gdk4/
325    - mv _build/docs/reference/gdk/gdk4-x11/ _reference/gdk4-x11/
326    - mv _build/docs/reference/gdk/gdk4-wayland/ _reference/gdk4-wayland/
327    - mv _build/docs/reference/gsk/gsk4/ _reference/gsk4/
328    - mv _build/docs/reference/gtk/gtk4/ _reference/gtk4/
329    - mv _build/subprojects/pango/docs/Pango/ _reference/Pango/
330    - mv _build/subprojects/pango/docs/PangoCairo/ _reference/PangoCairo/
331    - mv _build/subprojects/pango/docs/PangoFc/ _reference/PangoFc/
332    - mv _build/subprojects/pango/docs/PangoFT2/ _reference/PangoFT2/
333    - mv _build/subprojects/pango/docs/PangoOT/ _reference/PangoOT/
334    - mv _build/subprojects/pango/docs/PangoXft/ _reference/PangoXft/
335    - mv _build/subprojects/gdk-pixbuf/docs/gdk-pixbuf/ _reference/gdk-pixbuf/
336    - mv _build/subprojects/gdk-pixbuf/docs/gdk-pixdata/ _reference/gdk-pixdata/
337  artifacts:
338    paths:
339      - _reference
340
341publish-docs:
342  stage: publish
343  needs: ['reference']
344  script:
345    - "curl -X POST -F token=${PAGES_TRIGGER_TOKEN} -F ref=docs-gtk-org https://gitlab.gnome.org/api/v4/projects/665/trigger/pipeline"
346  only:
347    refs:
348      - master
349