]> git.lizzy.rs Git - minetest.git/blob - .gitlab-ci.yml
CI: Bump IrrlichtMt to 1.9.0mt3
[minetest.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.0mt3"
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    - 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
21   script:
22     - git clone https://github.com/minetest/irrlicht -b $IRRLICHT_TAG lib/irrlichtmt
23     - mkdir cmakebuild
24     - cd cmakebuild
25     - cmake -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DBUILD_SERVER=TRUE ..
26     - make -j2
27     - make install
28   artifacts:
29     when: on_success
30     expire_in: 1h
31     paths:
32       - artifact/*
33
34 .debpkg_template:
35   stage: package
36   before_script:
37     - apt-get update
38     - apt-get install -y git
39     - mkdir -p build/deb/minetest/DEBIAN/
40     - cp misc/debpkg-control build/deb/minetest/DEBIAN/control
41     - cp -a artifact/minetest/usr build/deb/minetest/
42   script:
43     - git clone $MINETEST_GAME_REPO build/deb/minetest/usr/share/minetest/games/minetest_game
44     - rm -rf build/deb/minetest/usr/share/minetest/games/minetest/.git
45     - sed -i 's/DATEPLACEHOLDER/'$(date +%y.%m.%d)'/g' build/deb/minetest/DEBIAN/control
46     - sed -i 's/JPEG_PLACEHOLDER/'$JPEG_PKG'/g' build/deb/minetest/DEBIAN/control
47     - sed -i 's/LEVELDB_PLACEHOLDER/'$LEVELDB_PKG'/g' build/deb/minetest/DEBIAN/control
48     - sed -i 's/JSONCPP_PLACEHOLDER/'$JSONCPP_PKG'/g' build/deb/minetest/DEBIAN/control
49     - cd build/deb/ && dpkg-deb -b minetest/ && mv minetest.deb ../../
50   artifacts:
51     expire_in: 90 day
52     paths:
53       - ./*.deb
54
55 .debpkg_install:
56   stage: deploy
57   before_script:
58     - apt-get update -qy
59   script:
60     - apt-get install -y ./*.deb
61     - minetest --version
62
63 ##
64 ## Debian
65 ##
66
67 # Stretch
68
69 build:debian-9:
70  extends: .build_template
71  image: debian:9
72
73 package:debian-9:
74   extends: .debpkg_template
75   image: debian:9
76   needs:
77     - build:debian-9
78   variables:
79     JSONCPP_PKG: libjsoncpp1
80     LEVELDB_PKG: libleveldb1v5
81     JPEG_PKG: libjpeg62-turbo
82
83 deploy:debian-9:
84   extends: .debpkg_install
85   image: debian:9
86   needs:
87     - package:debian-9
88
89 # Buster
90
91 build:debian-10:
92  extends: .build_template
93  image: debian:10
94
95 package:debian-10:
96   extends: .debpkg_template
97   image: debian:10
98   needs:
99     - build:debian-10
100   variables:
101     JSONCPP_PKG: libjsoncpp1
102     LEVELDB_PKG: libleveldb1d
103     JPEG_PKG: libjpeg62-turbo
104
105 deploy:debian-10:
106   extends: .debpkg_install
107   image: debian:10
108   needs:
109     - package:debian-10
110
111 # Bullseye
112
113 build:debian-11:
114  extends: .build_template
115  image: debian:11
116
117 package:debian-11:
118   extends: .debpkg_template
119   image: debian:11
120   needs:
121     - build:debian-11
122   variables:
123     JSONCPP_PKG: libjsoncpp24
124     LEVELDB_PKG: libleveldb1d
125     JPEG_PKG: libjpeg62-turbo
126
127 deploy:debian-11:
128   extends: .debpkg_install
129   image: debian:11
130   needs:
131     - package:debian-11
132
133 ##
134 ## Ubuntu
135 ##
136
137 # Xenial
138
139 build:ubuntu-16.04:
140   extends: .build_template
141   image: ubuntu:xenial
142
143 package:ubuntu-16.04:
144   extends: .debpkg_template
145   image: ubuntu:xenial
146   needs:
147     - build:ubuntu-16.04
148   variables:
149     JSONCPP_PKG: libjsoncpp1
150     LEVELDB_PKG: libleveldb1v5
151     JPEG_PKG: libjpeg-turbo8
152
153 deploy:ubuntu-16.04:
154   extends: .debpkg_install
155   image: ubuntu:xenial
156   needs:
157     - package:ubuntu-16.04
158
159 # Bionic
160
161 build:ubuntu-18.04:
162   extends: .build_template
163   image: ubuntu:bionic
164
165 package:ubuntu-18.04:
166   extends: .debpkg_template
167   image: ubuntu:bionic
168   needs:
169     - build:ubuntu-18.04
170   variables:
171     JSONCPP_PKG: libjsoncpp1
172     LEVELDB_PKG: libleveldb1v5
173     JPEG_PKG: libjpeg-turbo8
174
175 deploy:ubuntu-18.04:
176   extends: .debpkg_install
177   image: ubuntu:bionic
178   needs:
179     - package:ubuntu-18.04
180
181 ##
182 ## Fedora
183 ##
184
185 # Fedora 28 <-> RHEL 8
186 build:fedora-28:
187   extends: .build_template
188   image: fedora:28
189   before_script:
190     - 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
191
192 ##
193 ## MinGW for Windows
194 ##
195
196 .generic_win_template:
197   image: ubuntu:focal
198   before_script:
199     - apt-get update
200     - DEBIAN_FRONTEND=noninteractive apt-get install -y wget xz-utils unzip git cmake gettext
201     - wget -nv http://minetest.kitsunemimi.pw/mingw-w64-${WIN_ARCH}_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz
202     - tar -xaf mingw.tar.xz -C /usr
203
204 .build_win_template:
205   extends: .generic_win_template
206   stage: build
207   artifacts:
208     expire_in: 1h
209     paths:
210       - build/build/*.zip
211
212 .package_win_template:
213   extends: .generic_win_template
214   stage: package
215   script:
216     - unzip build/build/*.zip
217     - cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libgcc*.dll minetest-*-win*/bin/
218     - cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libstdc++*.dll minetest-*-win*/bin/
219     - cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libwinpthread*.dll minetest-*-win*/bin/
220   artifacts:
221     expire_in: 90 day
222     paths:
223       - minetest-*-win*/*
224
225 build:win32:
226   extends: .build_win_template
227   script:
228     - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin32.sh build
229   variables:
230     WIN_ARCH: "i686"
231
232 package:win32:
233   extends: .package_win_template
234   needs:
235     - build:win32
236   variables:
237     WIN_ARCH: "i686"
238
239
240 build:win64:
241   extends: .build_win_template
242   script:
243     - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin64.sh build
244   variables:
245     WIN_ARCH: "x86_64"
246
247 package:win64:
248   extends: .package_win_template
249   needs:
250     - build:win64
251   variables:
252     WIN_ARCH: "x86_64"
253
254 ##
255 ## Docker
256 ##
257
258 package:docker:
259   stage: package
260   image: docker:stable
261   services:
262     - docker:dind
263   before_script:
264     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
265   script:
266     - docker build . -t ${CONTAINER_IMAGE}/server:$CI_COMMIT_SHA -t ${CONTAINER_IMAGE}/server:$CI_COMMIT_REF_NAME -t ${CONTAINER_IMAGE}/server:latest
267     - docker push ${CONTAINER_IMAGE}/server:$CI_COMMIT_SHA
268     - docker push ${CONTAINER_IMAGE}/server:$CI_COMMIT_REF_NAME
269     - docker push ${CONTAINER_IMAGE}/server:latest
270
271 ##
272 ## Gitlab Pages (Lua API documentation)
273 ##
274
275 pages:
276   stage: deploy
277   image: python:3.8
278   before_script:
279     - pip install git+https://github.com/Python-Markdown/markdown.git
280     - pip install git+https://github.com/mkdocs/mkdocs.git
281     - pip install pygments
282   script:
283     - cd doc/mkdocs && ./build.sh
284   artifacts:
285     paths:
286       - public
287   only:
288     - master
289
290 ##
291 ## AppImage
292 ##
293
294 package:appimage-client:
295   stage: package
296   image: appimagecrafters/appimage-builder
297   needs:
298     - build:ubuntu-18.04
299   before_script:
300     - apt-get update -y
301     - apt-get install -y git
302     # Collect files
303     - mkdir AppDir
304     - cp -a artifact/minetest/usr/ AppDir/usr/
305     - rm AppDir/usr/bin/minetestserver
306     - cp -a clientmods AppDir/usr/share/minetest
307   script:
308     - git clone $MINETEST_GAME_REPO AppDir/usr/share/minetest/games/minetest_game
309     - rm -rf AppDir/usr/share/minetest/games/minetest/.git
310     - export VERSION=$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA
311     # Remove PrefersNonDefaultGPU property due to validation errors
312     - sed -i '/PrefersNonDefaultGPU/d' AppDir/usr/share/applications/net.minetest.minetest.desktop
313     - appimage-builder --skip-test
314   artifacts:
315     expire_in: 90 day
316     paths:
317       - ./*.AppImage