]> git.lizzy.rs Git - minetest.git/blob - .gitlab-ci.yml
Automatically package MinGW runtime in buildbot
[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    - 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     - 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 # Bionic
138
139 build:ubuntu-18.04:
140   extends: .build_template
141   image: ubuntu:bionic
142
143 package:ubuntu-18.04:
144   extends: .debpkg_template
145   image: ubuntu:bionic
146   needs:
147     - build:ubuntu-18.04
148   variables:
149     JSONCPP_PKG: libjsoncpp1
150     LEVELDB_PKG: libleveldb1v5
151     JPEG_PKG: libjpeg-turbo8
152
153 deploy:ubuntu-18.04:
154   extends: .debpkg_install
155   image: ubuntu:bionic
156   needs:
157     - package:ubuntu-18.04
158
159 # Focal
160
161 build:ubuntu-20.04:
162   extends: .build_template
163   image: ubuntu:focal
164
165 package:ubuntu-20.04:
166   extends: .debpkg_template
167   image: ubuntu:focal
168   needs:
169     - build:ubuntu-20.04
170   variables:
171     JSONCPP_PKG: libjsoncpp1
172     LEVELDB_PKG: libleveldb1d
173     JPEG_PKG: libjpeg-turbo8
174
175 deploy:ubuntu-20.04:
176   extends: .debpkg_install
177   image: ubuntu:focal
178   needs:
179     - package:ubuntu-20.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 libzstd-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: 90 day
209     paths:
210       - minetest-*-win*/*
211
212 build:win32:
213   extends: .build_win_template
214   script:
215     - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin32.sh build
216     - unzip -q build/build/*.zip
217   variables:
218     WIN_ARCH: "i686"
219
220 build:win64:
221   extends: .build_win_template
222   script:
223     - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin64.sh build
224     - unzip -q build/build/*.zip
225   variables:
226     WIN_ARCH: "x86_64"
227
228 ##
229 ## Docker
230 ##
231
232 package:docker:
233   stage: package
234   image: docker:stable
235   services:
236     - docker:dind
237   before_script:
238     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
239   script:
240     - docker build . -t ${CONTAINER_IMAGE}/server:$CI_COMMIT_SHA -t ${CONTAINER_IMAGE}/server:$CI_COMMIT_REF_NAME -t ${CONTAINER_IMAGE}/server:latest
241     - docker push ${CONTAINER_IMAGE}/server:$CI_COMMIT_SHA
242     - docker push ${CONTAINER_IMAGE}/server:$CI_COMMIT_REF_NAME
243     - docker push ${CONTAINER_IMAGE}/server:latest
244
245 ##
246 ## Gitlab Pages (Lua API documentation)
247 ##
248
249 pages:
250   stage: deploy
251   image: python:3.8
252   before_script:
253     - pip install git+https://github.com/Python-Markdown/markdown.git
254     - pip install git+https://github.com/mkdocs/mkdocs.git
255     - pip install pygments
256   script:
257     - cd doc/mkdocs && ./build.sh
258   artifacts:
259     paths:
260       - public
261   only:
262     - master
263
264 ##
265 ## AppImage
266 ##
267
268 package:appimage-client:
269   stage: package
270   image: appimagecrafters/appimage-builder
271   needs:
272     - build:ubuntu-18.04
273   before_script:
274     - apt-get update -y
275     - apt-get install -y git
276     # Collect files
277     - mkdir AppDir
278     - cp -a artifact/minetest/usr/ AppDir/usr/
279     - rm AppDir/usr/bin/minetestserver
280     - cp -a clientmods AppDir/usr/share/minetest
281   script:
282     - git clone $MINETEST_GAME_REPO AppDir/usr/share/minetest/games/minetest_game
283     - rm -rf AppDir/usr/share/minetest/games/minetest/.git
284     - export VERSION=$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA
285     # Remove PrefersNonDefaultGPU property due to validation errors
286     - sed -i '/PrefersNonDefaultGPU/d' AppDir/usr/share/applications/net.minetest.minetest.desktop
287     - appimage-builder --skip-test
288   artifacts:
289     expire_in: 90 day
290     paths:
291       - ./*.AppImage