Autojump: Disable in fly mode, support continuous forward (#8200)
[oweals/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   MINETEST_GAME_REPO: "https://github.com/minetest/minetest_game.git"
13   CONTAINER_IMAGE: registry.gitlab.com/$CI_PROJECT_PATH
14
15 .build_template: &build_definition
16   stage: build
17   script:
18     - mkdir cmakebuild
19     - mkdir -p artifact/minetest/usr/
20     - cd cmakebuild
21     - cmake -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DBUILD_SERVER=TRUE ..
22     - make -j2
23     - make install
24   artifacts:
25     when: on_success
26     expire_in: 2h
27     paths:
28       - artifact/*
29
30 .debpkg_template: &debpkg_template
31   stage: package
32   before_script:
33     - apt-get update -y
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 -Rp artifact/minetest/usr build/deb/minetest/
38   script:
39     - git clone $MINETEST_GAME_REPO build/deb/minetest/usr/share/minetest/games/minetest
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/LEVELDB_PLACEHOLDER/'$LEVELDB_PKG'/g' build/deb/minetest/DEBIAN/control
43     - cd build/deb/ && dpkg-deb -b minetest/ && mv minetest.deb ../../
44   artifacts:
45     when: on_success
46     expire_in: 90 day
47     paths:
48       - ./*.deb
49
50 .debpkg_install: &debpkg_install
51   stage: deploy
52   before_script:
53     - apt-get update -y
54     - apt-get install -y libc6 libcurl3-gnutls libfreetype6 libirrlicht1.8 $LEVELDB_PKG liblua5.1-0 libluajit-5.1-2 libopenal1 libstdc++6 libvorbisfile3 libx11-6 zlib1g
55   script:
56     - dpkg -i ./*.deb
57
58 ##
59 ## Debian
60 ##
61
62 # Jessie
63
64 build:debian-8:
65   <<: *build_definition
66   image: debian:8
67   before_script:
68     - echo "deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty main" > /etc/apt/sources.list.d/uptodate-toolchain.list
69     - apt-key adv --keyserver keyserver.ubuntu.com --recv BA9EF27F
70     - apt-get update -y
71     - apt-get -y install build-essential gcc-6 g++-6 libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
72   variables:
73     CC: gcc-6
74     CXX: g++-6
75
76 package:debian-8:
77   image: debian:8
78   dependencies:
79     - build:debian-8
80   variables:
81     LEVELDB_PKG: libleveldb1
82   <<: *debpkg_template
83
84 deploy:debian-8:
85   image: debian:8
86   dependencies:
87     - package:debian-8
88   variables:
89     LEVELDB_PKG: libleveldb1
90   <<: *debpkg_install
91
92 # Stretch
93
94 build:debian-9:
95  <<: *build_definition
96  image: debian:9
97  before_script:
98    - apt-get update -y
99    - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
100
101 package:debian-9:
102   image: debian:9
103   dependencies:
104     - build:debian-9
105   variables:
106     LEVELDB_PKG: libleveldb1v5
107   <<: *debpkg_template
108
109 deploy:debian-9:
110   image: debian:9
111   dependencies:
112     - package:debian-9
113   variables:
114     LEVELDB_PKG: libleveldb1v5
115   <<: *debpkg_install
116
117 ##
118 ## Ubuntu
119 ##
120
121 # Trusty
122
123 build:ubuntu-14.04:
124   <<: *build_definition
125   image: ubuntu:trusty
126   before_script:
127     - echo "deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty main" > /etc/apt/sources.list.d/uptodate-toolchain.list
128     - apt-key adv --keyserver keyserver.ubuntu.com --recv BA9EF27F
129     - apt-get update -y
130     - apt-get -y install build-essential gcc-6 g++-6 libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
131   variables:
132     CC: gcc-6
133     CXX: g++-6
134
135 package:ubuntu-14.04:
136   image: ubuntu:trusty
137   dependencies:
138     - build:ubuntu-14.04
139   variables:
140     LEVELDB_PKG: libleveldb1
141   <<: *debpkg_template
142
143 deploy:ubuntu-14.04:
144   image: ubuntu:trusty
145   dependencies:
146     - package:ubuntu-14.04
147   variables:
148     LEVELDB_PKG: libleveldb1
149   <<: *debpkg_install
150
151 # Xenial
152
153 build:ubuntu-16.04:
154   <<: *build_definition
155   image: ubuntu:xenial
156   before_script:
157     - apt-get update -y
158     - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
159
160 package:ubuntu-16.04:
161   image: ubuntu:xenial
162   dependencies:
163     - build:ubuntu-16.04
164   variables:
165     LEVELDB_PKG: libleveldb1v5
166   <<: *debpkg_template
167
168 deploy:ubuntu-16.04:
169   image: ubuntu:xenial
170   dependencies:
171     - package:ubuntu-16.04
172   variables:
173     LEVELDB_PKG: libleveldb1v5
174   <<: *debpkg_install
175
176 # Yakkety
177
178 #build:ubuntu-16.10:
179 #  <<: *build_definition
180 #  image: ubuntu:yakkety
181 #  before_script:
182 #    - apt-get update -y
183 #    - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
184
185 #package:ubuntu-16.10:
186 #  image: ubuntu:yakkety
187 #  dependencies:
188 #    - build:ubuntu-16.10
189 #  variables:
190 #    LEVELDB_PKG: libleveldb1v5
191 #  <<: *debpkg_template
192
193 #deploy:ubuntu-16.10:
194 #  image: ubuntu:yakkety
195 #  dependencies:
196 #    - package:ubuntu-16.10
197 #  variables:
198 #    LEVELDB_PKG: libleveldb1v5
199 #  <<: *debpkg_install
200
201 # Zesty
202
203 #build:ubuntu-17.04:
204 #  <<: *build_definition
205 #  image: ubuntu:zesty
206 #  before_script:
207 #    - apt-get update -y
208 #    - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
209
210 #package:ubuntu-17.04:
211 #  image: ubuntu:zesty
212 #  dependencies:
213 #    - build:ubuntu-17.04
214 #  variables:
215 #    LEVELDB_PKG: libleveldb1v5
216 #  <<: *debpkg_template
217
218 #deploy:ubuntu-17.04:
219 #  image: ubuntu:zesty
220 #  dependencies:
221 #    - package:ubuntu-17.04
222 #  variables:
223 #    LEVELDB_PKG: libleveldb1v5
224 #  <<: *debpkg_install
225
226 ##
227 ## Fedora
228 ##
229
230 build:fedora-24:
231   <<: *build_definition
232   image: fedora:24
233   before_script:
234     - dnf -y install make automake gcc gcc-c++ kernel-devel cmake libcurl* openal* libvorbis* libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel irrlicht-devel bzip2-libs gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel doxygen spatialindex-devel bzip2-devel
235
236
237 ##
238 ## Mingw for Windows
239 ##
240
241 .generic_win_template: &generic_win_template
242   image: ubuntu:xenial
243   before_script:
244     - apt-get update -y
245     - apt-get install -y p7zip-full wget unzip git cmake gettext
246     - wget http://minetest.kitsunemimi.pw/mingw-w64-${WIN_ARCH}_7.1.1_ubuntu14.04.7z -O mingw.7z > /dev/null
247     - sed -e "s|%PREFIX%|${WIN_ARCH}-w64-mingw32|" -e "s|%ROOTPATH%|/usr/${WIN_ARCH}-w64-mingw32|" < util/travis/toolchain_mingw.cmake.in > ${TOOLCHAIN_OUTPUT}
248     - 7z x -y -o/usr mingw.7z > /dev/null
249
250 .build_win_template: &build_win_template
251   <<: *generic_win_template
252   stage: build
253   artifacts:
254     when: on_success
255     expire_in: 2h
256     paths:
257       - build/*
258
259 .package_win_template: &package_win_template
260   <<: *generic_win_template
261   stage: package
262   script:
263     - cd build/minetest/_build
264     - make package
265     - cd ../../../
266     - mkdir minetest-win-${WIN_ARCH}
267     - unzip build/minetest/_build/minetest-*-win*.zip -d minetest-win-${WIN_ARCH}
268     - cp /usr/${WIN_ARCH}-w64-mingw32/bin/libgcc*.dll minetest-win-${WIN_ARCH}/minetest-*-win*/bin
269     - cp /usr/${WIN_ARCH}-w64-mingw32/bin/libstdc++*.dll minetest-win-${WIN_ARCH}/minetest-*-win*/bin
270     - cp /usr/${WIN_ARCH}-w64-mingw32/bin/libwinpthread*.dll minetest-win-${WIN_ARCH}/minetest-*-win*/bin
271   artifacts:
272     when: on_success
273     expire_in: 90 day
274     paths:
275       - minetest-win-*/*
276
277 build:win32:
278   <<: *build_win_template
279   script:
280     - ./util/buildbot/buildwin32.sh build
281   variables:
282     NO_PACKAGE: "1"
283     WIN_ARCH: "i686"
284     TOOLCHAIN_OUTPUT: "util/buildbot/toolchain_mingw.cmake"
285
286 package:win32:
287   <<: *package_win_template
288   dependencies:
289     - build:win32
290   variables:
291     NO_PACKAGE: "1"
292     WIN_ARCH: "i686"
293     TOOLCHAIN_OUTPUT: "util/buildbot/toolchain_mingw.cmake"
294
295 build:win64:
296   <<: *build_win_template
297   script:
298     - ./util/buildbot/buildwin64.sh build
299   variables:
300     NO_PACKAGE: "1"
301     WIN_ARCH: "x86_64"
302     TOOLCHAIN_OUTPUT: "util/buildbot/toolchain_mingw64.cmake"
303
304 package:win64:
305   <<: *package_win_template
306   dependencies:
307     - build:win64
308   variables:
309     NO_PACKAGE: "1"
310     WIN_ARCH: "x86_64"
311     TOOLCHAIN_OUTPUT: "util/buildbot/toolchain_mingw64.cmake"
312
313 package:docker:
314   stage: package
315   image: docker:stable
316   services:
317     - docker:dind
318   before_script:
319     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
320   script:
321     - docker build . -t ${CONTAINER_IMAGE}/server:$CI_COMMIT_SHA -t ${CONTAINER_IMAGE}/server:$CI_COMMIT_REF_NAME -t ${CONTAINER_IMAGE}/server:latest
322     - docker push ${CONTAINER_IMAGE}/server:$CI_COMMIT_SHA
323     - docker push ${CONTAINER_IMAGE}/server:$CI_COMMIT_REF_NAME
324     - docker push ${CONTAINER_IMAGE}/server:latest