]> git.lizzy.rs Git - dragonfireclient.git/blob - .gitlab-ci.yml
Auto-detect level of parallelism
[dragonfireclient.git] / .gitlab-ci.yml
1 ---
2 # Github repository is cloned every day on Gitlab.com
3 # https://gitlab.com/minetest/minetest
4 # Pipelines URL: https://gitlab.com/minetest/minetest/pipelines
5
6 stages:
7   - build
8   - package
9   - deploy
10
11 variables:
12   IRRLICHT_TAG: "1.9.0mt4"
13   MINETEST_GAME_REPO: "https://github.com/minetest/minetest_game.git"
14   CONTAINER_IMAGE: registry.gitlab.com/$CI_PROJECT_PATH
15
16 .build_template:
17   stage: build
18   before_script:
19    - apt-get update
20    - DEBIAN_FRONTEND=noninteractive apt-get -y install build-essential git cmake libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libleveldb-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev
21   script:
22     - git clone https://github.com/minetest/irrlicht -b $IRRLICHT_TAG lib/irrlichtmt
23     - make -j$(($(nproc) + 1))
24   artifacts:
25     when: on_success
26     expire_in: 1h
27     paths:
28       - artifact/*
29
30 .debpkg_template:
31   stage: package
32   before_script:
33     - apt-get update
34     - apt-get install -y git
35     - mkdir -p build/deb/minetest/DEBIAN/
36     - cp misc/debpkg-control build/deb/minetest/DEBIAN/control
37     - cp -a artifact/minetest/usr build/deb/minetest/
38   script:
39     - git clone $MINETEST_GAME_REPO build/deb/minetest/usr/share/minetest/games/minetest_game
40     - rm -rf build/deb/minetest/usr/share/minetest/games/minetest/.git
41     - sed -i 's/DATEPLACEHOLDER/'$(date +%y.%m.%d)'/g' build/deb/minetest/DEBIAN/control
42     - sed -i 's/JPEG_PLACEHOLDER/'$JPEG_PKG'/g' build/deb/minetest/DEBIAN/control
43     - sed -i 's/LEVELDB_PLACEHOLDER/'$LEVELDB_PKG'/g' build/deb/minetest/DEBIAN/control
44     - sed -i 's/JSONCPP_PLACEHOLDER/'$JSONCPP_PKG'/g' build/deb/minetest/DEBIAN/control
45     - cd build/deb/ && dpkg-deb -b minetest/ && mv minetest.deb ../../
46   artifacts:
47     expire_in: 90 day
48     paths:
49       - ./*.deb
50
51 .debpkg_install:
52   stage: deploy
53   before_script:
54     - apt-get update -qy
55   script:
56     - apt-get install -y ./*.deb
57     - minetest --version
58
59 ##
60 ## Debian
61 ##
62
63 # Stretch
64
65 build:debian-9:
66  extends: .build_template
67  image: debian:9
68
69 package:debian-9:
70   extends: .debpkg_template
71   image: debian:9
72   needs:
73     - build:debian-9
74   variables:
75     JSONCPP_PKG: libjsoncpp1
76     LEVELDB_PKG: libleveldb1v5
77     JPEG_PKG: libjpeg62-turbo
78
79 deploy:debian-9:
80   extends: .debpkg_install
81   image: debian:9
82   needs:
83     - package:debian-9
84
85 # Buster
86
87 build:debian-10:
88  extends: .build_template
89  image: debian:10
90
91 package:debian-10:
92   extends: .debpkg_template
93   image: debian:10
94   needs:
95     - build:debian-10
96   variables:
97     JSONCPP_PKG: libjsoncpp1
98     LEVELDB_PKG: libleveldb1d
99     JPEG_PKG: libjpeg62-turbo
100
101 deploy:debian-10:
102   extends: .debpkg_install
103   image: debian:10
104   needs:
105     - package:debian-10
106
107 # Bullseye
108
109 build:debian-11:
110  extends: .build_template
111  image: debian:11
112
113 package:debian-11:
114   extends: .debpkg_template
115   image: debian:11
116   needs:
117     - build:debian-11
118   variables:
119     JSONCPP_PKG: libjsoncpp24
120     LEVELDB_PKG: libleveldb1d
121     JPEG_PKG: libjpeg62-turbo
122
123 deploy:debian-11:
124   extends: .debpkg_install
125   image: debian:11
126   needs:
127     - package:debian-11
128
129 ##
130 ## Ubuntu
131 ##
132
133 # Bionic
134
135 build:ubuntu-18.04:
136   extends: .build_template
137   image: ubuntu:bionic
138
139 package:ubuntu-18.04:
140   extends: .debpkg_template
141   image: ubuntu:bionic
142   needs:
143     - build:ubuntu-18.04
144   variables:
145     JSONCPP_PKG: libjsoncpp1
146     LEVELDB_PKG: libleveldb1v5
147     JPEG_PKG: libjpeg-turbo8
148
149 deploy:ubuntu-18.04:
150   extends: .debpkg_install
151   image: ubuntu:bionic
152   needs:
153     - package:ubuntu-18.04
154
155 # Focal
156
157 build:ubuntu-20.04:
158   extends: .build_template
159   image: ubuntu:focal
160
161 package:ubuntu-20.04:
162   extends: .debpkg_template
163   image: ubuntu:focal
164   needs:
165     - build:ubuntu-20.04
166   variables:
167     JSONCPP_PKG: libjsoncpp1
168     LEVELDB_PKG: libleveldb1d
169     JPEG_PKG: libjpeg-turbo8
170
171 deploy:ubuntu-20.04:
172   extends: .debpkg_install
173   image: ubuntu:focal
174   needs:
175     - package:ubuntu-20.04
176
177 ##
178 ## Fedora
179 ##
180
181 # Fedora 28 <-> RHEL 8
182 build:fedora-28:
183   extends: .build_template
184   image: fedora:28
185   before_script:
186     - dnf -y install make git gcc gcc-c++ kernel-devel cmake libjpeg-devel libpng-devel libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel
187
188 ##
189 ## MinGW for Windows
190 ##
191
192 .generic_win_template:
193   image: ubuntu:focal
194   before_script:
195     - apt-get update
196     - DEBIAN_FRONTEND=noninteractive apt-get install -y wget xz-utils unzip git cmake gettext
197     - wget -nv http://minetest.kitsunemimi.pw/mingw-w64-${WIN_ARCH}_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
198     - tar -xaf mingw.tar.xz -C /usr
199
200 .build_win_template:
201   extends: .generic_win_template
202   stage: build
203   artifacts:
204     expire_in: 90 day
205     paths:
206       - minetest-*-win*/*
207
208 build:win32:
209   extends: .build_win_template
210   script:
211     - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin32.sh build
212     - unzip -q build/build/*.zip
213   variables:
214     WIN_ARCH: "i686"
215
216 build:win64:
217   extends: .build_win_template
218   script:
219     - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin64.sh build
220     - unzip -q build/build/*.zip
221   variables:
222     WIN_ARCH: "x86_64"
223
224 ##
225 ## Docker
226 ##
227
228 package:docker:
229   stage: package
230   image: docker:stable
231   services:
232     - docker:dind
233   before_script:
234     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
235   script:
236     - docker build . -t ${CONTAINER_IMAGE}/server:$CI_COMMIT_SHA -t ${CONTAINER_IMAGE}/server:$CI_COMMIT_REF_NAME -t ${CONTAINER_IMAGE}/server:latest
237     - docker push ${CONTAINER_IMAGE}/server:$CI_COMMIT_SHA
238     - docker push ${CONTAINER_IMAGE}/server:$CI_COMMIT_REF_NAME
239     - docker push ${CONTAINER_IMAGE}/server:latest
240
241 ##
242 ## Gitlab Pages (Lua API documentation)
243 ##
244
245 pages:
246   stage: deploy
247   image: python:3.8
248   before_script:
249     - pip install git+https://github.com/Python-Markdown/markdown.git
250     - pip install git+https://github.com/mkdocs/mkdocs.git
251     - pip install pygments
252   script:
253     - cd doc/mkdocs && ./build.sh
254   artifacts:
255     paths:
256       - public
257   only:
258     - master
259
260 ##
261 ## AppImage
262 ##
263
264 package:appimage-client:
265   stage: package
266   image: appimagecrafters/appimage-builder
267   needs:
268     - build:ubuntu-18.04
269   before_script:
270     - apt-get update -y
271     - apt-get install -y git
272     # Collect files
273     - mkdir AppDir
274     - cp -a artifact/minetest/usr/ AppDir/usr/
275     - rm AppDir/usr/bin/minetestserver
276     - cp -a clientmods AppDir/usr/share/minetest
277   script:
278     - git clone $MINETEST_GAME_REPO AppDir/usr/share/minetest/games/minetest_game
279     - rm -rf AppDir/usr/share/minetest/games/minetest/.git
280     - export VERSION=$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA
281     # Remove PrefersNonDefaultGPU property due to validation errors
282     - sed -i '/PrefersNonDefaultGPU/d' AppDir/usr/share/applications/net.minetest.minetest.desktop
283     - appimage-builder --skip-test
284   artifacts:
285     expire_in: 90 day
286     paths:
287       - ./*.AppImage