Merge lp:~armagetronad-ap/armagetronad/0.2.9-armagetronad-sty+ct+ap into lp:~z-man/armagetronad/0.2.9-armagetronad-sty+ct+ap

Proposed by Armanelgtron
Status: Merged
Merged at revision: 1118
Proposed branch: lp:~armagetronad-ap/armagetronad/0.2.9-armagetronad-sty+ct+ap
Merge into: lp:~z-man/armagetronad/0.2.9-armagetronad-sty+ct+ap
Diff against target: 24818 lines (+13757/-5571)
188 files modified
.bzrignore (+5/-1)
.dockerignore (+5/-0)
.gitignore (+9/-0)
.gitlab-ci.yml (+364/-0)
AUTHORS (+1/-1)
CHANGELOG.md (+807/-0)
CHANGELOG_FROZEN.md (+792/-0)
Dockerfile (+94/-0)
Makefile.am (+6/-3)
Makefile.manual (+3/-5)
NEWS (+78/-19)
batch/checkbugle.py (+21/-19)
batch/git_ff_to_release.sh (+68/-0)
batch/git_merge_safe_sources.sh (+74/-0)
batch/ladder.py (+7/-5)
batch/make/patchnotes.py (+204/-0)
batch/make/sortresources (+3/-1)
batch/make/sortresources.py (+7/-6)
batch/make/uninstall (+1/-1)
batch/make/update_changelog (+13/-0)
batch/make/version (+25/-3)
bootstrap.sh (+1/-1)
config/settings.cfg (+2/-0)
config/settings_dedicated.cfg (+1/-1)
configure.ac (+23/-30)
desktop/armagetronad.desktop.in (+1/-2)
docker/README.md (+103/-0)
docker/build/Makefile.am (+652/-0)
docker/build/build_in_container.sh (+87/-0)
docker/build/context/appdir.sh (+15/-0)
docker/build/context/appimage.sh (+24/-0)
docker/build/context/build.sh (+14/-0)
docker/build/context/portable/AppRun (+38/-0)
docker/build/context/portable/README (+2/-0)
docker/build/context/portable/build (+89/-0)
docker/build/context/portable/fixlinks (+21/-0)
docker/build/context/steam.sh (+32/-0)
docker/build/context/testbuild.sh (+10/-0)
docker/build/context/version.sh.in (+6/-0)
docker/build/context/winbuild.sh (+14/-0)
docker/build/context/wininst.sh (+22/-0)
docker/build/context/winsource.sh (+82/-0)
docker/build/context_to_result.sh (+43/-0)
docker/build/debian_source.sh (+48/-0)
docker/build/fakerelease_proto.sh (+3/-0)
docker/build/make_ci.sh.in (+34/-0)
docker/build/make_deploy.sh (+29/-0)
docker/build/prepare_context.sh (+33/-0)
docker/build/rebrand_debian_core.sh (+24/-0)
docker/build/setup_ci_test.sh.in (+45/-0)
docker/deploy/anonymous_secrets.b64 (+104/-0)
docker/deploy/deploy_download.sh (+140/-0)
docker/deploy/deploy_lp.sh (+40/-0)
docker/deploy/deploy_ppa.sh (+33/-0)
docker/deploy/deploy_scp.sh (+32/-0)
docker/deploy/deploy_steam.sh (+62/-0)
docker/deploy/deploy_zeroinstall.sh (+62/-0)
docker/deploy/lp-project-upload (+247/-0)
docker/deploy/prepare_deploy.sh (+31/-0)
docker/deploy/steamcontentbuilder/README.txt (+1/-0)
docker/deploy/steamcontentbuilder/scripts/app_build_1306180.vdf (+16/-0)
docker/deploy/steamcontentbuilder/scripts/depot_build_1306181.vdf (+31/-0)
docker/deploy/steamcontentbuilder/scripts/depot_build_1306182.vdf (+31/-0)
docker/deploy/targets.sh.in (+233/-0)
docker/deploy/update_zeroinstall.sh (+112/-0)
docker/images/armabuild/Dockerfile.proto (+224/-0)
docker/images/armabuild_32.digest (+1/-0)
docker/images/armabuild_64.digest (+1/-0)
docker/images/armadeb_64.digest (+1/-0)
docker/images/armadeploy_64.digest (+1/-0)
docker/images/armalpine/Dockerfile.proto (+50/-0)
docker/images/armalpine_32.digest (+1/-0)
docker/images/armaroot/Dockerfile.proto (+31/-0)
docker/images/armaroot_64.digest (+1/-0)
docker/images/armasteam_64.digest (+1/-0)
docker/images/armawineblocks.digest (+1/-0)
docker/images/build_all.sh (+20/-0)
docker/images/build_armabuild.sh (+33/-0)
docker/images/build_armabuild_32.sh (+8/-0)
docker/images/build_armabuild_64.sh (+8/-0)
docker/images/build_armadeb_64.sh (+7/-0)
docker/images/build_armadeploy_64.sh (+8/-0)
docker/images/build_armalpine.sh (+21/-0)
docker/images/build_armalpine_32.sh (+8/-0)
docker/images/build_armalpine_64.sh (+11/-0)
docker/images/build_armaroot_64.sh (+18/-0)
docker/images/build_armasteam_64.sh (+10/-0)
docker/images/build_armawineblocks.sh (+37/-0)
docker/images/build_steamcmd.sh (+18/-0)
docker/images/build_steamrt_scout_amd64.sh (+44/-0)
docker/images/clean_all.sh (+20/-0)
docker/images/digest.sh (+12/-0)
docker/images/epoch.sh (+2/-0)
docker/images/rebuild_all_noninteractive.sh (+11/-0)
docker/images/steamcmd.digest (+1/-0)
docker/images/steamcmd/Dockerfile.proto (+14/-0)
docker/images/upload_all.sh (+37/-0)
docker/images/wineblocks/Dockerfile.proto (+18/-0)
docker/images/wineblocks/install.sh (+6/-0)
docker/notes.txt (+62/-0)
docker/scripts/brand.sh (+61/-0)
docker/scripts/build_image.sh (+45/-0)
docker/scripts/download.sh (+13/-0)
docker/scripts/ensure_gits.sh (+39/-0)
docker/scripts/ensure_image.sh (+65/-0)
docker/scripts/fix_gits.sh (+31/-0)
docker/scripts/relevant_branches.sh (+8/-0)
docker/scripts/setup_ci_variables_test.sh (+72/-0)
docker/scripts/tarwrapper.sh (+6/-0)
docker/scripts/test_yaml.sh (+19/-0)
docker/scripts/update_gits.sh (+82/-0)
language/deutsch.txt (+5/-0)
language/english_base.txt (+30/-24)
language/english_base_notranslate.txt (+1/-0)
language/update.py (+14/-6)
src/Makefile.am (+0/-3)
src/doc/HtmlMakefile (+8/-5)
src/doc/html.m4.in (+0/-2)
src/doc/net/sig.m4 (+0/-3)
src/engine/eCamera.cpp (+4/-2)
src/engine/eChat.cpp (+18/-18)
src/engine/eChat.h (+22/-22)
src/engine/eGrid.cpp (+4/-2)
src/engine/eNetGameObject.cpp (+6/-32)
src/engine/eNetGameObject.h (+0/-1)
src/engine/ePlayer.cpp (+141/-90)
src/engine/ePlayer.h (+10/-1)
src/engine/eSound.cpp (+5/-1)
src/engine/eTeam.cpp (+164/-162)
src/engine/eTeam.h (+6/-11)
src/engine/eVoter.cpp (+8/-23)
src/network/l3_demo.cpp (+7/-0)
src/network/nAuthentication.cpp (+180/-180)
src/network/nNetObject.cpp (+11/-12)
src/network/nNetObject.h (+36/-14)
src/network/nNetwork.cpp (+35/-11)
src/network/nNetwork.h (+21/-21)
src/network/nServerInfo.cpp (+4/-7)
src/network/nServerInfo.h (+1/-1)
src/network/nSocket.cpp (+43/-41)
src/network/nSpamProtection.cpp (+21/-23)
src/network/nSpamProtection.h (+3/-3)
src/render/rConsole.cpp (+7/-9)
src/render/rConsoleCout.cpp (+144/-143)
src/render/rConsoleGraph.cpp (+1/-1)
src/render/rFont.cpp (+1/-1)
src/render/rScreen.cpp (+12/-11)
src/render/rScreen.h (+1/-0)
src/render/rSysdep.cpp (+3/-3)
src/render/rTexture.cpp (+5/-0)
src/thirdparty/binreloc/prefix.c (+1/-1)
src/tools/tConfiguration.cpp (+1/-1)
src/tools/tDirectories.cpp (+3/-0)
src/tools/tError.cpp (+5/-0)
src/tools/tError.h (+4/-0)
src/tools/tHeap.cpp (+1/-1)
src/tools/tLinkedList.cpp (+7/-3)
src/tools/tLocale.cpp (+13/-18)
src/tools/tLocale.h (+1/-1)
src/tools/tMemManager.cpp (+35/-43)
src/tools/tMemManager.h (+5/-1)
src/tools/tSafePTR.h (+9/-6)
src/tools/tString.cpp (+740/-662)
src/tools/tString.h (+5/-0)
src/tron/gAIBase.cpp (+2/-2)
src/tron/gAIBase.h (+5/-0)
src/tron/gArmagetron.cpp (+13/-13)
src/tron/gCycle.cpp (+38/-19)
src/tron/gCycle.h (+1/-1)
src/tron/gCycleMovement.cpp (+77/-77)
src/tron/gFloor.cpp (+27/-20)
src/tron/gFriends.cpp (+11/-11)
src/tron/gFriends.h (+1/-1)
src/tron/gGame.cpp (+31/-21)
src/tron/gGame.h (+5/-4)
src/tron/gHud.cpp (+627/-627)
src/tron/gMenus.cpp (+5/-0)
src/tron/gParser.cpp (+475/-475)
src/tron/gServerBrowser.cpp (+16/-4)
src/tron/gZone.cpp (+2702/-2565)
src/ui/uInput.cpp (+2/-1)
src/ui/uMenu.cpp (+9/-6)
src/win32/config_common.h (+3/-0)
textures/font-src.svg (+99/-0)
textures/font.svg (+418/-0)
textures/font_extra-src.svg (+238/-0)
textures/font_extra.svg (+614/-0)
textures/font_s.svg (+78/-0)
To merge this branch: bzr merge lp:~armagetronad-ap/armagetronad/0.2.9-armagetronad-sty+ct+ap
Reviewer Review Type Date Requested Status
Manuel Moos Pending
Review via email: mp+385709@code.launchpad.net
To post a comment you must log in.
1108. By Armanelgtron

Have LADDERLOG_ENABLED enabled by default for servers but disabled for clients (where it's generally less useful anyway).

1109. By Armanelgtron

Check CanRespawn for zone spawn action.

1110. By Armanelgtron

Merge from 0.2.8.

1111. By Armanelgtron

Disallow scoreboard from being toggled while chatting instead of just closing it when entering chat.

1112. By Armanelgtron

Aspect ratio correction for text.

1113. By Armanelgtron

Don't include colors when shrinking center messages.

1114. By Armanelgtron

Add VERIFY_COLOR_STRICT and escape noncompliant color codes on the server so clients don't have to support it.

1115. By Armanelgtron

A couple patches, mainly color related:
Less strict color filtering for
 - names so they can't wind up visibly illegally long.
 - logs/console output
 - center message shrinking
Complete the implementation of CONSOLE_LOG_COLOR_DECORATE_TIMESTAMP

1116. By Armanelgtron

More aspect ratio correction: for text in server browser and fullscreen messages.

1117. By Armanelgtron

"Hack" to fade zones in before round begins

1118. By Armanelgtron

Converted 0.4's font to textures. Using that instead.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file '.bzrignore'
--- .bzrignore 2019-07-26 01:01:51 +0000
+++ .bzrignore 2020-07-03 06:03:19 +0000
@@ -17,12 +17,14 @@
17ChangeLog17ChangeLog
18EclipseBuild18EclipseBuild
19./INSTALL19./INSTALL
20./compile
20Makefile.in21Makefile.in
21./aclocal.m422./aclocal.m4
22./autom4te.cache23./autom4te.cache
23./config.h.in24./config.h.in
24./config.sub25./config.sub
25./configure26./configure
27./compile
26./depcomp28./depcomp
27./install-sh29./install-sh
28./missing30./missing
@@ -34,6 +36,7 @@
34./config.h36./config.h
35./config.log37./config.log
36./config.status38./config.status
39./config.guess
37./extrapaths40./extrapaths
38./stamp-h141./stamp-h1
39./universal_variable*42./universal_variable*
@@ -64,4 +67,5 @@
64a.out.dSYM67a.out.dSYM
65src/armagetronad_main_master68src/armagetronad_main_master
66src/doc/COPYING.txt69src/doc/COPYING.txt
67rubbish
68\ No newline at end of file70\ No newline at end of file
71rubbish
72./version.h
6973
=== added file '.dockerignore'
--- .dockerignore 1970-01-01 00:00:00 +0000
+++ .dockerignore 2020-07-03 06:03:19 +0000
@@ -0,0 +1,5 @@
1Dockerfile
2dockerbuild
3.dockerignore
4.gitlab-ci.yml
5builds
06
=== modified file '.gitignore'
--- .gitignore 2019-07-26 01:01:51 +0000
+++ .gitignore 2020-07-03 06:03:19 +0000
@@ -3,10 +3,16 @@
3Armagetron Advanced.app3Armagetron Advanced.app
4desktop/os-x/Info.plist4desktop/os-x/Info.plist
5.gdbinit5.gdbinit
6.cache
7.lock.*
8docker/images/context
9docker/deploy/*.gpg
10docker/deploy/ssh
6batch/rcd_config11batch/rcd_config
7batch/rcd_server12batch/rcd_server
8batch/rcd_startstop13batch/rcd_startstop
9batch/serverstarter14batch/serverstarter
15*.digest.local
10./armagetronad-dedicated16./armagetronad-dedicated
11COPYING17COPYING
12ChangeLog18ChangeLog
@@ -19,6 +25,7 @@
19/config.h.in25/config.h.in
20/config.sub26/config.sub
21/configure27/configure
28/builds
22/depcomp29/depcomp
23/install-sh30/install-sh
24/ylwrap31/ylwrap
@@ -31,6 +38,7 @@
31/config.h38/config.h
32/config.log39/config.log
33/config.status40/config.status
41/config.guess
34/extrapaths42/extrapaths
35/stamp-h143/stamp-h1
36/universal_variable*44/universal_variable*
@@ -42,6 +50,7 @@
42config/rc.config50config/rc.config
43desktop/armagetronad-armagetronad.desktop51desktop/armagetronad-armagetronad.desktop
44language/languages.txt52language/languages.txt
53language/*.bak
45resource/included/54resource/included/
46resource/automatic/55resource/automatic/
47.deps56.deps
4857
=== added file '.gitlab-ci.yml'
--- .gitlab-ci.yml 1970-01-01 00:00:00 +0000
+++ .gitlab-ci.yml 2020-07-03 06:03:19 +0000
@@ -0,0 +1,364 @@
1image: registry.gitlab.com/armagetronad/armagetronad/armaroot_64@sha256:182493edea0ad5b31f8dfe0c27b414cc2a3d710a051b6f2359a21da791ca8a68
2
3variables:
4 # https://docs.gitlab.com/ee/ci/docker/using_docker_build.html
5 #DOCKER_TLS_CERTDIR: "/certs"
6 #DOCKER_HOST: ""
7
8services:
9 # required for shared runners, does not hurt for our runner (just some diagnostic complaints)
10 - name: docker:19.03.0-dind
11 alias: docker
12variables:
13 DOCKER_DRIVER: overlay2
14 DOCKER_TLS_CERTDIR: ""
15
16stages:
17 - minimal_build
18 - build_prepare
19 - build_base
20 - build_main
21 - build_collect
22 - test
23 - stage
24 - deploy
25
26default:
27 # common before script: bootstrap, configure, make dist, prepare docker builds
28 before_script:
29 - if ! test -d gitlab_build; then
30 - docker help > /dev/null
31 - touch timestamp.tag
32 - test "x${ARMAGETRONAD_FAKERELEASE}" == "x" && export ARMAGETRONAD_FAKERELEASE=false
33 - test -r configure || ./bootstrap.sh
34 - ls docker/build -al
35 - cat version.m4
36 - mkdir -p gitlab_build
37 - cd gitlab_build
38 - . ../docker/scripts/brand.sh .
39 - ../configure --prefix=/usr/local --disable-glout --disable-sysinstall --disable-desktop progname="${PROGRAM_NAME}" progtitle="${PROGRAM_TITLE}"
40 - test "x${ARMAGETRONAD_FAKERELEASE}" == "xtrue" && cp ../docker/build/fakerelease_proto.sh docker/build/fakerelease.sh
41 - cd docker/build
42 - make CI_prepare -j`nproc`
43 - cd ../../../
44 - else
45 - find . -newer timestamp.tag ! -path "./gitlab_build" -exec touch -r timestamp.tag \{\} \;
46 - ./docker/scripts/fix_gits.sh || exit $?
47 - fi
48
49 # cache git checkouts of repositories we depend on
50 cache:
51 paths:
52 - docker/scripts/.cache
53
54
55# very basic build
56build_prepare:
57 stage: build_prepare
58 rules:
59 - if: $CI_MERGE_REQUEST_ID
60 when: on_success
61 - when: on_success
62 script: [""]
63 artifacts:
64 untracked: true
65 expire_in: 1 day
66
67
68build_server_32_raw:
69 stage: build_base
70 rules:
71 - if: $CI_MERGE_REQUEST_ID
72 when: on_success
73 - when: on_success
74 script:
75 - gitlab_build/docker/build/make_ci.sh -k result.build_server_32
76 after_script:
77 - rm -rf gitlab_build/docker/build/context*.dir
78 artifacts:
79 untracked: true
80 expire_in: 1 day
81
82build_server_steam_raw:
83 stage: build_base
84 rules:
85 - if: $CI_MERGE_REQUEST_ID
86 when: on_success
87 - when: on_success
88 script:
89 - gitlab_build/docker/build/make_ci.sh -k result.build_server_steam
90 artifacts:
91 untracked: true
92 expire_in: 1 day
93
94 # It seems like GitLab CI, all else being equal, schedules jobs in the order
95# listed here. So list the ones that take longest first.
96# Windows builds are worst because they have an additional layer of emulation,
97# are not parallelized and are client and server build in one.
98build_windows:
99 needs:
100 - build_server_32_raw
101 dependencies:
102 - build_server_32_raw
103 stage: build_main
104 rules:
105 - if: $CI_MERGE_REQUEST_ID
106 when: on_success
107 - when: on_success
108 script:
109 - gitlab_build/docker/build/make_ci.sh CI_windows
110 artifacts:
111 paths:
112 - gitlab_build/docker/build/
113 expire_in: 1 day
114
115build_windows_steam:
116 needs:
117 - build_server_steam_raw
118 dependencies:
119 - build_server_steam_raw
120 stage: build_main
121 rules:
122 - if: $CI_MERGE_REQUEST_ID
123 when: on_success
124 - when: on_success
125 script:
126 - gitlab_build/docker/build/make_ci.sh CI_windows_steam
127 artifacts:
128 paths:
129 - gitlab_build/docker/build/
130 expire_in: 1 day
131
132# debtest is faster, but also not paralellized
133build_debtest:
134 dependencies:
135 - build_prepare
136 stage: build_main
137 rules:
138 - if: $CI_MERGE_REQUEST_ID
139 when: on_success
140 - when: on_success
141 script:
142 - gitlab_build/docker/build/make_ci.sh CI_debtest
143 artifacts:
144 paths:
145 - gitlab_build/docker/build/
146 expire_in: 1 day
147
148# steam builds server and client in one go (the server is already pre-built), they are packed together
149build_linux_steam:
150 dependencies:
151 - build_server_steam_raw
152 stage: build_main
153 rules:
154 - if: $CI_MERGE_REQUEST_ID
155 when: on_success
156 - when: on_success
157 script:
158 - gitlab_build/docker/build/make_ci.sh CI_linux_steam
159 artifacts:
160 paths:
161 - gitlab_build/docker/build/
162 expire_in: 1 day
163
164build_client_64:
165 dependencies:
166 - build_prepare
167 stage: build_main
168 rules:
169 - if: $CI_MERGE_REQUEST_ID
170 when: on_success
171 - when: on_success
172 script:
173 - gitlab_build/docker/build/make_ci.sh CI_linux_client_64
174 artifacts:
175 paths:
176 - gitlab_build/docker/build/
177 expire_in: 1 day
178
179build_client_32:
180 dependencies:
181 - build_prepare
182 stage: build_main
183 rules:
184 - if: $CI_MERGE_REQUEST_ID
185 when: on_success
186 - when: on_success
187 script:
188 - gitlab_build/docker/build/make_ci.sh CI_linux_client_32
189 artifacts:
190 paths:
191 - gitlab_build/docker/build/
192 expire_in: 1 day
193
194build_server_64:
195 dependencies:
196 - build_prepare
197 stage: build_main
198 rules:
199 - if: $CI_MERGE_REQUEST_ID
200 when: on_success
201 - when: on_success
202 script:
203 - gitlab_build/docker/build/make_ci.sh CI_linux_server_64
204 artifacts:
205 paths:
206 - gitlab_build/docker/build/
207 expire_in: 1 day
208
209# this one is special, it can rely on previous build work
210build_server_32:
211 dependencies:
212 - build_server_32_raw
213 stage: build_main
214 rules:
215 - if: $CI_MERGE_REQUEST_ID
216 when: on_success
217 - when: on_success
218 script:
219 - gitlab_build/docker/build/make_ci.sh CI_linux_server_32
220 artifacts:
221 paths:
222 - gitlab_build/docker/build/
223 expire_in: 1 day
224
225build_collect:
226 stage: build_collect
227 rules:
228 - if: $CI_MERGE_REQUEST_ID
229 when: on_success
230 - when: on_success
231 script:
232 - gitlab_build/docker/build/make_ci.sh debtest.tag CI || exit $?
233 - rm -rf src
234 artifacts:
235 untracked: true
236 expire_in: 1 week
237
238# deploy to staged environment
239deploy-staged:
240 dependencies:
241 - build_prepare
242 - build_collect
243 stage: stage
244 tags:
245 - armagetronad_deploy
246 rules:
247 - if: $CI_MERGE_REQUEST_ID
248 when: never
249 - if: $CI_COMMIT_REF_PROTECTED == "true"
250 when: on_success
251 - when: never
252 before_script:
253 - ./docker/scripts/fix_gits.sh || exit $?
254 - ./docker/deploy/prepare_deploy.sh || exit $?
255
256 script:
257 # mark
258 - echo ${CI_PIPELINE_IID} > /messageboard/current_pipeline_${CI_COMMIT_REF_NAME}
259 # now enter the docker build directory and just invoke make there
260 - cd gitlab_build/docker/build
261 - make staged_deploy -O -j$(nproc) -k
262
263
264# do the actual release; manually for final releases, delayed to avoid spam for everyone else
265delay-release:
266 dependencies: []
267 stage: stage
268 rules:
269 - if: $CI_MERGE_REQUEST_ID
270 when: never
271 - if: '$CI_COMMIT_REF_PROTECTED == "false"'
272 when: never
273 - if: '$CI_COMMIT_REF_PROTECTED == "true" && $CI_COMMIT_REF_NAME !~ /^release/'
274 when: delayed
275 start_in: '6 hours'
276 - when: on_success
277 before_script: [""]
278 script: [""]
279
280# do the actual release; manually for final releases, delayed to avoid spam for everyone else
281deploy-release:
282 dependencies:
283 - build_prepare
284 - build_collect
285 stage: deploy
286 tags:
287 - armagetronad_deploy
288 rules:
289 - if: $CI_MERGE_REQUEST_ID
290 when: never
291 - if: '$CI_COMMIT_REF_PROTECTED == "true" && $CI_COMMIT_REF_NAME =~ /^release/'
292 when: manual
293 - if: '$CI_COMMIT_REF_PROTECTED == "true" && $CI_COMMIT_REF_NAME !~ /^release/'
294 when: on_success
295 - when: never
296 before_script:
297 - ./docker/scripts/fix_gits.sh || exit $?
298 - ./docker/deploy/prepare_deploy.sh || exit $?
299 script:
300 - tagfile=/messageboard/current_pipeline_${CI_COMMIT_REF_NAME}
301 - if ! echo ${CI_COMMIT_REF_NAME} | grep -q ^release && test -r ${tagfile} && ! test ${CI_PIPELINE_IID} == `cat ${tagfile}`; then
302 - echo "A newer build is already in the pipeline, abort."
303 - exit 0
304 - fi
305
306 # now enter the docker build directory and just invoke make there
307 - cd gitlab_build/docker/build
308 - make unstaged_deploy -O -j$(nproc) -k
309
310
311
312
313# pack up the downloadable build files in one handy artifact
314pack:
315 stage: stage
316 needs:
317 - build_collect
318 dependencies:
319 - build_collect
320 script: [""]
321 before_script:
322 # test that everything has been prepared correctly
323 - if ! test -d gitlab_build; then
324 - echo "No build yet!"
325 - exit 1
326 - fi
327 - find . -newer timestamp.tag ! -path "./gitlab_build" -exec touch -r timestamp.tag \{\} \;
328 - if ! make -C gitlab_build/docker/build -q CI_pack.tag; then
329 - make -d -C gitlab_build/docker/build -q CI_pack.tag || exit $?
330 - exit 1
331 - fi
332 - ./docker/scripts/fix_gits.sh || exit $?
333 artifacts:
334 expire_in: 1 week
335 paths:
336 - gitlab_build/docker/build/upload
337
338
339
340
341testbuild:
342 stage: test
343 rules:
344 - when: never
345 script:
346 - docker build -t armagetronad_server .
347
348
349
350
351# for local testing
352complete_build:
353 stage: build_main
354 rules:
355 - when: never
356 script:
357 - cd gitlab_build/docker/build
358 - make -O -j$(nproc) CI_base
359 - make -O -j$(nproc) CI
360
361 artifacts:
362 expire_in: 1 day
363 paths:
364 - gitlab_build/docker/build/upload
0365
=== modified file 'AUTHORS'
--- AUTHORS 2012-05-21 04:31:14 +0000
+++ AUTHORS 2020-07-03 06:03:19 +0000
@@ -37,7 +37,7 @@
37Oscilloscope : Most default instant chats37Oscilloscope : Most default instant chats
38Belenus : OpenBSD support sniplets38Belenus : OpenBSD support sniplets
39hoop : Zone rendering settings39hoop : Zone rendering settings
40fman23 : Console Commands40fman23 : Console commands
41LOVER$BOY : Console Commands41LOVER$BOY : Console Commands
4242
43Translators who aren't already cited above:43Translators who aren't already cited above:
4444
=== added file 'CHANGELOG.md'
--- CHANGELOG.md 1970-01-01 00:00:00 +0000
+++ CHANGELOG.md 2020-07-03 06:03:19 +0000
@@ -0,0 +1,807 @@
1
2#### Changes since 0.2.8.3.5:
3
4##### Fixed Bugs
5
6 * Debian builds: Documentation html files have empty last change ([#9](https://gitlab.com/armagetronad/armagetronad/-/issues/9))
7 * Ubuntu PPA release candidate builds would overwrite previous stable releases ([#15](https://gitlab.com/armagetronad/armagetronad/-/issues/15))
8
9##### New Features
10
11 * Adapt ChangeLog and fingerprint generation to git ([#11](https://gitlab.com/armagetronad/armagetronad/-/issues/11))
12 * Integrated build system ([#14](https://gitlab.com/armagetronad/armagetronad/-/issues/14))
13
14
15##### Changes on the 0.2.9 branch
16
17 * Added detection and reaction code for timing assist bots
18 * /shuffle now works before you actually join a team
19 * Implemented /shout command and associated settings
20 * Fixed suspension and silenced status not being re-applied after a player
21 disconnects and rejoins a server.
22 * Tweaks to enemy influence system.
23 * Ingame menu and console now are drawn on top of a semi-transparent,
24 darkened area for increased readability.
25 * New first start menu with clearer language selection and initial setup.
26 * Tutorial match against one AI at slower speed.
27 * Tutorial tooltips for the most important keybindings.
28 * ADD_MASTER_SERVER command to announce a server to a new master server.
29 Simplifies the process to list your server on a subculture.
30 * Team launch positions logged to ladderlog with POSITIONS event. Disabled by
31 default.
32 * New command-line option "--input" added to poll for input from a file
33 instead of stdin.
34 * Added WHITELIST_ENEMIES_[IP/USERNAME] to allow players to be enemies, even
35 if they come from the same IP address and ALLOW_ENEMIES_SAME_IP is
36 disabled (which is its default setting).
37 * GAME_END, NEW_MATCH, and NEW_ROUND ladderlog events include date and time.
38 * Added ENCODING ladderlog event, which specifies the encoding for data in
39 ladderlog.txt.
40 * "--input" now can be used more than once to read from multiple files or pipes.
41 * new team management ladderlog messages:
42 TEAM_CREATED <team name>
43 TEAM_DESTROYED <team name>
44 TEAM_RENAMED <old team name> <new team name>
45 TEAM_PLAYER_ADDED <team name> <player>
46 TEAM_PLAYER_REMOVED <team name> <player>
47 * Manage external scripts on Unix dedicated servers. New commands:
48 SPAWN_SCRIPT, RESPAWN_SCRIPT, FORCE_RESPAWN_SCRIPT, KILL_SCRIPT,
49 LIST_SCRIPTS, SCRIPT_ENV.
50 * New setting ACCESS_LEVEL_ANNOUNCE_LOGIN that determines if a player's
51 login/logout message can be announced.
52 * Authentication is now enabled by default.
53
54#### Changes since 0.2.8.3.4:
55
56 * Security fix: Check that the remote is allowed to create an object
57 before creating it, not decide whether it gets to keep it after
58 it already has been created and potential damage has been done.
59 No arbitrary code could be executed, but a client could effectively
60 shut down a server by sending crucial objects, such as the main game
61 timer or the game itself.
62 * Compilation fixes for current systems.
63
64#### Changes since 0.2.8.3.3:
65
66 * Eliminated undefined behavior that was fine in gcc 5, but now
67 (rightfully!) turned into crashes in gcc 6.
68 * Eliminated compilation disambiguity that was just causing a mild
69 performance degradation in gcc 5 and is now a compilation failure in
70 gcc 6.
71
72#### Changes since 0.2.8.3.2:
73
74 * security fix: do not read ahead of the beginning of network buffer.
75 * security fix: don't attribute network errors from processing random
76 packets to the connection to the server
77 * security fix: while at it, don't process random packets unless they
78 may be important
79 * fix for potential crash with friend list filtering
80 * intel driver compatibility
81 * fix for rare crash with sound lock
82 * fix for camera turning for bizarre axis configurations
83
84#### Changes since 0.2.8.3.1:
85
86 * security fix: old style action commands from clients no loger cause hangs and crashes
87 * security fix: oversized packets are ignored properly
88 * security fix: never read one byte outside of the received buffer
89 * security fix: only include .cfg files from the var subfolder
90 * compiler compatibility: adapted to gcc 4.60
91 * smaller spelling fixes
92 * FOV calculations now correct for widescreen and horizontal splitscreen
93 * Additional checks against illegal values passed to renderer
94
95#### Changes since 0.2.8.3:
96
97 * fixed temporary sound disappearance when alt-tabbing away and back
98 * default subcultures are now distributed
99 * enable 32 bit color depth at desktop resolution
100 * no more display lists for SiS cards
101 * spelling mistakes and missing German translations
102
103#### Changes since 0.2.8.3_rc4:
104
105 * New setting: KEEP_PLAYER_SLOT allows the server to kick (preferably) spectators
106 if it gets full so there is always one slot open for players
107 * New setting: ACCESS_LEVEL_AUTOKICK_IMMUNITY sets the access level required
108 to be immune from such kicks (and idle autokicks, too)
109 * Intercepted chat commands are now written to ladderlog.txt. Format:
110 COMMAND /command-intercepted player [command arguments]
111 * Increased default speed of server pinging
112 * Reordered game menus a bit
113 * fast finish works again
114
115#### Changes since 0.2.8.3_rc3:
116
117 * Pinging previously popular servers earlier for quicker server
118 browsing
119 * Improved master server random polling, the second polled master now
120 also is random, and all masters are polled if need be
121 * Custom camera snaps to cycle direction once when activated if the turn speed
122 is zero.
123 * RESERVE_SCREEN_NAME now works regardless of the ALLOW_IMPOSTOR setting.
124 * USER_LEVEL now escapes the given authenticated name so you don't have to
125 guess the escaping rules. Ex: USER_LEVEL "name with spaces@forums" 2
126 changes user level for name\_with\_spaces@forums
127
128#### Changes since 0.2.8.3_rc2:
129
130 * Fixed crash with server polling
131 * ROUND_WINNER and MATCH_WINNER ladderlog events now include the players of
132 the team.
133 * Camera switches to user preferred camera when you die in incam mode
134 * Better support for custom language files
135 * Players can no longer spam chat with /shuffle messages. Added new setting
136 SHUFFLE_SPAM_MESSAGES_PER_ROUND, a per round, per player limit on the number
137 of shuffle messages displayed.
138
139#### Changes since 0.2.8.3_rc1:
140
141 * Fixed dark color filters, such as FILTER_DARK_COLOR_STRINGS, to not filter
142 the reset color.
143 * ASE moviepack models no longer have a vertex count limit
144 * Fixed endless recursion crash between rounds
145
146#### Changes since 0.2.8.3_beta3:
147
148 * Chat prefix spam protection. Guards against prefix spam, such as when a
149 user always changes their chat message color, or prefixes all messages
150 with a clan tag. Toggle with the PREFIX_SPAM_ENABLE setting.
151 * Fixed VOTING_MATURITY to use the time when the player entered as its
152 reference time.
153 * Fixed single player highscore list not containing everyone.
154 * Fixed generation of duplicate names in highscore lists.
155 * Fixed camera crash when the grid is empty.
156
157#### Changes since 0.2.8.3_beta2:
158 * Fixed 'invincibility' bug. It really was cycles freezing in time.
159 * Fixed sporadic sound related crash at round end.
160 * setting rename: SILENCE_ALL -> SILENCE_DEFAULT.
161 * Sound no longer gets muted after you switch the sound settings.
162 * Fixed object collision detection that would sometimes pick a wrong
163 wall to collide with, most likely the reason behind wrongly accredited
164 kills.
165 * Fixed inability to switch viewport assignment in four player mode.
166 * Better handling of lag clusterbombs.
167 * Server disconnects now also take immediate effect even when you're
168 in a menu or chatting.
169
170#### Changes since 0.2.8.3_beta1:
171 * Made ready for Armatrators
172 * Authentication routines now use utf8 as forward- compatibility with
173 trunk. Previously, non-ASCII usernames simply didn't work at all.
174 * Better lag slide protection: clients no longer get confused when
175 the server sends their cycle back in time, and the server no longer
176 does that for old clients.
177 * Fixed rare wallpassing bug; it required what whould usually be an
178 instakill and infinte wall length.
179
180#### Changes since 0.2.8.2:
181
182New settings and commands:
183
184 * MIN_PLAY_TIME_*: minimal play time required before you are allowed to
185 play on this server.
186 * SPAM_AUTOKICK_COUNT: minimal number of spam warning messages you get in a
187 row before you get kicked.
188 * FORTRESS_COLLAPSE_SPEED: tune the collapse speed of fortress zones.
189 * VOTE_KICK_REASON: default reason given on kick votes.
190 * "/vote" chat interface to votes; "/vote kick <player>" issues a kick vote.
191 * new vote type "/vote suspend <player>" suspends a player for
192 VOTING_SUSPEND_ROUNDS rounds.
193 * new vote type "/vote include <file>", includes configuration file
194 vote/<file>.
195 * new vote type "/vote command <command>" executes console command
196 <command>. (Both that and /vote include are by default only available
197 to moderators).
198 * VOTING_HARM_TIME: time between all harmful votes against a player
199 * VOTING_KICK_MINHARM: auto-transform the first few menu issued kick
200 votes to suspensions
201 * (UN)SUSPEND kicks a player to spectator mode with a timeout. Intended to
202 let new players watch before they play.
203 * VOTES_CANCEL cancels all running polls.
204 * VOTING_SUSPEND [<minutes>] disallows voting during a specified amount of time.
205 * ZONE_ALPHA_TOGGLE to override the systemwide alpha blendings setting and
206 have zones rendered in wireframe mode even when alpha blending is on.
207 * ZONE_ALPHA(_SERVER) to control intensity of zone rendering.
208 * SCORE_HOLE for awarding sacrifice.
209 * SCORE_SURVIVE for player survival and FORTRESS_HELD_SCORE for not losing
210 each fortress zone.
211 * KICK_TO and MOVE_TO: redirect a client to a different server
212 * DEFAULT_KICK(_TO)_MESSAGE: default reason given to players for a kick
213 * DEFAULT_KICK_TO_SERVER/PORT: default redirection target for KICK/MOVE_TO.
214 * RENAME renames a player.
215 * If all clients support it, PING_CHARITY_MIN/MAX can be used to constrain ping charity.
216 * VOTE_KICK_TO_SERVER/PORT: redirection target for vote kicks.
217 * SILENCE and VOICE allow to control chat of annoying players.
218 * SILENCE_ALL can be used on the server to inhibit all cross-team communication unless specifically voiced.
219 * ENABLE_CHAT can be set to 0 to disable all chat. If it is set on the server it only disables public chat and logged in players can still speak.
220 * LAG_*: controls game level lag compensation.
221 * FILTER_NAME_MIDDLE: collapses multiple whitespaces to one in player names.
222 * FORTRESS_CONQEST_TIMEOUT: if an enemy contact with a zone happens longer ago than
223 this value, it is discarded from zone memory.
224 * TOPOLOGY_POLICE_PARALLEL, extra topology police flag to control the checks
225 for walls getting copied into the grid in exactly the same place.
226 * CAMERA_GLANCE_*: separate settings for the glancing camera, work like CAMERA_CUSTOM_*.
227 Likewise, CAMERA_SERVER_GLANCE_* can replace CAMERA_SERVER_CUSTOM_* when glancing.
228 CAMERA_*CUSTOM_GLANCE* are server side settings that can control whether server or
229 clientside settings are used in various situations, see settings.cfg for details.
230 * CYCLE_BOOST_? and CYCLE_BOOSTFACTOR_? for boosts when breaking away from walls,
231 see settings.cfg or config.html for details
232 * CYCLE_ACCEL_TUNNEL, works like CYCLE_ACCEL_SLINGSHOT, but is active when
233 none of the two walls you're in between is your own.
234 * CYCLE_WIDTH for making it impossible to squeeze through tight tunnels,
235 see settings.cfg for details
236 * VOTING_MATURITY controls how long you have to wait after login before
237 you can issue kick votes.
238 * CYCLE_DELAY_DOUBLEBIND_BONUS is an extra factor applied to CYCLE_DELAY
239 for turns in the same direction. Can be used to limit the advantage
240 doublebinders get while not punishing players who press both left and
241 right at the same time.
242 * LAG_O_METER_(TRESHOLD|BLEND|USE_OLD): Configure the minimal size of the
243 Lag-O-Meter, its color and whether to scrap it all and stick with the old
244 one.
245 * ALLOW_TEAM_CHANGE: if set to 0 players won't be able to join a team, create
246 a new team or change to another team.
247 * ALLOW_TEAM_CHANGE_PLAYER/DISALLOW_TEAM_CHANGE_PLAYER: allow/disallow specific
248 players to switch teams
249 * INTERCEPT_COMMANDS is a space-delimited list of chat commands that shall be
250 intercepted by an external script. Example value: /login /admin /teamleave
251 /teamshuffle /shuffle /team
252 * INTERCEPT_UNKNOWN_COMMANDS is a boolean specifying if an external script
253 wishes to handle unrecognized chat commands. This would allow hooking
254 arbitrary things like /foobarz or /mode ctf
255 * CONSOLE_LADDER_LOG boolean places the ladderlog on stdout prefixed with
256 "[L] "
257 * PLAYER_MESSAGE <user ID or name> <Message>: Like /msg, but from the
258 console
259 * All ladderlog outputs can be enabled or disabled separately by using
260 LADDERLOG_WRITE_*. LADDERLOG_WRITE_ALL enables or disables all ladderlog
261 output alltogether.
262 * CHAT_LOG controls whether to write a machine-readable chatlog to
263 var/chatlog.txt
264 * CONSOLE_DECORATE_TIMESTAMP write a timestamp for every console message?
265 * LADDERLOG_DECORATE_TIMESTAMP prefix every ladderlog message with a timestamp?
266 * SLAP <player> [points] sends a message to everyone and subtracts a number
267 of points (default: 1) from <player>'s score. Negative points are
268 supported.
269 * AUTO_TEAM_SPEC_SPAM to disable the spectator join/leave messages you get
270 when AUTO_TEAM is enabled
271
272If --enable-armathentication was activated:
273
274 * /lock, /unlock, /invite and /uninvite team management chat for players of
275 access level ACCESS_LEVEL_TEAM or better.
276 * /teams chat command that rougly prints team layout.
277 * ACCESS_LEVEL_IPS to let admins see IPs of players in the list.
278 * ACCESS_LEVEL_SPY_MSG/TEAM to let admins spy on team/private messages.
279 * CASACL to temporarily raise the access level
280 * ACCESS_LEVEL to modify the required access level to change settings
281 * AUTHORITY_WHITELIST and AUTHORITY_BLACKLIST to filter authorities you want on your server.
282 * GLOBAL_ID_ENABLED to toggle remote accounts
283 * LOCAL_USER, LOCAL_TEAM for local login accounts
284 * MD5_PREFIX/MD5_SUFFIX for additional password scrambling
285 * USER_LEVEL to grant users various access levels
286 * RESERVE_SCREEN_NAME to reserve a screen name to a certain player
287 * USER_ALIAS to bend authentication names around
288 * (UN)BAN_USER to ban really stupid users based on their global user ID,
289 BAN_USER_LIST to show a list.
290 * ACCESS_LEVEL_OP/ADMIN/CHAT/PLAY/PLAY_SLIDING to control who can do which things
291 * /login chat command then uses the more secure hashed base logins
292 * new chat commands /op and /deop to change other players' access rights
293
294Featurelets:
295
296 * Added Polish language file
297 * clientside play time tracking and server controlled minimal required experience
298 to be allowed to play.
299 * color codes in chat increase the spam level logarithmically.
300 * /team messages get a reduced spam level; reduction factor is given by
301 (team size)/(number of total players).
302 * /team messages can be used by spectators to chat with other spectators only.
303 * Performance optimizations. Using OpenGL display lists to cache geometry.
304 * Removed ztrick, antialiasing and perspective correction settings. They all had only one right
305 setting and caused us some interesting bug reports.
306 * Added PLAYER_RANDOM_COLOR for lazy people who just want to have a
307 color that differs from everyone else on the server.
308 * Configuration files get reloaded on SIGHUP
309 * all admin commands now also accept partial name matches, like /msg, and check for case sensitive
310 matches in the screen name first, then the user name, then case insensitive matches in the two.
311 * --enable-krawallserver has been actually implemented now, and it enables secure logins
312 to accounts local to the server and not-so-secure logins managed by authentication servers.
313 * A subculture list for server groups that are not managed by our main master servers
314 * A friends list and filter for the server browser that shows you only servers with
315 your friends on them.
316 * The client now can handle network traffic while it is waiting for the graphics
317 card to swap buffers.
318 * The dedicated server no longer uses a fixed delay, but a select() call (that
319 returns when network data arrives) to idle. When data arrives, it does
320 the minimum amount of work before it sends out the responses, resulting in
321 lower latency. It is now safe to decrease DEDICATED_FPS to 20 or 10, latency
322 is no longer influenced by that setting.
323 * Game level lag compensation. When a command arrives from a client that is delayed,
324 it is backdated to the time it was issued, provided enough "lag credit" is left.
325 The client is informed of the delay so it can compensate in the future, which it does
326 by forging the game timer.
327 * Nonnormalized axes and axes with odd turning directions are now properly supported
328 * The camera has a memory which player you like to watch. Every time you manually switch
329 the camera and your favorite player is not dead, the favorite is set to the currently
330 watched player. The next time the camera doesn't know what to watch, your favorite
331 will be selected.
332 * Players leaving to spectator mode with <0.2.8.2 clients are handled like
333 spectators of 0.2.8.2 clients: they stay visible to the others.
334 * Kick statistics are now persistent across server runs.
335 * MESSAGE_OF_DAY is now displayed fullscreen if both server and client support it
336 * Manual fullscreen messages can be triggered with
337 FULLSCREEN_MESSAGE <timeout> <message content>
338 * Axes Indicators by meriton, can be enabled using the AXES_INDICATORS
339 setting.
340 * New "About" menu item in the main menu displays the version of
341 Armagetron Advanced, the paths it uses, links to the main site, wiki
342 and forums and the names of the project admins.
343 * New entries in ladderlog.txt:
344 - GAME_TIME <time> (only if enabled via the LADDERLOG_GAME_TIME_INTERVAL
345 setting): The time that has passed since the last start of a round
346 - BASEZONE_CONQUERED <team> <x> <y>: A fortress zone belonging to <team>
347 at the coordinates (<x>, <y>) has been conquered
348 - BASEZONE_CONQUERER <player>: at the time of the last BASEZONE_CONQUERED
349 message, <player> has been in the conquered zone
350 - ONLINE_PLAYER <player> [<ping [<team>]]: At the beginning of the round,
351 <player> had <ping> and was on <team>. This line is not printed for bots
352 - NUM_HUMANS <n>: There are <n> players that are not AIs and are part of a
353 team.
354 - ROUND_SCORE has the player's team name appended.
355 - ROUND_SCORE_TEAM: score a team accumulated during the last round.
356 - WAIT_FOR_EXTENAL_SCRIPT: printed if the setting of the same name is
357 enabled. In this case the server will delay the start of the next round
358 until WAIT_FOR_EXTENAL_SCRIPT_TIMEOUT is reached or the setting is
359 disabled.
360 * Wrapped console lines are indented by an amount of spaces that can be
361 specified using the setting CONSOLE_INDENT.
362 * /help command that supports multiple help topics. Use
363 HELP_INTRODUCTORY_BLURB and ADD_HELP_TOPIC to control its contents
364 * /rtfm command that allows moderators to send help messages to newbies
365 * /players now shows the players' color and allows searching
366 * TEAM_ELIMINATION_MODE sets the way ArmagetronAd removes teams when there's too much teams.
367
368Bugfixes:
369
370 * Added compensation for drifting timers (observed often with
371 overclocked mainboards)
372 * Text input fields now let the text wrap correctly and make use of the space allocated
373 for them in a not-completely-dumb way. And *sigh* depending on the text field, color
374 codes are either ignored (for the usernames) or both displayed in text and rendered.
375 * "KICK 2pack" no longer kicks user 2 instead of player 2pack.
376 * Fixed various trail end related extrapolation/simulation inaccuracies that looked
377 like lag.
378 * When extrapolating, the game's sensors never detected own or teammates' walls,
379 it mistook them for enemy walls.
380 * The acceleration and boost system always used settings for enemy walls instead of
381 settings for team players' walls. That means that old clients connecting to a
382 0.2.8.3+ server that has CYCLE_ACCEL_ENEMY and CYCLE_ACCEL_TEAM set to different
383 values experience syncing problems. The default behavior therefore is to lock 0.2.8.2
384 and earlier out of your server if you set one of them away from the default.
385 If you want to set both accelerations away from the default, but to the same value,
386 there won't be a compatibility problem; in that case, set CYCLE_ACCEL_ENEMY_OVERRIDE
387 and CYCLE_ACCEL_TEAM_OVERRIDE to 0 and old clients will be allowed in. However, you
388 should manually lock out players with 0.2.7 clients, for example by modifying
389 CYCLE_ACCEL_RIM a tiny bit.
390 * "Team Red" bug. If the server allows maximally two teams, no team ever
391 gets to be Team Red.
392 * Phasing made even more difficult; nice side effect of the fix is
393 reduced network bandwidth usage.
394 * Speed gauge resets between rounds.
395 * More accurate Lag-O-Meter by meriton.
396 * Zones were sometimes invisible.
397
398Internals:
399
400 * A complete netsync cycle is now sn_Receive(); nNetObject::SyncAll(); sn_SendPlanned();.
401 * Ping charity is now completely server controlled.
402
403#### Changes since 0.2.8.1:
404 * Timestamps and teamscores added to scorelog.txt
405 * Dedicated server now works on FreeBSD and OpenBSD
406 * User running the dedicated server is called "armagetronad" again, the
407 longer "armagetronad-dedicated" caused problems with BSD
408 * Test versions refuse to connect to servers more than one version ahead
409 * Prepared client for respawns
410 * Team spawn formation is now configurable
411 * Added reasons to bans
412 * Added spectator autokicking
413 * Added history to chat and console (wrtlprnft). Press "Cursor up" to
414 edit and repeat previous chats and console commands.
415 * You only enter a game once your client is synced
416 * /msg now prefers exact matches over partial matches
417 * Cycles now have better memory for pending turns (wrtlprnft)
418 * Added player join/leave/rename messages to ladderlog.txt with IPs
419 * Ping variance influence on packet loss tolerance code is now clamped
420 by the regular, configurable, packet loss tolerance: effect of variance
421 can be no bigger than the effect of ping.
422 * Spectators are now regular players and can chat
423 * The /msg command now converts the entered pattern into the internal
424 name so if you write "/msg öäü" and there is a user named "öäü" with
425 an internal nick of "oau" it will still get matched
426 * Team changes are now only executed when allowed, the need for the
427 temporary/permanent team imbalance setting distinction has gone away
428 * Added brake toggle button
429 Bugfixes:
430 * Client sometimes crashed when leaving a server with AIs on over the menu
431 * The server starting scripts were chowning /var/run and /var/log to armagetronad
432 * Short names could crash the server
433 * Direct cycle collisions sometimes lead to both passing trough each other
434 * Init scripts now installed correctly with --enable-initscripts
435 * Hopeless pending team change wishes are deleted
436 * Large timesteps are now broken down into smaller ones on the game level
437 * Pretend keys are released before entering chat
438 * Two cycle steering events were sent if you doublebound the brake
439 * Large speed boosts out of game rule bounds were possible during network
440 glitches
441 * Debug recording reliability increased, function call with undefined return
442 value eliminated
443 * Recording and scorekeeping no longer conflict
444 * Input during a recording now has an end marker, making quick keypresses
445 after leaving a menu not break it
446 * CYCLE_RUBBER_DELAY was overridden sometimes by packet loss tolerance
447 * ALLOW_CONTROL_DURING_CHAT now ignores modifier keys like shift and
448 has been reactivated
449 * The camera sometimes got stuck in free mode for the first round you watch
450 * Crashfix in hole blowing code when no cycle was set
451 * After a "perfect" 180, you're more often on the right side of your own wall
452 That code caused some havoc at first, so it has been reworked
453 * The smart cam did not like fluctuating framerates
454 * Improved debug recording reliability: multiple master server visits
455 and too quick keypresses were causing trouble.
456 * Canonical DESTDIR support and added ROOTDIR support for testing
457 * Login floods are detected and ignored
458 * Player name updates sanitized
459 * Disabled complicated feasibility tests for team menu entries,
460 they did not have the full information and were often wrong
461 * Team score only added to player score if no teamplay is possible
462
463#### Changes since 0.2.8.0:
464 * INCLUDE console command now gives a file not found error
465 * ALL user given paths are validated for security problems in a special function
466 * Fallback to default map on map load failure works again (broken sine 0.2.8.0_rc4)
467
468#### Changes since 0.2.8.0_rc4:
469Bugfixes:
470
471 * SECURITY FIX: via a MAP_FILE path with included .., it was possible
472 to write files anywhere, provided they did not exist previously.
473 Clients with this vulnerability are locked out of the server now.
474 * ALLOW_CONTROL_DURING_CHAT has been disabled for now.
475 * Another connection termination bug.
476
477#### Changes since 0.2.8.0_rc3:
478 * Added spectator mode toggle key.
479 * Thresholds when a white background bar is rendered behind texts is
480 now configurable in the expert section of settings.cfg.
481 * Ingame menu trigger key is configurable now, only ESC stays hardcoded.
482 * The map parser checks whether the map is stored at the right location.
483 * Map validation errors are now visible on the client.
484 * Made magic numbers used by the smart camera configurable for user tweaking.
485 This is undocumented and unsupported.
486 * The server browser now shows a B beside the score to mark bookmarked servers.
487 Bugfixes:
488 * -Os compile option is filtered out if GCC 3.3 is used, it makes the build go bad.
489 * Extremely low values of CYCLE_DELAY were not honored, an arbitrary delay of .005s
490 was added to it.
491 * On entering a server, the camera would sometimes be stuck in free mode.
492
493#### Changes since 0.2.8.0_rc2:
494 * Almost final artwork
495 * Moviepacks can now also contain texture replacements for the default cycle model
496 * Added number of teammates alive to HUD
497 Bugfixes:
498 * Dual textured floor rendering is now disabled without alpha blending as it
499 did not work anyway.
500 * Lag-O-Meter now has the correct size (the old, buggy one can be restored by
501 setting LAG_O_METER_SCALE to .5).
502 * The network system made some IDs randomly unusable, causing zombie
503 cycles, invisible walls and disconnections.
504 * The AI Team from a previous local game session was sometimes still visible
505 on the score table in the following network game on a remote server.
506 * The server did not start a new match when temporarily, only spectators were online.
507 * Player walls were rendered twice.
508 * The server wrote console center messages to stderr.
509 * UNBAN_IP did not work at all.
510 * The code that should kill a cycle in performance/DOS protection
511 circumstances just crashed.
512
513#### Changes since 0.2.8.0_rc1:
514 * Bugfixes:
515 - Dedicated server for Windows works again.
516 - Cycle turns are now executed more accurately on the server.
517 - Timer stuttering at end of round (was non-critical, but ugly).
518 - Custom camera did not turn when the internal camera was
519 configured not to turn.
520 - Idle player kick code crashed when it kicked a client with
521 many players.
522 - The code that removes inactive players after a while removed
523 the AI players.
524 * Reverted smart camera movement to pre-beta4 behavior,
525 the new code made some players seasick :)
526 * Ingame admin interface gives more useful information to the invoker
527 * Small font rendering improvements
528 * Zone conquest message, if it is not the one that ends the round,
529 now states the name of the zone owning team.
530
531#### Changes since 0.2.8_beta4.2:
532 * Fixed bugs:
533 - Random client disconnection
534 - Another vote-not-appearing-on-client bug
535 - Invisible wall segments right after turn
536 - Arena initialization before all settings are transmitted from the server
537 - The server was using more rubber than the client sometimes
538 - Crash with moviepack and some maps
539 - Object sync messages not accepted by client in second network session
540 * Improved kill/suicide/team kill distinction (ENEMY_* settings)
541 * Chatbots and idle players can be removed from the game and kicked
542 (CHATTER/IDLE_REMOVE_TIME,IDLE_KICK_TIME)
543 * Players/team leaders can pause the game before a rond starts (PLAYER_CHAT_WAIT*)
544 * Color codes can be filtered from player names (FILTER_COLOR_NAMES)
545 * New machine readable log file: ladderlog.txt
546 * Configurable and better core dump/team kill/suicide distinction algorithm
547 * Unknown settings are recognized now in configuration files
548 * All global key bindings (Grab mouse, pause and texture reload were left)
549 are now configurable
550 * Player listing length limit adjusted so two teams/16 players fits on screen
551 * Less verbose upgrade warning messages
552 * Imposters can get a non-conflicting name (ALLOW_IMPOST[EO]RS)
553
554#### Changes since 0.2.8_beta4:
555 * Fixed bugs:
556 - Windows version had a memory overwrite error causing crashes and weird behavior.
557 - The game quit when the chat key and a key bound to an instant chat were pressed to quickly.
558 - Votes expired too early on the client.
559 - Performance: a lot of unused temporary walls were hanging around each round.
560 - Cycles sometimes warped to odd locations.
561 * Tweaked smart camera to not stay in front of the cycle so much.
562 - Tweaked smart camera custom glancing.
563 Report back whether you like or hate it!
564 * Made custom camera even more configurable, changed default settings.
565 (old ones are still in settings.cfg)
566 * Forced glancing end on cycle turn now looks better.
567 * FOV settings now deal better with wide screens/splitscreen mode.
568 * Increased ping measurements again by adding the fluctuations. The raw
569 average ping caused the game logic to be too picky.
570
571#### Changes since 0.2.8_beta3:
572 * Famous fixed bugs:
573 - Random huge felt lag or blank screen (it was actually a problem with the timer) is gone.
574 - Bogus "possible phase bug" message.
575 - Seemingly random walls popping out of nothing, only to disappear a second later.
576 - Random camera focus changes while you were still alive.
577 - Every 100th console line got deleted.
578 * Reduced pings! Actually, just the measurement is improved, the actual latency
579 stays the same. I hope nobody notices that. Good thing nobody reads NEWS files :)
580 * New text editing convenience: Home and end keys work, and CTRL+left/right/del/backspace
581 work on whole words. Thanks, Nemo!
582 * New instant chat functions: There are now 25 instant chat strings. If an instant
583 chat string ends in a \, it will not be sent immediately, it's opened to be edited by you.
584 Pressing an instant chat key while already chatting will insert the string, provided the
585 key does not produce a regular character.
586 * If enabled by the server administrator: control your cycle while you chat.
587 * Turning speed of custom and internal camera can be adjusted with CAMERA_CUSTOM_TURN_SPEED
588 and CAMERA_IN_TURN_SPEED.
589 * The custom camera zooms out from a closeup at round start. Useful to see your position
590 in your team. Configurable with CAMERA_CUSTOM_ZOOM.
591 * Master server redundancy enabled. Thanks to Lucifer for hosting the backup master!
592
593#### Changes since 0.2.8_beta2:
594 * More bugfixes: most annoying was the crash/infinite loop a server got in when
595 the master server was unreachable
596 * Added zones to map specification
597 * Reworked top level map format (sorry to the map makers for the inconvenience)
598 * Windows: added start menu entries that open the system and user data directories
599 * Bandwidth limitation now works. That means if you lowered the bandwidth
600 limits in the network setup, they were not respected. You probably should
601 readjust them.
602
603#### Changes since 0.2.8_beta1:
604 * bugfixes, of course
605 * added recording and playback startmenu entries for Windows
606 * abuse prevention: added IP banning, player number per IP and client limit,
607 doublebinding can be crippled on server command
608
609#### Changes since 0.2.7.1:
610 * Server side cycle synchronization issues fixed:
611 - destination removal fixed
612 - lag sliding caused by different interpretation of grinding turn commands on client and server fixed
613 - niceness for older clients: sync interval decreased, no sync in front of wall to prevent local tunneling
614 * Client side cycle synchronization issues fixed:
615 - smooth corrections now only affect the appearance, the correct values are used internally
616 - sync messages are no longer ignored,
617 - new extrapolating sync method implemented,
618 - ghosting fixed,
619 - wall ends sticking out fixed ( for enemy cycles ),
620 - the sophisticated distance based sync code implemented years ago is now actually used, oh dear.
621 * Performance improvements:
622 - netobject synchronization does no longer traverse all netobjects
623 - disabled gameobject-gameobject interaction
624 * added support for nonorthogonal driving directions
625 * added support for debug recording and playback
626 * switched to using automake
627
628#### Changes since 0.2.7.0:
629 * Fixed security issues: fake message ID crash, fake peer ID crash ( both
630 maybe could be used to execute arbitrary code ), fake logout exploit, fake
631 connections DOS attack
632 * The feared "left grid" error message has been replaced by recovery code
633 * Fixed transfer of infinite floats over the network
634 * Fixed network timer inaccuracies on long running servers
635 * Fixed rip bug ( for those who like it: search and you will find )
636 * Fixed wall bending ( there is still some wall bending left, but it will be
637 too small to notice )
638 * Fixed tunneling bugs ( you were able to move from one side of a wall to the other )
639 * Fixed bounce bug ( a small zigzag towards a wall sometimes put you further
640 away from it, leaving a hole )
641 * Fixed massive reference counting overflow crash caused by repeated close grinding/180ing
642 * Made rubber code customizable and frame rate independent ( new CYCLE_RUBBER_
643 variables in settings.cfg )
644 * For debugging and scripting: dedicated server console messages can be
645 decorated with client ID and IP
646 * Topology police: facility to catch tunneling issues after they happened. off
647 by default
648 * Cycle network code is more robust
649 * Update frequency of cycle position now configurable and more frequent for
650 client's own cycle that the rest by default
651 * Corrected rc.d scripts to start the server as a system service
652 * Voting more configurable: voters can be made public, spectators can't vote
653 any more by default
654 * Moviepack floor color fixed
655 * Hostname lookup failure fixed
656 * "PLAYER_1 nick" console command problems fixed
657 * Windows libraries moved out of the main source tree
658 * Source code now compatible with 64 bit and gcc 3.4
659 * Colored explosions!
660 * HUD enhancements: customization, works in splitscreen mode
661 * Directory scanning code added ( not yet visible, will be used for
662 moviepack/cycle selection )
663 * Moviepack sky texture support
664 * Master server can now run on windows, too
665 * Explosion sound now actually works
666
667#### Changes since 0.2.6.0:
668 * added HUD
669 * Winzone may now be a deathzone
670
671#### Changes since 0.2.5.2:
672 * Split custom camera into server defined and client defined custom camera
673 * Fixed monster chat message exploit
674 * Added local player silencing
675 * Added Kick voting
676 * Added player names on cycles ( implemented by Christian Reitwiessner )
677 * Harsher ( and configurable ) spam protection
678 * Fixed strangely bent walls
679
680#### Changes since 0.2.5.1:
681 * Fixed fullscreen toggle while chatting
682 * Disabled trilinear filtering for ATI cards by default ( to avoid lockups )
683 * Worked around flawy S3 texture storage
684 * Fixed crash when trying to change teams in spectator mode
685
686#### Changes since 0.2.5:
687 * Another go at the "11th Round Bug"
688 * Player list is now sorted after displayed score ( before: some invisible combination of team score and own score )
689 * Fixed brakes when connecting to a 0.2.4 or earlier server
690 * Updated FAQ with server setting hints
691 * Unified Windows and Unix network code
692 * Fixed texture hardware mode
693 * Less connection losses
694 * Fixed network ID related crash
695 * Added player names to information you get from a server
696 * Added window-fullscreen toggle key and separate setting of screen resolution/window size
697
698#### Changes since 0.2.4:
699 * Fixed online observer mode switching
700 * Fixed command line options
701 * Fixed player quit message
702 * Fixed AI join message
703 * Fixed double registration of some network objects ( had no known visible symptom )
704 * Added security checks to see if Armagetron is run correctly
705 * Fixed big brother ( reporting of OS, graphic card and version to the master server )
706 * Disabled memory manager by default
707 * Fixed single player exit game crash
708 * Fixed zero length sting receive crash
709 * Completed network version control
710 * Added timestamps to logfiles ( code fragments by k_at_work )
711 * Added reason to login deny/kick messages
712 * Fixed 11th round bug ( additional round started after match end )
713 * Added --doc command line switch to print offline version of online help
714 * Fixed sign of rise/drop highscore messages
715 * New console commands: quit/exit ( dedicated server only ), kick <player name>, center_message <message> and console_message <message>
716 * New setting item: MAX_CLIENTS
717 * Improved server browser, less skipping around
718 * Added instant win zone
719 * Cycle brake is now of limited duration
720
721#### Changes since 0.2.3:
722 * Fixed score display ( really! )
723 * Fixed freestyle mode round counting
724 * Fixed server freezer
725 * Fixed explosion sync
726 * Fixed AI crashes when player leaves in mid-battle
727 * Fixed configure script: now really uses sdl-config
728 * Speeded up deletion of unreachable servers
729 * Fixed endless recursion bug ( "11th player bug" )
730 * Moved team start positions further apart
731 * Player name is now taken from $USER on first start and player color is randomized
732
733#### Changes since 0.2.2:
734 * Fixed highscores and ladder
735 * Delayed score deletion after match end
736 * Fixed autoexec.cfg loading
737 * More automatic rebuilding
738 * Fixed dedicated server idle quitting
739 * Fixed auto AI
740 * Fixed instant chat
741 * Fixed score display for many players or long player names
742 * Fixed very rare client crash
743 * Fixed not so rare release only crash
744 * Fixed balance-related typos
745 * Tweaked smart camera so that it works well when braking
746 * Fixed finish mode game setting
747
748#### Changes since 0.2.1:
749 * Fixed another connection-loss bug
750 * Fixed observer freeze
751 * Observers now don't just get kicked when nobody else is online
752 * Fixed software renderer detection
753 * Updated FAQ
754 * Fixed config file loading on some architectures
755 * Improved team coloring
756 * Fixed stuck brake bug
757
758#### Changes since 0.2.0:
759 * Fixed crash when watching a quitting player
760
761#### Changes since 0.2.pre4:
762 * Fixed crashes
763 * Fixed windows network connection problems
764 * Fixed clour related problems
765 * Added marker for own cycle to avoid confusion in team mode
766 * Changed directory placement: configuration resides in /etc/armagetron,
767 user configuration in ~/.armagetron/var
768 * Data files added to ~/.armagetron/textures ( or /models or /sounds )
769 are now loaded in favor of original data, allowing user specific mods
770
771#### Changes since 0.2.pre3:
772 * Fixed some more rare crashes and lockups
773 * Fixed team handling: all team change operations now get only active
774 on next round address
775 * Fixed moviesounds
776 * Fixed server-master server communications
777 * new installation method: make update ( keeps user configuration )
778
779#### Changes since 0.2.pre2:
780 * Fixed some rare crashes and lockups
781 * Improved cycle handling over network
782 * It is now allowed to fight with an arbitrary large team against the AI
783 regardless of the balancing settings
784 * improved rendering precision: z-fighting artefact are now uncommon,
785 and at the same time early clipping on the near clipping plane
786
787#### Changes since 0.2.pre:
788 * got rid of "zombie" players
789 * corrected team messages
790 * fixed chatting
791 * fixed 32 bit rendering
792
793#### Changes since 0.1.4.9:
794 * it is now possible for players to form teams
795 * explosion now can blow holes in player walls
796 * delay added to wall disappearance after death
797 * finite wall length supported for snake-style gameplay
798 * arena size and game speed configurable in the menu
799 * the AI has been greatly improved
800 * there is an Internet master server active
801 * support for localization has been added, currently featuring
802 English and German
803 * AI players now have names
804 * the moviepack title screen is displayed
805 * Linux version: easier system-wide installation with RPM packages
806 or "make install"
807
0808
=== added file 'CHANGELOG_FROZEN.md'
--- CHANGELOG_FROZEN.md 1970-01-01 00:00:00 +0000
+++ CHANGELOG_FROZEN.md 2020-07-03 06:03:19 +0000
@@ -0,0 +1,792 @@
1##### Changes on the 0.2.9 branch
2
3 * Added detection and reaction code for timing assist bots
4 * /shuffle now works before you actually join a team
5 * Implemented /shout command and associated settings
6 * Fixed suspension and silenced status not being re-applied after a player
7 disconnects and rejoins a server.
8 * Tweaks to enemy influence system.
9 * Ingame menu and console now are drawn on top of a semi-transparent,
10 darkened area for increased readability.
11 * New first start menu with clearer language selection and initial setup.
12 * Tutorial match against one AI at slower speed.
13 * Tutorial tooltips for the most important keybindings.
14 * ADD_MASTER_SERVER command to announce a server to a new master server.
15 Simplifies the process to list your server on a subculture.
16 * Team launch positions logged to ladderlog with POSITIONS event. Disabled by
17 default.
18 * New command-line option "--input" added to poll for input from a file
19 instead of stdin.
20 * Added WHITELIST_ENEMIES_[IP/USERNAME] to allow players to be enemies, even
21 if they come from the same IP address and ALLOW_ENEMIES_SAME_IP is
22 disabled (which is its default setting).
23 * GAME_END, NEW_MATCH, and NEW_ROUND ladderlog events include date and time.
24 * Added ENCODING ladderlog event, which specifies the encoding for data in
25 ladderlog.txt.
26 * "--input" now can be used more than once to read from multiple files or pipes.
27 * new team management ladderlog messages:
28 TEAM_CREATED <team name>
29 TEAM_DESTROYED <team name>
30 TEAM_RENAMED <old team name> <new team name>
31 TEAM_PLAYER_ADDED <team name> <player>
32 TEAM_PLAYER_REMOVED <team name> <player>
33 * Manage external scripts on Unix dedicated servers. New commands:
34 SPAWN_SCRIPT, RESPAWN_SCRIPT, FORCE_RESPAWN_SCRIPT, KILL_SCRIPT,
35 LIST_SCRIPTS, SCRIPT_ENV.
36 * New setting ACCESS_LEVEL_ANNOUNCE_LOGIN that determines if a player's
37 login/logout message can be announced.
38 * Authentication is now enabled by default.
39
40#### Changes since 0.2.8.3.4:
41
42 * Security fix: Check that the remote is allowed to create an object
43 before creating it, not decide whether it gets to keep it after
44 it already has been created and potential damage has been done.
45 No arbitrary code could be executed, but a client could effectively
46 shut down a server by sending crucial objects, such as the main game
47 timer or the game itself.
48 * Compilation fixes for current systems.
49
50#### Changes since 0.2.8.3.3:
51
52 * Eliminated undefined behavior that was fine in gcc 5, but now
53 (rightfully!) turned into crashes in gcc 6.
54 * Eliminated compilation disambiguity that was just causing a mild
55 performance degradation in gcc 5 and is now a compilation failure in
56 gcc 6.
57
58#### Changes since 0.2.8.3.2:
59
60 * security fix: do not read ahead of the beginning of network buffer.
61 * security fix: don't attribute network errors from processing random
62 packets to the connection to the server
63 * security fix: while at it, don't process random packets unless they
64 may be important
65 * fix for potential crash with friend list filtering
66 * intel driver compatibility
67 * fix for rare crash with sound lock
68 * fix for camera turning for bizarre axis configurations
69
70#### Changes since 0.2.8.3.1:
71
72 * security fix: old style action commands from clients no loger cause hangs and crashes
73 * security fix: oversized packets are ignored properly
74 * security fix: never read one byte outside of the received buffer
75 * security fix: only include .cfg files from the var subfolder
76 * compiler compatibility: adapted to gcc 4.60
77 * smaller spelling fixes
78 * FOV calculations now correct for widescreen and horizontal splitscreen
79 * Additional checks against illegal values passed to renderer
80
81#### Changes since 0.2.8.3:
82
83 * fixed temporary sound disappearance when alt-tabbing away and back
84 * default subcultures are now distributed
85 * enable 32 bit color depth at desktop resolution
86 * no more display lists for SiS cards
87 * spelling mistakes and missing German translations
88
89#### Changes since 0.2.8.3_rc4:
90
91 * New setting: KEEP_PLAYER_SLOT allows the server to kick (preferably) spectators
92 if it gets full so there is always one slot open for players
93 * New setting: ACCESS_LEVEL_AUTOKICK_IMMUNITY sets the access level required
94 to be immune from such kicks (and idle autokicks, too)
95 * Intercepted chat commands are now written to ladderlog.txt. Format:
96 COMMAND /command-intercepted player [command arguments]
97 * Increased default speed of server pinging
98 * Reordered game menus a bit
99 * fast finish works again
100
101#### Changes since 0.2.8.3_rc3:
102
103 * Pinging previously popular servers earlier for quicker server
104 browsing
105 * Improved master server random polling, the second polled master now
106 also is random, and all masters are polled if need be
107 * Custom camera snaps to cycle direction once when activated if the turn speed
108 is zero.
109 * RESERVE_SCREEN_NAME now works regardless of the ALLOW_IMPOSTOR setting.
110 * USER_LEVEL now escapes the given authenticated name so you don't have to
111 guess the escaping rules. Ex: USER_LEVEL "name with spaces@forums" 2
112 changes user level for name\_with\_spaces@forums
113
114#### Changes since 0.2.8.3_rc2:
115
116 * Fixed crash with server polling
117 * ROUND_WINNER and MATCH_WINNER ladderlog events now include the players of
118 the team.
119 * Camera switches to user preferred camera when you die in incam mode
120 * Better support for custom language files
121 * Players can no longer spam chat with /shuffle messages. Added new setting
122 SHUFFLE_SPAM_MESSAGES_PER_ROUND, a per round, per player limit on the number
123 of shuffle messages displayed.
124
125#### Changes since 0.2.8.3_rc1:
126
127 * Fixed dark color filters, such as FILTER_DARK_COLOR_STRINGS, to not filter
128 the reset color.
129 * ASE moviepack models no longer have a vertex count limit
130 * Fixed endless recursion crash between rounds
131
132#### Changes since 0.2.8.3_beta3:
133
134 * Chat prefix spam protection. Guards against prefix spam, such as when a
135 user always changes their chat message color, or prefixes all messages
136 with a clan tag. Toggle with the PREFIX_SPAM_ENABLE setting.
137 * Fixed VOTING_MATURITY to use the time when the player entered as its
138 reference time.
139 * Fixed single player highscore list not containing everyone.
140 * Fixed generation of duplicate names in highscore lists.
141 * Fixed camera crash when the grid is empty.
142
143#### Changes since 0.2.8.3_beta2:
144 * Fixed 'invincibility' bug. It really was cycles freezing in time.
145 * Fixed sporadic sound related crash at round end.
146 * setting rename: SILENCE_ALL -> SILENCE_DEFAULT.
147 * Sound no longer gets muted after you switch the sound settings.
148 * Fixed object collision detection that would sometimes pick a wrong
149 wall to collide with, most likely the reason behind wrongly accredited
150 kills.
151 * Fixed inability to switch viewport assignment in four player mode.
152 * Better handling of lag clusterbombs.
153 * Server disconnects now also take immediate effect even when you're
154 in a menu or chatting.
155
156#### Changes since 0.2.8.3_beta1:
157 * Made ready for Armatrators
158 * Authentication routines now use utf8 as forward- compatibility with
159 trunk. Previously, non-ASCII usernames simply didn't work at all.
160 * Better lag slide protection: clients no longer get confused when
161 the server sends their cycle back in time, and the server no longer
162 does that for old clients.
163 * Fixed rare wallpassing bug; it required what whould usually be an
164 instakill and infinte wall length.
165
166#### Changes since 0.2.8.2:
167
168New settings and commands:
169
170 * MIN_PLAY_TIME_*: minimal play time required before you are allowed to
171 play on this server.
172 * SPAM_AUTOKICK_COUNT: minimal number of spam warning messages you get in a
173 row before you get kicked.
174 * FORTRESS_COLLAPSE_SPEED: tune the collapse speed of fortress zones.
175 * VOTE_KICK_REASON: default reason given on kick votes.
176 * "/vote" chat interface to votes; "/vote kick <player>" issues a kick vote.
177 * new vote type "/vote suspend <player>" suspends a player for
178 VOTING_SUSPEND_ROUNDS rounds.
179 * new vote type "/vote include <file>", includes configuration file
180 vote/<file>.
181 * new vote type "/vote command <command>" executes console command
182 <command>. (Both that and /vote include are by default only available
183 to moderators).
184 * VOTING_HARM_TIME: time between all harmful votes against a player
185 * VOTING_KICK_MINHARM: auto-transform the first few menu issued kick
186 votes to suspensions
187 * (UN)SUSPEND kicks a player to spectator mode with a timeout. Intended to
188 let new players watch before they play.
189 * VOTES_CANCEL cancels all running polls.
190 * VOTING_SUSPEND [<minutes>] disallows voting during a specified amount of time.
191 * ZONE_ALPHA_TOGGLE to override the systemwide alpha blendings setting and
192 have zones rendered in wireframe mode even when alpha blending is on.
193 * ZONE_ALPHA(_SERVER) to control intensity of zone rendering.
194 * SCORE_HOLE for awarding sacrifice.
195 * SCORE_SURVIVE for player survival and FORTRESS_HELD_SCORE for not losing
196 each fortress zone.
197 * KICK_TO and MOVE_TO: redirect a client to a different server
198 * DEFAULT_KICK(_TO)_MESSAGE: default reason given to players for a kick
199 * DEFAULT_KICK_TO_SERVER/PORT: default redirection target for KICK/MOVE_TO.
200 * RENAME renames a player.
201 * If all clients support it, PING_CHARITY_MIN/MAX can be used to constrain ping charity.
202 * VOTE_KICK_TO_SERVER/PORT: redirection target for vote kicks.
203 * SILENCE and VOICE allow to control chat of annoying players.
204 * SILENCE_ALL can be used on the server to inhibit all cross-team communication unless specifically voiced.
205 * ENABLE_CHAT can be set to 0 to disable all chat. If it is set on the server it only disables public chat and logged in players can still speak.
206 * LAG_*: controls game level lag compensation.
207 * FILTER_NAME_MIDDLE: collapses multiple whitespaces to one in player names.
208 * FORTRESS_CONQEST_TIMEOUT: if an enemy contact with a zone happens longer ago than
209 this value, it is discarded from zone memory.
210 * TOPOLOGY_POLICE_PARALLEL, extra topology police flag to control the checks
211 for walls getting copied into the grid in exactly the same place.
212 * CAMERA_GLANCE_*: separate settings for the glancing camera, work like CAMERA_CUSTOM_*.
213 Likewise, CAMERA_SERVER_GLANCE_* can replace CAMERA_SERVER_CUSTOM_* when glancing.
214 CAMERA_*CUSTOM_GLANCE* are server side settings that can control whether server or
215 clientside settings are used in various situations, see settings.cfg for details.
216 * CYCLE_BOOST_? and CYCLE_BOOSTFACTOR_? for boosts when breaking away from walls,
217 see settings.cfg or config.html for details
218 * CYCLE_ACCEL_TUNNEL, works like CYCLE_ACCEL_SLINGSHOT, but is active when
219 none of the two walls you're in between is your own.
220 * CYCLE_WIDTH for making it impossible to squeeze through tight tunnels,
221 see settings.cfg for details
222 * VOTING_MATURITY controls how long you have to wait after login before
223 you can issue kick votes.
224 * CYCLE_DELAY_DOUBLEBIND_BONUS is an extra factor applied to CYCLE_DELAY
225 for turns in the same direction. Can be used to limit the advantage
226 doublebinders get while not punishing players who press both left and
227 right at the same time.
228 * LAG_O_METER_(TRESHOLD|BLEND|USE_OLD): Configure the minimal size of the
229 Lag-O-Meter, its color and whether to scrap it all and stick with the old
230 one.
231 * ALLOW_TEAM_CHANGE: if set to 0 players won't be able to join a team, create
232 a new team or change to another team.
233 * ALLOW_TEAM_CHANGE_PLAYER/DISALLOW_TEAM_CHANGE_PLAYER: allow/disallow specific
234 players to switch teams
235 * INTERCEPT_COMMANDS is a space-delimited list of chat commands that shall be
236 intercepted by an external script. Example value: /login /admin /teamleave
237 /teamshuffle /shuffle /team
238 * INTERCEPT_UNKNOWN_COMMANDS is a boolean specifying if an external script
239 wishes to handle unrecognized chat commands. This would allow hooking
240 arbitrary things like /foobarz or /mode ctf
241 * CONSOLE_LADDER_LOG boolean places the ladderlog on stdout prefixed with
242 "[L] "
243 * PLAYER_MESSAGE <user ID or name> <Message>: Like /msg, but from the
244 console
245 * All ladderlog outputs can be enabled or disabled separately by using
246 LADDERLOG_WRITE_*. LADDERLOG_WRITE_ALL enables or disables all ladderlog
247 output alltogether.
248 * CHAT_LOG controls whether to write a machine-readable chatlog to
249 var/chatlog.txt
250 * CONSOLE_DECORATE_TIMESTAMP write a timestamp for every console message?
251 * LADDERLOG_DECORATE_TIMESTAMP prefix every ladderlog message with a timestamp?
252 * SLAP <player> [points] sends a message to everyone and subtracts a number
253 of points (default: 1) from <player>'s score. Negative points are
254 supported.
255 * AUTO_TEAM_SPEC_SPAM to disable the spectator join/leave messages you get
256 when AUTO_TEAM is enabled
257
258If --enable-armathentication was activated:
259
260 * /lock, /unlock, /invite and /uninvite team management chat for players of
261 access level ACCESS_LEVEL_TEAM or better.
262 * /teams chat command that rougly prints team layout.
263 * ACCESS_LEVEL_IPS to let admins see IPs of players in the list.
264 * ACCESS_LEVEL_SPY_MSG/TEAM to let admins spy on team/private messages.
265 * CASACL to temporarily raise the access level
266 * ACCESS_LEVEL to modify the required access level to change settings
267 * AUTHORITY_WHITELIST and AUTHORITY_BLACKLIST to filter authorities you want on your server.
268 * GLOBAL_ID_ENABLED to toggle remote accounts
269 * LOCAL_USER, LOCAL_TEAM for local login accounts
270 * MD5_PREFIX/MD5_SUFFIX for additional password scrambling
271 * USER_LEVEL to grant users various access levels
272 * RESERVE_SCREEN_NAME to reserve a screen name to a certain player
273 * USER_ALIAS to bend authentication names around
274 * (UN)BAN_USER to ban really stupid users based on their global user ID,
275 BAN_USER_LIST to show a list.
276 * ACCESS_LEVEL_OP/ADMIN/CHAT/PLAY/PLAY_SLIDING to control who can do which things
277 * /login chat command then uses the more secure hashed base logins
278 * new chat commands /op and /deop to change other players' access rights
279
280Featurelets:
281
282 * Added Polish language file
283 * clientside play time tracking and server controlled minimal required experience
284 to be allowed to play.
285 * color codes in chat increase the spam level logarithmically.
286 * /team messages get a reduced spam level; reduction factor is given by
287 (team size)/(number of total players).
288 * /team messages can be used by spectators to chat with other spectators only.
289 * Performance optimizations. Using OpenGL display lists to cache geometry.
290 * Removed ztrick, antialiasing and perspective correction settings. They all had only one right
291 setting and caused us some interesting bug reports.
292 * Added PLAYER_RANDOM_COLOR for lazy people who just want to have a
293 color that differs from everyone else on the server.
294 * Configuration files get reloaded on SIGHUP
295 * all admin commands now also accept partial name matches, like /msg, and check for case sensitive
296 matches in the screen name first, then the user name, then case insensitive matches in the two.
297 * --enable-krawallserver has been actually implemented now, and it enables secure logins
298 to accounts local to the server and not-so-secure logins managed by authentication servers.
299 * A subculture list for server groups that are not managed by our main master servers
300 * A friends list and filter for the server browser that shows you only servers with
301 your friends on them.
302 * The client now can handle network traffic while it is waiting for the graphics
303 card to swap buffers.
304 * The dedicated server no longer uses a fixed delay, but a select() call (that
305 returns when network data arrives) to idle. When data arrives, it does
306 the minimum amount of work before it sends out the responses, resulting in
307 lower latency. It is now safe to decrease DEDICATED_FPS to 20 or 10, latency
308 is no longer influenced by that setting.
309 * Game level lag compensation. When a command arrives from a client that is delayed,
310 it is backdated to the time it was issued, provided enough "lag credit" is left.
311 The client is informed of the delay so it can compensate in the future, which it does
312 by forging the game timer.
313 * Nonnormalized axes and axes with odd turning directions are now properly supported
314 * The camera has a memory which player you like to watch. Every time you manually switch
315 the camera and your favorite player is not dead, the favorite is set to the currently
316 watched player. The next time the camera doesn't know what to watch, your favorite
317 will be selected.
318 * Players leaving to spectator mode with <0.2.8.2 clients are handled like
319 spectators of 0.2.8.2 clients: they stay visible to the others.
320 * Kick statistics are now persistent across server runs.
321 * MESSAGE_OF_DAY is now displayed fullscreen if both server and client support it
322 * Manual fullscreen messages can be triggered with
323 FULLSCREEN_MESSAGE <timeout> <message content>
324 * Axes Indicators by meriton, can be enabled using the AXES_INDICATORS
325 setting.
326 * New "About" menu item in the main menu displays the version of
327 Armagetron Advanced, the paths it uses, links to the main site, wiki
328 and forums and the names of the project admins.
329 * New entries in ladderlog.txt:
330 - GAME_TIME <time> (only if enabled via the LADDERLOG_GAME_TIME_INTERVAL
331 setting): The time that has passed since the last start of a round
332 - BASEZONE_CONQUERED <team> <x> <y>: A fortress zone belonging to <team>
333 at the coordinates (<x>, <y>) has been conquered
334 - BASEZONE_CONQUERER <player>: at the time of the last BASEZONE_CONQUERED
335 message, <player> has been in the conquered zone
336 - ONLINE_PLAYER <player> [<ping [<team>]]: At the beginning of the round,
337 <player> had <ping> and was on <team>. This line is not printed for bots
338 - NUM_HUMANS <n>: There are <n> players that are not AIs and are part of a
339 team.
340 - ROUND_SCORE has the player's team name appended.
341 - ROUND_SCORE_TEAM: score a team accumulated during the last round.
342 - WAIT_FOR_EXTENAL_SCRIPT: printed if the setting of the same name is
343 enabled. In this case the server will delay the start of the next round
344 until WAIT_FOR_EXTENAL_SCRIPT_TIMEOUT is reached or the setting is
345 disabled.
346 * Wrapped console lines are indented by an amount of spaces that can be
347 specified using the setting CONSOLE_INDENT.
348 * /help command that supports multiple help topics. Use
349 HELP_INTRODUCTORY_BLURB and ADD_HELP_TOPIC to control its contents
350 * /rtfm command that allows moderators to send help messages to newbies
351 * /players now shows the players' color and allows searching
352 * TEAM_ELIMINATION_MODE sets the way ArmagetronAd removes teams when there's too much teams.
353
354Bugfixes:
355
356 * Added compensation for drifting timers (observed often with
357 overclocked mainboards)
358 * Text input fields now let the text wrap correctly and make use of the space allocated
359 for them in a not-completely-dumb way. And *sigh* depending on the text field, color
360 codes are either ignored (for the usernames) or both displayed in text and rendered.
361 * "KICK 2pack" no longer kicks user 2 instead of player 2pack.
362 * Fixed various trail end related extrapolation/simulation inaccuracies that looked
363 like lag.
364 * When extrapolating, the game's sensors never detected own or teammates' walls,
365 it mistook them for enemy walls.
366 * The acceleration and boost system always used settings for enemy walls instead of
367 settings for team players' walls. That means that old clients connecting to a
368 0.2.8.3+ server that has CYCLE_ACCEL_ENEMY and CYCLE_ACCEL_TEAM set to different
369 values experience syncing problems. The default behavior therefore is to lock 0.2.8.2
370 and earlier out of your server if you set one of them away from the default.
371 If you want to set both accelerations away from the default, but to the same value,
372 there won't be a compatibility problem; in that case, set CYCLE_ACCEL_ENEMY_OVERRIDE
373 and CYCLE_ACCEL_TEAM_OVERRIDE to 0 and old clients will be allowed in. However, you
374 should manually lock out players with 0.2.7 clients, for example by modifying
375 CYCLE_ACCEL_RIM a tiny bit.
376 * "Team Red" bug. If the server allows maximally two teams, no team ever
377 gets to be Team Red.
378 * Phasing made even more difficult; nice side effect of the fix is
379 reduced network bandwidth usage.
380 * Speed gauge resets between rounds.
381 * More accurate Lag-O-Meter by meriton.
382 * Zones were sometimes invisible.
383
384Internals:
385
386 * A complete netsync cycle is now sn_Receive(); nNetObject::SyncAll(); sn_SendPlanned();.
387 * Ping charity is now completely server controlled.
388
389#### Changes since 0.2.8.1:
390 * Timestamps and teamscores added to scorelog.txt
391 * Dedicated server now works on FreeBSD and OpenBSD
392 * User running the dedicated server is called "armagetronad" again, the
393 longer "armagetronad-dedicated" caused problems with BSD
394 * Test versions refuse to connect to servers more than one version ahead
395 * Prepared client for respawns
396 * Team spawn formation is now configurable
397 * Added reasons to bans
398 * Added spectator autokicking
399 * Added history to chat and console (wrtlprnft). Press "Cursor up" to
400 edit and repeat previous chats and console commands.
401 * You only enter a game once your client is synced
402 * /msg now prefers exact matches over partial matches
403 * Cycles now have better memory for pending turns (wrtlprnft)
404 * Added player join/leave/rename messages to ladderlog.txt with IPs
405 * Ping variance influence on packet loss tolerance code is now clamped
406 by the regular, configurable, packet loss tolerance: effect of variance
407 can be no bigger than the effect of ping.
408 * Spectators are now regular players and can chat
409 * The /msg command now converts the entered pattern into the internal
410 name so if you write "/msg öäü" and there is a user named "öäü" with
411 an internal nick of "oau" it will still get matched
412 * Team changes are now only executed when allowed, the need for the
413 temporary/permanent team imbalance setting distinction has gone away
414 * Added brake toggle button
415 Bugfixes:
416 * Client sometimes crashed when leaving a server with AIs on over the menu
417 * The server starting scripts were chowning /var/run and /var/log to armagetronad
418 * Short names could crash the server
419 * Direct cycle collisions sometimes lead to both passing trough each other
420 * Init scripts now installed correctly with --enable-initscripts
421 * Hopeless pending team change wishes are deleted
422 * Large timesteps are now broken down into smaller ones on the game level
423 * Pretend keys are released before entering chat
424 * Two cycle steering events were sent if you doublebound the brake
425 * Large speed boosts out of game rule bounds were possible during network
426 glitches
427 * Debug recording reliability increased, function call with undefined return
428 value eliminated
429 * Recording and scorekeeping no longer conflict
430 * Input during a recording now has an end marker, making quick keypresses
431 after leaving a menu not break it
432 * CYCLE_RUBBER_DELAY was overridden sometimes by packet loss tolerance
433 * ALLOW_CONTROL_DURING_CHAT now ignores modifier keys like shift and
434 has been reactivated
435 * The camera sometimes got stuck in free mode for the first round you watch
436 * Crashfix in hole blowing code when no cycle was set
437 * After a "perfect" 180, you're more often on the right side of your own wall
438 That code caused some havoc at first, so it has been reworked
439 * The smart cam did not like fluctuating framerates
440 * Improved debug recording reliability: multiple master server visits
441 and too quick keypresses were causing trouble.
442 * Canonical DESTDIR support and added ROOTDIR support for testing
443 * Login floods are detected and ignored
444 * Player name updates sanitized
445 * Disabled complicated feasibility tests for team menu entries,
446 they did not have the full information and were often wrong
447 * Team score only added to player score if no teamplay is possible
448
449#### Changes since 0.2.8.0:
450 * INCLUDE console command now gives a file not found error
451 * ALL user given paths are validated for security problems in a special function
452 * Fallback to default map on map load failure works again (broken sine 0.2.8.0_rc4)
453
454#### Changes since 0.2.8.0_rc4:
455Bugfixes:
456
457 * SECURITY FIX: via a MAP_FILE path with included .., it was possible
458 to write files anywhere, provided they did not exist previously.
459 Clients with this vulnerability are locked out of the server now.
460 * ALLOW_CONTROL_DURING_CHAT has been disabled for now.
461 * Another connection termination bug.
462
463#### Changes since 0.2.8.0_rc3:
464 * Added spectator mode toggle key.
465 * Thresholds when a white background bar is rendered behind texts is
466 now configurable in the expert section of settings.cfg.
467 * Ingame menu trigger key is configurable now, only ESC stays hardcoded.
468 * The map parser checks whether the map is stored at the right location.
469 * Map validation errors are now visible on the client.
470 * Made magic numbers used by the smart camera configurable for user tweaking.
471 This is undocumented and unsupported.
472 * The server browser now shows a B beside the score to mark bookmarked servers.
473 Bugfixes:
474 * -Os compile option is filtered out if GCC 3.3 is used, it makes the build go bad.
475 * Extremely low values of CYCLE_DELAY were not honored, an arbitrary delay of .005s
476 was added to it.
477 * On entering a server, the camera would sometimes be stuck in free mode.
478
479#### Changes since 0.2.8.0_rc2:
480 * Almost final artwork
481 * Moviepacks can now also contain texture replacements for the default cycle model
482 * Added number of teammates alive to HUD
483 Bugfixes:
484 * Dual textured floor rendering is now disabled without alpha blending as it
485 did not work anyway.
486 * Lag-O-Meter now has the correct size (the old, buggy one can be restored by
487 setting LAG_O_METER_SCALE to .5).
488 * The network system made some IDs randomly unusable, causing zombie
489 cycles, invisible walls and disconnections.
490 * The AI Team from a previous local game session was sometimes still visible
491 on the score table in the following network game on a remote server.
492 * The server did not start a new match when temporarily, only spectators were online.
493 * Player walls were rendered twice.
494 * The server wrote console center messages to stderr.
495 * UNBAN_IP did not work at all.
496 * The code that should kill a cycle in performance/DOS protection
497 circumstances just crashed.
498
499#### Changes since 0.2.8.0_rc1:
500 * Bugfixes:
501 - Dedicated server for Windows works again.
502 - Cycle turns are now executed more accurately on the server.
503 - Timer stuttering at end of round (was non-critical, but ugly).
504 - Custom camera did not turn when the internal camera was
505 configured not to turn.
506 - Idle player kick code crashed when it kicked a client with
507 many players.
508 - The code that removes inactive players after a while removed
509 the AI players.
510 * Reverted smart camera movement to pre-beta4 behavior,
511 the new code made some players seasick :)
512 * Ingame admin interface gives more useful information to the invoker
513 * Small font rendering improvements
514 * Zone conquest message, if it is not the one that ends the round,
515 now states the name of the zone owning team.
516
517#### Changes since 0.2.8_beta4.2:
518 * Fixed bugs:
519 - Random client disconnection
520 - Another vote-not-appearing-on-client bug
521 - Invisible wall segments right after turn
522 - Arena initialization before all settings are transmitted from the server
523 - The server was using more rubber than the client sometimes
524 - Crash with moviepack and some maps
525 - Object sync messages not accepted by client in second network session
526 * Improved kill/suicide/team kill distinction (ENEMY_* settings)
527 * Chatbots and idle players can be removed from the game and kicked
528 (CHATTER/IDLE_REMOVE_TIME,IDLE_KICK_TIME)
529 * Players/team leaders can pause the game before a rond starts (PLAYER_CHAT_WAIT*)
530 * Color codes can be filtered from player names (FILTER_COLOR_NAMES)
531 * New machine readable log file: ladderlog.txt
532 * Configurable and better core dump/team kill/suicide distinction algorithm
533 * Unknown settings are recognized now in configuration files
534 * All global key bindings (Grab mouse, pause and texture reload were left)
535 are now configurable
536 * Player listing length limit adjusted so two teams/16 players fits on screen
537 * Less verbose upgrade warning messages
538 * Imposters can get a non-conflicting name (ALLOW_IMPOST[EO]RS)
539
540#### Changes since 0.2.8_beta4:
541 * Fixed bugs:
542 - Windows version had a memory overwrite error causing crashes and weird behavior.
543 - The game quit when the chat key and a key bound to an instant chat were pressed to quickly.
544 - Votes expired too early on the client.
545 - Performance: a lot of unused temporary walls were hanging around each round.
546 - Cycles sometimes warped to odd locations.
547 * Tweaked smart camera to not stay in front of the cycle so much.
548 - Tweaked smart camera custom glancing.
549 Report back whether you like or hate it!
550 * Made custom camera even more configurable, changed default settings.
551 (old ones are still in settings.cfg)
552 * Forced glancing end on cycle turn now looks better.
553 * FOV settings now deal better with wide screens/splitscreen mode.
554 * Increased ping measurements again by adding the fluctuations. The raw
555 average ping caused the game logic to be too picky.
556
557#### Changes since 0.2.8_beta3:
558 * Famous fixed bugs:
559 - Random huge felt lag or blank screen (it was actually a problem with the timer) is gone.
560 - Bogus "possible phase bug" message.
561 - Seemingly random walls popping out of nothing, only to disappear a second later.
562 - Random camera focus changes while you were still alive.
563 - Every 100th console line got deleted.
564 * Reduced pings! Actually, just the measurement is improved, the actual latency
565 stays the same. I hope nobody notices that. Good thing nobody reads NEWS files :)
566 * New text editing convenience: Home and end keys work, and CTRL+left/right/del/backspace
567 work on whole words. Thanks, Nemo!
568 * New instant chat functions: There are now 25 instant chat strings. If an instant
569 chat string ends in a \, it will not be sent immediately, it's opened to be edited by you.
570 Pressing an instant chat key while already chatting will insert the string, provided the
571 key does not produce a regular character.
572 * If enabled by the server administrator: control your cycle while you chat.
573 * Turning speed of custom and internal camera can be adjusted with CAMERA_CUSTOM_TURN_SPEED
574 and CAMERA_IN_TURN_SPEED.
575 * The custom camera zooms out from a closeup at round start. Useful to see your position
576 in your team. Configurable with CAMERA_CUSTOM_ZOOM.
577 * Master server redundancy enabled. Thanks to Lucifer for hosting the backup master!
578
579#### Changes since 0.2.8_beta2:
580 * More bugfixes: most annoying was the crash/infinite loop a server got in when
581 the master server was unreachable
582 * Added zones to map specification
583 * Reworked top level map format (sorry to the map makers for the inconvenience)
584 * Windows: added start menu entries that open the system and user data directories
585 * Bandwidth limitation now works. That means if you lowered the bandwidth
586 limits in the network setup, they were not respected. You probably should
587 readjust them.
588
589#### Changes since 0.2.8_beta1:
590 * bugfixes, of course
591 * added recording and playback startmenu entries for Windows
592 * abuse prevention: added IP banning, player number per IP and client limit,
593 doublebinding can be crippled on server command
594
595#### Changes since 0.2.7.1:
596 * Server side cycle synchronization issues fixed:
597 - destination removal fixed
598 - lag sliding caused by different interpretation of grinding turn commands on client and server fixed
599 - niceness for older clients: sync interval decreased, no sync in front of wall to prevent local tunneling
600 * Client side cycle synchronization issues fixed:
601 - smooth corrections now only affect the appearance, the correct values are used internally
602 - sync messages are no longer ignored,
603 - new extrapolating sync method implemented,
604 - ghosting fixed,
605 - wall ends sticking out fixed ( for enemy cycles ),
606 - the sophisticated distance based sync code implemented years ago is now actually used, oh dear.
607 * Performance improvements:
608 - netobject synchronization does no longer traverse all netobjects
609 - disabled gameobject-gameobject interaction
610 * added support for nonorthogonal driving directions
611 * added support for debug recording and playback
612 * switched to using automake
613
614#### Changes since 0.2.7.0:
615 * Fixed security issues: fake message ID crash, fake peer ID crash ( both
616 maybe could be used to execute arbitrary code ), fake logout exploit, fake
617 connections DOS attack
618 * The feared "left grid" error message has been replaced by recovery code
619 * Fixed transfer of infinite floats over the network
620 * Fixed network timer inaccuracies on long running servers
621 * Fixed rip bug ( for those who like it: search and you will find )
622 * Fixed wall bending ( there is still some wall bending left, but it will be
623 too small to notice )
624 * Fixed tunneling bugs ( you were able to move from one side of a wall to the other )
625 * Fixed bounce bug ( a small zigzag towards a wall sometimes put you further
626 away from it, leaving a hole )
627 * Fixed massive reference counting overflow crash caused by repeated close grinding/180ing
628 * Made rubber code customizable and frame rate independent ( new CYCLE_RUBBER_
629 variables in settings.cfg )
630 * For debugging and scripting: dedicated server console messages can be
631 decorated with client ID and IP
632 * Topology police: facility to catch tunneling issues after they happened. off
633 by default
634 * Cycle network code is more robust
635 * Update frequency of cycle position now configurable and more frequent for
636 client's own cycle that the rest by default
637 * Corrected rc.d scripts to start the server as a system service
638 * Voting more configurable: voters can be made public, spectators can't vote
639 any more by default
640 * Moviepack floor color fixed
641 * Hostname lookup failure fixed
642 * "PLAYER_1 nick" console command problems fixed
643 * Windows libraries moved out of the main source tree
644 * Source code now compatible with 64 bit and gcc 3.4
645 * Colored explosions!
646 * HUD enhancements: customization, works in splitscreen mode
647 * Directory scanning code added ( not yet visible, will be used for
648 moviepack/cycle selection )
649 * Moviepack sky texture support
650 * Master server can now run on windows, too
651 * Explosion sound now actually works
652
653#### Changes since 0.2.6.0:
654 * added HUD
655 * Winzone may now be a deathzone
656
657#### Changes since 0.2.5.2:
658 * Split custom camera into server defined and client defined custom camera
659 * Fixed monster chat message exploit
660 * Added local player silencing
661 * Added Kick voting
662 * Added player names on cycles ( implemented by Christian Reitwiessner )
663 * Harsher ( and configurable ) spam protection
664 * Fixed strangely bent walls
665
666#### Changes since 0.2.5.1:
667 * Fixed fullscreen toggle while chatting
668 * Disabled trilinear filtering for ATI cards by default ( to avoid lockups )
669 * Worked around flawy S3 texture storage
670 * Fixed crash when trying to change teams in spectator mode
671
672#### Changes since 0.2.5:
673 * Another go at the "11th Round Bug"
674 * Player list is now sorted after displayed score ( before: some invisible combination of team score and own score )
675 * Fixed brakes when connecting to a 0.2.4 or earlier server
676 * Updated FAQ with server setting hints
677 * Unified Windows and Unix network code
678 * Fixed texture hardware mode
679 * Less connection losses
680 * Fixed network ID related crash
681 * Added player names to information you get from a server
682 * Added window-fullscreen toggle key and separate setting of screen resolution/window size
683
684#### Changes since 0.2.4:
685 * Fixed online observer mode switching
686 * Fixed command line options
687 * Fixed player quit message
688 * Fixed AI join message
689 * Fixed double registration of some network objects ( had no known visible symptom )
690 * Added security checks to see if Armagetron is run correctly
691 * Fixed big brother ( reporting of OS, graphic card and version to the master server )
692 * Disabled memory manager by default
693 * Fixed single player exit game crash
694 * Fixed zero length sting receive crash
695 * Completed network version control
696 * Added timestamps to logfiles ( code fragments by k_at_work )
697 * Added reason to login deny/kick messages
698 * Fixed 11th round bug ( additional round started after match end )
699 * Added --doc command line switch to print offline version of online help
700 * Fixed sign of rise/drop highscore messages
701 * New console commands: quit/exit ( dedicated server only ), kick <player name>, center_message <message> and console_message <message>
702 * New setting item: MAX_CLIENTS
703 * Improved server browser, less skipping around
704 * Added instant win zone
705 * Cycle brake is now of limited duration
706
707#### Changes since 0.2.3:
708 * Fixed score display ( really! )
709 * Fixed freestyle mode round counting
710 * Fixed server freezer
711 * Fixed explosion sync
712 * Fixed AI crashes when player leaves in mid-battle
713 * Fixed configure script: now really uses sdl-config
714 * Speeded up deletion of unreachable servers
715 * Fixed endless recursion bug ( "11th player bug" )
716 * Moved team start positions further apart
717 * Player name is now taken from $USER on first start and player color is randomized
718
719#### Changes since 0.2.2:
720 * Fixed highscores and ladder
721 * Delayed score deletion after match end
722 * Fixed autoexec.cfg loading
723 * More automatic rebuilding
724 * Fixed dedicated server idle quitting
725 * Fixed auto AI
726 * Fixed instant chat
727 * Fixed score display for many players or long player names
728 * Fixed very rare client crash
729 * Fixed not so rare release only crash
730 * Fixed balance-related typos
731 * Tweaked smart camera so that it works well when braking
732 * Fixed finish mode game setting
733
734#### Changes since 0.2.1:
735 * Fixed another connection-loss bug
736 * Fixed observer freeze
737 * Observers now don't just get kicked when nobody else is online
738 * Fixed software renderer detection
739 * Updated FAQ
740 * Fixed config file loading on some architectures
741 * Improved team coloring
742 * Fixed stuck brake bug
743
744#### Changes since 0.2.0:
745 * Fixed crash when watching a quitting player
746
747#### Changes since 0.2.pre4:
748 * Fixed crashes
749 * Fixed windows network connection problems
750 * Fixed clour related problems
751 * Added marker for own cycle to avoid confusion in team mode
752 * Changed directory placement: configuration resides in /etc/armagetron,
753 user configuration in ~/.armagetron/var
754 * Data files added to ~/.armagetron/textures ( or /models or /sounds )
755 are now loaded in favor of original data, allowing user specific mods
756
757#### Changes since 0.2.pre3:
758 * Fixed some more rare crashes and lockups
759 * Fixed team handling: all team change operations now get only active
760 on next round address
761 * Fixed moviesounds
762 * Fixed server-master server communications
763 * new installation method: make update ( keeps user configuration )
764
765#### Changes since 0.2.pre2:
766 * Fixed some rare crashes and lockups
767 * Improved cycle handling over network
768 * It is now allowed to fight with an arbitrary large team against the AI
769 regardless of the balancing settings
770 * improved rendering precision: z-fighting artefact are now uncommon,
771 and at the same time early clipping on the near clipping plane
772
773#### Changes since 0.2.pre:
774 * got rid of "zombie" players
775 * corrected team messages
776 * fixed chatting
777 * fixed 32 bit rendering
778
779#### Changes since 0.1.4.9:
780 * it is now possible for players to form teams
781 * explosion now can blow holes in player walls
782 * delay added to wall disappearance after death
783 * finite wall length supported for snake-style gameplay
784 * arena size and game speed configurable in the menu
785 * the AI has been greatly improved
786 * there is an Internet master server active
787 * support for localization has been added, currently featuring
788 English and German
789 * AI players now have names
790 * the moviepack title screen is displayed
791 * Linux version: easier system-wide installation with RPM packages
792 or "make install"
0793
=== added file 'Dockerfile'
--- Dockerfile 1970-01-01 00:00:00 +0000
+++ Dockerfile 2020-07-03 06:03:19 +0000
@@ -0,0 +1,94 @@
1ARG BASE_BUILD_SMALL=registry.gitlab.com/armagetronad/armagetronad/armalpine_32:028_0
2ARG BASE_BUILD_FULL=registry.gitlab.com/armagetronad/armagetronad/armabuild_64:028_0
3ARG BASE_LINUX=i386/alpine:3.7
4ARG PROGRAM_NAME=armagetronad-unk
5ARG PROGRAM_TITLE="Armagetron UNK"
6ARG FAKERELEASE=false
7ARG BRANCH=master-fix-unknown-bug
8
9########################################
10
11# bootstrap source
12FROM ${BASE_BUILD_FULL} AS bootstrap
13MAINTAINER Manuel Moos <z-man@users.sf.net>
14
15ENV SOURCE_DIR /home/docker/armagetronad
16ENV BUILD_DIR /home/docker/build
17
18COPY --chown=docker . ${SOURCE_DIR}
19RUN chmod 755 ${SOURCE_DIR}
20WORKDIR ${SOURCE_DIR}
21# these files are in .dockerignore, but if they're in git, restore them.
22RUN test -d .git && git checkout .dockerignore .gitlab-ci.yml Dockerfile
23RUN git status
24#RUN ./batch/make/version .
25#RUN false
26RUN test -r configure || ./bootstrap.sh
27RUN cat version.m4
28#RUN false
29
30########################################
31
32# build tarball
33FROM bootstrap AS configured
34
35#ARG PROGRAM_NAME
36#ARG PROGRAM_TITLE
37ARG FAKERELEASE
38ARG BRANCH
39
40RUN mkdir -p ${BUILD_DIR} && chmod 755 ${BUILD_DIR}
41WORKDIR ${BUILD_DIR}
42RUN . ../armagetronad/docker/scripts/brand.sh . && ARMAGETRONAD_FAKERELEASE=${FAKERELEASE} ../armagetronad/configure --prefix=/usr/local --disable-glout --disable-sysinstall --disable-desktop progname="${PROGRAM_NAME}" progtitle="${PROGRAM_TITLE}"
43RUN make -j$(nproc) dist && make -C docker/build tag.gits
44RUN if [ ${FAKERELEASE} = true ]; then cp ../armagetronad/docker/build/fakerelease_proto.sh docker/build/fakerelease.sh; fi
45
46########################################
47
48# build server
49FROM bootstrap AS build_server
50
51ARG PROGRAM_NAME
52ARG PROGRAM_TITLE
53
54RUN bash ./configure --prefix=/usr/local --disable-glout --disable-sysinstall --disable-desktop progname="${PROGRAM_NAME}" progtitle="${PROGRAM_TITLE}"
55RUN make -j$(nproc)
56RUN DESTDIR=/home/docker/destdir make install
57
58########################################
59
60# build client
61FROM bootstrap AS build_client
62
63ARG PROGRAM_NAME
64ARG PROGRAM_TITLE
65
66RUN bash ./configure --prefix=/usr/local --disable-sysinstall --disable-desktop progname="${PROGRAM_NAME}" progtitle="${PROGRAM_TITLE}"
67RUN make -j$(nproc)
68RUN DESTDIR=/home/docker/destdir make install
69
70########################################
71
72FROM ${BASE_LINUX} AS run_server_base
73MAINTAINER Manuel Moos <z-man@users.sf.net>
74
75# runtime dependencies
76RUN apk add \
77boost-thread \
78libxml2 \
79protobuf \
80python \
81shadow \
82--no-cache
83
84########################################
85
86FROM run_server_base AS run_server
87MAINTAINER Manuel Moos <z-man@users.sf.net>
88
89ARG PROGRAM_NAME
90
91WORKDIR /
92COPY --chown=root --from=build_server /home/docker/destdir/ /
93RUN sh /usr/local/share/games/${PROGRAM_NAME}-dedicated/scripts/sysinstall install /usr/local
94
095
=== modified file 'Makefile.am'
--- Makefile.am 2019-07-26 01:01:51 +0000
+++ Makefile.am 2020-07-03 06:03:19 +0000
@@ -19,7 +19,7 @@
1919
20# resource is included as a subdir for the purpose of keeping this makefile short and delegating20# resource is included as a subdir for the purpose of keeping this makefile short and delegating
21# resource management to a more appropriate place anyway21# resource management to a more appropriate place anyway
22SUBDIRS = src resource batch config desktop22SUBDIRS = src resource batch config desktop docker/build
2323
24# special tasks to do if we're building the master server24# special tasks to do if we're building the master server
25if BUILDMASTER25if BUILDMASTER
@@ -80,8 +80,11 @@
80# clear SVN80# clear SVN
81 find $(distdir) -depth -name .svn -exec rm -rf \{\} \;81 find $(distdir) -depth -name .svn -exec rm -rf \{\} \;
8282
83# strip comments from translated files83# clear git and bzr
84 cd $(distdir)/language; python2 ./update.py --dist84 rm -rf .git .bzr
85
86# strip comments from translated files
87 cd $(distdir)/language; `which python3 python python2 2> /dev/null | head -n 1` ./update.py --dist
85# restore timestamps88# restore timestamps
86 cd $(distdir)/language; for f in *.txt; do test -r $$f.bak && touch -r $$f.bak $$f; done89 cd $(distdir)/language; for f in *.txt; do test -r $$f.bak && touch -r $$f.bak $$f; done
87 rm -f $(distdir)/language/*.bak90 rm -f $(distdir)/language/*.bak
8891
=== modified file 'Makefile.manual'
--- Makefile.manual 2011-11-30 19:48:10 +0000
+++ Makefile.manual 2020-07-03 06:03:19 +0000
@@ -146,9 +146,7 @@
146146
147# make snapshot of SVN state, tracking relevant changes in .changetag147# make snapshot of SVN state, tracking relevant changes in .changetag
148fingerprint: .changetag148fingerprint: .changetag
149# easy, just do svn info, that contains all the information needed. If that fails, try other scms.149 git -C ${top_srcdir} show HEAD -s > $@ || svn info ${top_srcdir} > $@ || svk info ${top_srcdir} > $@ || { bzr testament ${top_srcdir}; bzr info ${top_srcdir}; } > $@ || echo "unknown" > $@
150 svn info ${top_srcdir} > $@ || svk info ${top_srcdir} > $@ || { bzr testament ${top_srcdir}; bzr info ${top_srcdir}; } > $@ || echo "unknown" > $@
151 svn info `dirname ${top_srcdir}` >> @$ || svn info `dirname ${top_srcdir}` >> $@ || echo "unknown" >> $@
152 diff $@ .changetag > /dev/null 2>&1 || cp $@ .changetag150 diff $@ .changetag > /dev/null 2>&1 || cp $@ .changetag
153151
154########################152########################
@@ -162,8 +160,8 @@
162# Keep the changelog up to date as well (triggered by make dist only)160# Keep the changelog up to date as well (triggered by make dist only)
163$(srcdir)/ChangeLog: .changetag161$(srcdir)/ChangeLog: .changetag
164 touch $@162 touch $@
165 @echo -e "\nGenerating ChangeLog from SVN/BZR, please be patient...\n"163 @echo -e "\nGenerating ChangeLog from GIT/BZR, please be patient...\n"
166 cd ${srcdir}; svn log 2>&1 > ChangeLog || bzr log --gnu-changelog 2>&1 > ChangeLog || echo "No official releasse: no changelog" > ChangeLog164 cd ${srcdir}; git log 2>&1 > ChangeLog || bzr log --gnu-changelog 2>&1 > ChangeLog || echo "No official releasse: no changelog" > ChangeLog
167 test -r $@ || touch $@165 test -r $@ || touch $@
168166
169# extra target to make before a real distribution is built167# extra target to make before a real distribution is built
170168
=== modified file 'NEWS'
--- NEWS 2014-01-13 03:59:54 +0000
+++ NEWS 2020-07-03 06:03:19 +0000
@@ -1,4 +1,19 @@
1Changes since 0.2.8.3.x:1
2Changes since 0.2.8.3.5:
3
4 Fixed Bugs
5
6- Debian builds: Documentation html files have empty last change (#9)
7- Ubuntu PPA release candidate builds would overwrite previous stable releases (#15)
8
9 New Features
10
11- Adapt ChangeLog and fingerprint generation to git (#11)
12- Integrated build system (#14)
13
14
15 Changes on the 0.2.9 branch
16
2- Added detection and reaction code for timing assist bots17- Added detection and reaction code for timing assist bots
3- /shuffle now works before you actually join a team18- /shuffle now works before you actually join a team
4- Implemented /shout command and associated settings19- Implemented /shout command and associated settings
@@ -36,7 +51,38 @@
36 login/logout message can be announced.51 login/logout message can be announced.
37- Authentication is now enabled by default.52- Authentication is now enabled by default.
3853
54Changes since 0.2.8.3.4:
55
56- Security fix: Check that the remote is allowed to create an object
57 before creating it, not decide whether it gets to keep it after
58 it already has been created and potential damage has been done.
59 No arbitrary code could be executed, but a client could effectively
60 shut down a server by sending crucial objects, such as the main game
61 timer or the game itself.
62- Compilation fixes for current systems.
63
64Changes since 0.2.8.3.3:
65
66- Eliminated undefined behavior that was fine in gcc 5, but now
67 (rightfully!) turned into crashes in gcc 6.
68- Eliminated compilation disambiguity that was just causing a mild
69 performance degradation in gcc 5 and is now a compilation failure in
70 gcc 6.
71
72Changes since 0.2.8.3.2:
73
74- security fix: do not read ahead of the beginning of network buffer.
75- security fix: don't attribute network errors from processing random
76 packets to the connection to the server
77- security fix: while at it, don't process random packets unless they
78 may be important
79- fix for potential crash with friend list filtering
80- intel driver compatibility
81- fix for rare crash with sound lock
82- fix for camera turning for bizarre axis configurations
83
39Changes since 0.2.8.3.1:84Changes since 0.2.8.3.1:
85
40- security fix: old style action commands from clients no loger cause hangs and crashes86- security fix: old style action commands from clients no loger cause hangs and crashes
41- security fix: oversized packets are ignored properly87- security fix: oversized packets are ignored properly
42- security fix: never read one byte outside of the received buffer88- security fix: never read one byte outside of the received buffer
@@ -47,6 +93,7 @@
47- Additional checks against illegal values passed to renderer93- Additional checks against illegal values passed to renderer
4894
49Changes since 0.2.8.3:95Changes since 0.2.8.3:
96
50- fixed temporary sound disappearance when alt-tabbing away and back97- fixed temporary sound disappearance when alt-tabbing away and back
51- default subcultures are now distributed98- default subcultures are now distributed
52- enable 32 bit color depth at desktop resolution99- enable 32 bit color depth at desktop resolution
@@ -54,8 +101,9 @@
54- spelling mistakes and missing German translations101- spelling mistakes and missing German translations
55102
56Changes since 0.2.8.3_rc4:103Changes since 0.2.8.3_rc4:
104
57- New setting: KEEP_PLAYER_SLOT allows the server to kick (preferably) spectators105- New setting: KEEP_PLAYER_SLOT allows the server to kick (preferably) spectators
58 if it gets full so there is always one slot open for players106 if it gets full so there is always one slot open for players
59- New setting: ACCESS_LEVEL_AUTOKICK_IMMUNITY sets the access level required 107- New setting: ACCESS_LEVEL_AUTOKICK_IMMUNITY sets the access level required
60 to be immune from such kicks (and idle autokicks, too)108 to be immune from such kicks (and idle autokicks, too)
61- Intercepted chat commands are now written to ladderlog.txt. Format:109- Intercepted chat commands are now written to ladderlog.txt. Format:
@@ -65,6 +113,7 @@
65- fast finish works again113- fast finish works again
66114
67Changes since 0.2.8.3_rc3:115Changes since 0.2.8.3_rc3:
116
68- Pinging previously popular servers earlier for quicker server117- Pinging previously popular servers earlier for quicker server
69 browsing118 browsing
70- Improved master server random polling, the second polled master now119- Improved master server random polling, the second polled master now
@@ -77,6 +126,7 @@
77 changes user level for name\_with\_spaces@forums126 changes user level for name\_with\_spaces@forums
78127
79Changes since 0.2.8.3_rc2:128Changes since 0.2.8.3_rc2:
129
80- Fixed crash with server polling130- Fixed crash with server polling
81- ROUND_WINNER and MATCH_WINNER ladderlog events now include the players of131- ROUND_WINNER and MATCH_WINNER ladderlog events now include the players of
82 the team.132 the team.
@@ -87,12 +137,14 @@
87 of shuffle messages displayed.137 of shuffle messages displayed.
88138
89Changes since 0.2.8.3_rc1:139Changes since 0.2.8.3_rc1:
140
90- Fixed dark color filters, such as FILTER_DARK_COLOR_STRINGS, to not filter141- Fixed dark color filters, such as FILTER_DARK_COLOR_STRINGS, to not filter
91 the reset color.142 the reset color.
92- ASE moviepack models no longer have a vertex count limit143- ASE moviepack models no longer have a vertex count limit
93- Fixed endless recursion crash between rounds144- Fixed endless recursion crash between rounds
94145
95Changes since 0.2.8.3_beta3:146Changes since 0.2.8.3_beta3:
147
96- Chat prefix spam protection. Guards against prefix spam, such as when a148- Chat prefix spam protection. Guards against prefix spam, such as when a
97 user always changes their chat message color, or prefixes all messages149 user always changes their chat message color, or prefixes all messages
98 with a clan tag. Toggle with the PREFIX_SPAM_ENABLE setting.150 with a clan tag. Toggle with the PREFIX_SPAM_ENABLE setting.
@@ -127,7 +179,8 @@
127179
128Changes since 0.2.8.2:180Changes since 0.2.8.2:
129181
130 New settings and commands:182New settings and commands:
183
131- MIN_PLAY_TIME_*: minimal play time required before you are allowed to184- MIN_PLAY_TIME_*: minimal play time required before you are allowed to
132 play on this server.185 play on this server.
133- SPAM_AUTOKICK_COUNT: minimal number of spam warning messages you get in a186- SPAM_AUTOKICK_COUNT: minimal number of spam warning messages you get in a
@@ -217,6 +270,7 @@
217 when AUTO_TEAM is enabled270 when AUTO_TEAM is enabled
218271
219If --enable-armathentication was activated:272If --enable-armathentication was activated:
273
220- /lock, /unlock, /invite and /uninvite team management chat for players of274- /lock, /unlock, /invite and /uninvite team management chat for players of
221 access level ACCESS_LEVEL_TEAM or better.275 access level ACCESS_LEVEL_TEAM or better.
222- /teams chat command that rougly prints team layout.276- /teams chat command that rougly prints team layout.
@@ -237,7 +291,8 @@
237- /login chat command then uses the more secure hashed base logins291- /login chat command then uses the more secure hashed base logins
238- new chat commands /op and /deop to change other players' access rights292- new chat commands /op and /deop to change other players' access rights
239293
240 Featurelets:294Featurelets:
295
241- Added Polish language file296- Added Polish language file
242- clientside play time tracking and server controlled minimal required experience297- clientside play time tracking and server controlled minimal required experience
243 to be allowed to play.298 to be allowed to play.
@@ -286,19 +341,19 @@
286 Armagetron Advanced, the paths it uses, links to the main site, wiki341 Armagetron Advanced, the paths it uses, links to the main site, wiki
287 and forums and the names of the project admins.342 and forums and the names of the project admins.
288- New entries in ladderlog.txt:343- New entries in ladderlog.txt:
289 - GAME_TIME <time> (only if enabled via the LADDERLOG_GAME_TIME_INTERVAL344 GAME_TIME <time> (only if enabled via the LADDERLOG_GAME_TIME_INTERVAL
290 setting): The time that has passed since the last start of a round345 setting): The time that has passed since the last start of a round
291 - BASEZONE_CONQUERED <team> <x> <y>: A fortress zone belonging to <team>346 BASEZONE_CONQUERED <team> <x> <y>: A fortress zone belonging to <team>
292 at the coordinates (<x>, <y>) has been conquered347 at the coordinates (<x>, <y>) has been conquered
293 - BASEZONE_CONQUERER <player>: at the time of the last BASEZONE_CONQUERED348 BASEZONE_CONQUERER <player>: at the time of the last BASEZONE_CONQUERED
294 message, <player> has been in the conquered zone349 message, <player> has been in the conquered zone
295 - ONLINE_PLAYER <player> [<ping [<team>]]: At the beginning of the round,350 ONLINE_PLAYER <player> [<ping [<team>]]: At the beginning of the round,
296 <player> had <ping> and was on <team>. This line is not printed for bots351 <player> had <ping> and was on <team>. This line is not printed for bots
297 - NUM_HUMANS <n>: There are <n> players that are not AIs and are part of a352 NUM_HUMANS <n>: There are <n> players that are not AIs and are part of a
298 team.353 team.
299 - ROUND_SCORE has the player's team name appended.354 ROUND_SCORE has the player's team name appended.
300 - ROUND_SCORE_TEAM: score a team accumulated during the last round.355 ROUND_SCORE_TEAM: score a team accumulated during the last round.
301 - WAIT_FOR_EXTENAL_SCRIPT: printed if the setting of the same name is356 WAIT_FOR_EXTENAL_SCRIPT: printed if the setting of the same name is
302 enabled. In this case the server will delay the start of the next round357 enabled. In this case the server will delay the start of the next round
303 until WAIT_FOR_EXTENAL_SCRIPT_TIMEOUT is reached or the setting is358 until WAIT_FOR_EXTENAL_SCRIPT_TIMEOUT is reached or the setting is
304 disabled.359 disabled.
@@ -310,7 +365,8 @@
310- /players now shows the players' color and allows searching365- /players now shows the players' color and allows searching
311- TEAM_ELIMINATION_MODE sets the way ArmagetronAd removes teams when there's too much teams.366- TEAM_ELIMINATION_MODE sets the way ArmagetronAd removes teams when there's too much teams.
312367
313 Bugfixes:368Bugfixes:
369
314- Added compensation for drifting timers (observed often with370- Added compensation for drifting timers (observed often with
315 overclocked mainboards)371 overclocked mainboards)
316- Text input fields now let the text wrap correctly and make use of the space allocated372- Text input fields now let the text wrap correctly and make use of the space allocated
@@ -339,7 +395,8 @@
339- More accurate Lag-O-Meter by meriton.395- More accurate Lag-O-Meter by meriton.
340- Zones were sometimes invisible.396- Zones were sometimes invisible.
341397
342 Internals:398Internals:
399
343- A complete netsync cycle is now sn_Receive(); nNetObject::SyncAll(); sn_SendPlanned();.400- A complete netsync cycle is now sn_Receive(); nNetObject::SyncAll(); sn_SendPlanned();.
344- Ping charity is now completely server controlled.401- Ping charity is now completely server controlled.
345402
@@ -410,6 +467,7 @@
410467
411Changes since 0.2.8.0_rc4:468Changes since 0.2.8.0_rc4:
412Bugfixes:469Bugfixes:
470
413- SECURITY FIX: via a MAP_FILE path with included .., it was possible471- SECURITY FIX: via a MAP_FILE path with included .., it was possible
414 to write files anywhere, provided they did not exist previously.472 to write files anywhere, provided they did not exist previously.
415 Clients with this vulnerability are locked out of the server now.473 Clients with this vulnerability are locked out of the server now.
@@ -458,11 +516,11 @@
458 Cycle turns are now executed more accurately on the server.516 Cycle turns are now executed more accurately on the server.
459 Timer stuttering at end of round (was non-critical, but ugly).517 Timer stuttering at end of round (was non-critical, but ugly).
460 Custom camera did not turn when the internal camera was518 Custom camera did not turn when the internal camera was
461 configured not to turn.519 configured not to turn.
462 Idle player kick code crashed when it kicked a client with520 Idle player kick code crashed when it kicked a client with
463 many players.521 many players.
464 The code that removes inactive players after a while removed522 The code that removes inactive players after a while removed
465 the AI players.523 the AI players.
466- Reverted smart camera movement to pre-beta4 behavior,524- Reverted smart camera movement to pre-beta4 behavior,
467 the new code made some players seasick :)525 the new code made some players seasick :)
468- Ingame admin interface gives more useful information to the invoker 526- Ingame admin interface gives more useful information to the invoker
@@ -502,7 +560,7 @@
502 Cycles sometimes warped to odd locations.560 Cycles sometimes warped to odd locations.
503- Tweaked smart camera to not stay in front of the cycle so much.561- Tweaked smart camera to not stay in front of the cycle so much.
504 Tweaked smart camera custom glancing.562 Tweaked smart camera custom glancing.
505 Report back whether you like or hate it!563 Report back whether you like or hate it!
506- Made custom camera even more configurable, changed default settings.564- Made custom camera even more configurable, changed default settings.
507 (old ones are still in settings.cfg)565 (old ones are still in settings.cfg)
508- Forced glancing end on cycle turn now looks better.566- Forced glancing end on cycle turn now looks better.
@@ -601,7 +659,7 @@
601- Colored explosions!659- Colored explosions!
602- HUD enhancements: customization, works in splitscreen mode660- HUD enhancements: customization, works in splitscreen mode
603- Directory scanning code added ( not yet visible, will be used for661- Directory scanning code added ( not yet visible, will be used for
604 moviepack/cycle selection )662 moviepack/cycle selection )
605- Moviepack sky texture support663- Moviepack sky texture support
606- Master server can now run on windows, too664- Master server can now run on windows, too
607- Explosion sound now actually works665- Explosion sound now actually works
@@ -746,3 +804,4 @@
746- the moviepack title screen is displayed804- the moviepack title screen is displayed
747- Linux version: easier system-wide installation with RPM packages 805- Linux version: easier system-wide installation with RPM packages
748 or "make install"806 or "make install"
807
749808
=== modified file 'batch/checkbugle.py'
--- batch/checkbugle.py 2008-12-11 08:15:17 +0000
+++ batch/checkbugle.py 2020-07-03 06:03:19 +0000
@@ -2,6 +2,8 @@
22
3# checks bugle trace log for OpenGL problems3# checks bugle trace log for OpenGL problems
44
5from __future__ import print_function
6
5import sys7import sys
68
7count = 09count = 0
@@ -38,7 +40,7 @@
38 lineNo=lineNo+140 lineNo=lineNo+1
39 41
40 if False and function.find( 'List' ) >= 0 and function.find( 'Call' ) < 0:42 if False and function.find( 'List' ) >= 0 and function.find( 'Call' ) < 0:
41 print "%d (%s) (%s) (%s) (%s)" % (count, line[:-1], function, args, result)43 print("%d (%s) (%s) (%s) (%s)" % (count, line[:-1], function, args, result))
4244
43 count = count + 145 count = count + 1
44 if count > 100:46 if count > 100:
@@ -46,12 +48,12 @@
4648
47 if function == 'glBegin':49 if function == 'glBegin':
48 if inBlock:50 if inBlock:
49 print "Error: Still in block.", lineNo51 print("Error: Still in block.", lineNo)
50 exit(-1)52 exit(-1)
51 inBlock = True53 inBlock = True
52 elif function == 'glEnd':54 elif function == 'glEnd':
53 if not inBlock:55 if not inBlock:
54 print "Error: Not in block.", lineNo56 print("Error: Not in block.", lineNo)
55 exit(-1)57 exit(-1)
56 inBlock = False58 inBlock = False
57 else:59 else:
@@ -64,15 +66,15 @@
64 if function == 'glGenLists':66 if function == 'glGenLists':
65 legalLists[result] = True67 legalLists[result] = True
66 if inList:68 if inList:
67 print "Error: Still in list generation.", lineNo69 print("Error: Still in list generation.", lineNo)
68 exit(-1)70 exit(-1)
6971
70 if function == 'glEndList':72 if function == 'glEndList':
71 if not inList:73 if not inList:
72 print "Error: Not in list generation.", lineNo74 print("Error: Not in list generation.", lineNo)
73 exit(-1)75 exit(-1)
74 if inBlockAtListStart != inBlock:76 if inBlockAtListStart != inBlock:
75 print "Error: glBegin/glEnd mismatch in list.", lineNo77 print("Error: glBegin/glEnd mismatch in list.", lineNo)
76 exit(-1)78 exit(-1)
77 inList=False79 inList=False
7880
@@ -81,50 +83,50 @@
81 list=args[0:args.find(',')]83 list=args[0:args.find(',')]
82 currentList=list84 currentList=list
83 if inList:85 if inList:
84 print "Error: Still in list generation.", lineNo86 print("Error: Still in list generation.", lineNo)
85 exit(-1)87 exit(-1)
86 if not legalLists[list]:88 if not legalLists[list]:
87 print "Error: list %s used, but not generated." % [list], lineNo89 print("Error: list %s used, but not generated." % [list], lineNo)
88 exit(-1)90 exit(-1)
89 setLists[list]=True91 setLists[list]=True
90 inList=True92 inList=True
91 elif inList:93 elif inList:
92 if not function in usedInList:94 if not function in usedInList:
93 usedInList[function]=lineNo95 usedInList[function]=lineNo
94 #print lineNo, function96 #print(lineNo, function)
95 97
96 if function == 'glCallList':98 if function == 'glCallList':
97 list=args99 list=args
98 if not legalLists[list]:100 if not legalLists[list]:
99 print "Error: list %s used, but not generated." % [list], lineNo101 print("Error: list %s used, but not generated." % [list], lineNo)
100 exit(-1)102 exit(-1)
101 if inList and currentList == list:103 if inList and currentList == list:
102 print "Error: list %s used, but it's just getting generated." % [list], lineNo104 print("Error: list %s used, but it's just getting generated." % [list], lineNo)
103 exit(-1)105 exit(-1)
104 if not setLists[list]:106 if not setLists[list]:
105 print "Error: list %s used, but not set." % [list], lineNo107 print("Error: list %s used, but not set." % [list], lineNo)
106 exit(-1)108 exit(-1)
107109
108 if function == 'glDeleteLists':110 if function == 'glDeleteLists':
109 list=args[0:args.find(',')]111 list=args[0:args.find(',')]
110 if not legalLists[list]:112 if not legalLists[list]:
111 print "Error: list %s used, but not generated." % [list], lineNo113 print("Error: list %s used, but not generated." % [list], lineNo)
112 exit(-1)114 exit(-1)
113 legalLists[list]=False115 legalLists[list]=False
114 setLists[list]=False116 setLists[list]=False
115117
116print "Used in display lists:"118print("Used in display lists:")
117for f in usedInList:119for f in usedInList:
118 print f, usedInList[f]120 print(f, usedInList[f])
119121
120print122print
121print "Used in glBegin/End:"123print("Used in glBegin/End:")
122for f in usedInBlock:124for f in usedInBlock:
123 print f, usedInBlock[f]125 print(f, usedInBlock[f])
124126
125print127print
126print "Used outside glBegin/End:"128print("Used outside glBegin/End:")
127for f in usedOutBlock:129for f in usedOutBlock:
128 print f, usedOutBlock[f]130 print(f, usedOutBlock[f])
129 131
130 132
131133
=== added file 'batch/git_ff_to_release.sh'
--- batch/git_ff_to_release.sh 1970-01-01 00:00:00 +0000
+++ batch/git_ff_to_release.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,68 @@
1#!/bin/sh
2
3# Depending on which branch this is invoked on, fast forward from next a little less stable branch
4# master -> beta, beta -> release
5
6#set -x
7
8sd=$1
9test -z "${sd}" && sd=`dirname $0`
10
11git update-index --refresh
12if ! git diff-index --quiet HEAD --; then
13 echo ""
14 echo "Local modifications detected, abort. Commit first."
15 exit 1
16fi
17
18HASH=`git -C ${sd} rev-parse HEAD`
19BRANCH=`git -C ${sd} rev-parse --abbrev-ref HEAD`
20# BRANCH=beta_0.2.9
21SUFFIX=`echo ${BRANCH} | sed -e s/^release// -e s/^beta// -e s/^legacy//`
22
23MERGE_FROM=""
24
25case ${BRANCH} in
26 release*)
27 MERGE_FROM=beta${SUFFIX}
28 ;;
29 beta)
30 MERGE_FROM=master
31 ;;
32 beta*)
33 if test "${SUFFIX}" = "_0.2.9"; then
34 SUFFIX=_0.2.8
35 fi
36 MERGE_FROM=legacy${SUFFIX}
37 ;;
38 *)
39 echo "Unknown branch, don't know what to do."
40 exit 0
41 ;;
42esac
43
44git -C ${sd} fetch origin || exit $?
45
46# merge the listed branches from origin and, if present, locally
47TOTAL_MERGE=""
48for s in ${MERGE_FROM}; do
49 TOTAL_MERGE="${TOTAL_MERGE} origin/$s"
50 if git -C ${sd} branch -l | grep -q " $s\$"; then
51 TOTAL_MERGE="${TOTAL_MERGE} ${s}"
52 fi
53done
54
55git -C ${sd} merge --ff-only ${TOTAL_MERGE} || exit $?
56
57NEW_HASH=`git -C ${sd} rev-parse HEAD`
58test ${NEW_HASH} = ${HASH} && exit 0
59
60echo
61echo '****************************'
62echo 'New revisions in this merge:'
63echo '****************************'
64git log ${HASH}..
65
66echo
67echo In case you change your mind and 'git reset --hard', the pre-merge git revision is:
68echo ${HASH}
0\ No newline at end of file69\ No newline at end of file
170
=== added file 'batch/git_merge_safe_sources.sh'
--- batch/git_merge_safe_sources.sh 1970-01-01 00:00:00 +0000
+++ batch/git_merge_safe_sources.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,74 @@
1#!/bin/sh
2
3# Depending on which branch this is invoked on, merge all other branches that can be deemed safe
4
5#set -x
6
7sd=$1
8test -z "${sd}" && sd=`dirname $0`
9
10git -C ${sd} update-index --refresh
11if ! git -C ${sd} diff-index --quiet HEAD --; then
12 echo ""
13 echo "Local modifications detected, abort. Commit first."
14 exit 1
15fi
16
17HASH=`git -C ${sd} rev-parse HEAD`
18BRANCH=`git -C ${sd} rev-parse --abbrev-ref HEAD`
19#BRANCH=beta_0.2.9
20SUFFIX=`echo ${BRANCH} | sed -e s/^release// -e s/^beta// -e s/^legacy//`
21
22MERGE_FROM=""
23
24case ${BRANCH} in
25 release*)
26 echo "Release branch, nothing safe to merge."
27 exit 0
28 ;;
29 beta*)
30 MERGE_FROM=release${SUFFIX}
31 ;;
32 legacy*)
33 if test "${SUFFIX}" = "_0.2.8"; then
34 SUFFIX=_0.2.9
35 MERGE_FROM=legacy_0.2.8.3
36 fi
37 MERGE_FROM="${MERGE_FROM} release${SUFFIX} beta${SUFFIX}"
38 ;;
39 master)
40 MERGE_FROM="legacy_0.2.8 legacy_0.2.8.3"
41 #MERGE_FROM="release beta legacy_0.2.8 legacy_0.2.8.3"
42 ;;
43 *)
44 echo "Unknown branch, don't know what to do."
45 exit 0
46 ;;
47esac
48
49git -C ${sd} fetch origin || exit $?
50
51# merge the listed branches from origin and, if present, locally
52TOTAL_MERGE=""
53for s in ${MERGE_FROM}; do
54 TOTAL_MERGE="${TOTAL_MERGE} origin/$s"
55 if git -C ${sd} branch -l | grep -q " $s\$"; then
56 TOTAL_MERGE="${TOTAL_MERGE} ${s}"
57 fi
58done
59
60git -C ${sd} pull --ff-only origin || exit $?
61git -C ${sd} merge ${TOTAL_MERGE} || exit $?
62
63NEW_HASH=`git -C ${sd} rev-parse HEAD`
64test ${NEW_HASH} = ${HASH} && exit 0
65
66echo
67echo '****************************'
68echo 'New revisions in this merge:'
69echo '****************************'
70git log ${HASH}..
71
72echo
73echo In case you change your mind and 'git reset --hard', the pre-merge git revision is:
74echo ${HASH}
0\ No newline at end of file75\ No newline at end of file
176
=== modified file 'batch/ladder.py'
--- batch/ladder.py 2006-05-29 01:55:42 +0000
+++ batch/ladder.py 2020-07-03 06:03:19 +0000
@@ -1,6 +1,8 @@
1#!/usr/bin/python1#!/usr/bin/python
2# purpose: process ladderlog.txt and generate a usefull ladder league from it2# purpose: process ladderlog.txt and generate a usefull ladder league from it
33
4from __future__ import print_function
5
4import math6import math
57
68
@@ -150,12 +152,12 @@
150 if diagonal < minDiagonal: minDiagonal = diagonal152 if diagonal < minDiagonal: minDiagonal = diagonal
151 averageDiagonal += diagonal/len(players)153 averageDiagonal += diagonal/len(players)
152154
153 print averageDiagonal 155 print(averageDiagonal)
154156
155 maxDeviation = 1157 maxDeviation = 1
156 if minDiagonal < 0:158 if minDiagonal < 0:
157 maxDeviation = -1/minDiagonal159 maxDeviation = -1/minDiagonal
158 print maxDeviation160 print(maxDeviation)
159161
160 # initialize score vector162 # initialize score vector
161 score = {}163 score = {}
@@ -197,7 +199,7 @@
197 error += abs(deltascore[i])199 error += abs(deltascore[i])
198200
199 if iter == 100:201 if iter == 100:
200 print error 202 print(error)
201 iter = 0 203 iter = 0
202 iter += 1204 iter += 1
203205
@@ -230,9 +232,9 @@
230232
231scoreDataBase = PairScoreDictionary()233scoreDataBase = PairScoreDictionary()
232scoreDataBase.ReadLog( open( "ladderlog.txt" ) )234scoreDataBase.ReadLog( open( "ladderlog.txt" ) )
233#print "read"235#print("read")
234ladder = scoreDataBase.GenerateLadder()236ladder = scoreDataBase.GenerateLadder()
235237
236for entry in ladder:238for entry in ladder:
237 print entry[1], entry[0]239 print(entry[1], entry[0])
238240
239241
=== added file 'batch/make/patchnotes.py'
--- batch/make/patchnotes.py 1970-01-01 00:00:00 +0000
+++ batch/make/patchnotes.py 2020-07-03 06:03:19 +0000
@@ -0,0 +1,204 @@
1#!/usr/bin/python3
2#wd=`dirname $0`
3
4# generates patch notes from git log references to gitlab issues
5# parameters: <path to git repository> <path to frozen changelog> <gitlab team> <gitlab project>
6
7
8# issue query URI sample
9# https://gitlab.com/api/v4/projects/9837210/issues?scope=all&state=closed&iids[]=11&iids[]=9
10
11# Looks for commit lines of the form
12# Implements https://gitlab.com/armagetronad/armagetronad/-/issues/11
13# or
14# Fixes #11
15# looks up the referenced issues in the GitLab API, generates a ChangeLog/Patch Note line for each
16
17import sys, argparse
18import subprocess
19from packaging import version
20from string import Template
21import urllib.request
22import json
23
24# checks whether s represents an iteger
25def RepresentsInt(s):
26 try:
27 int(s)
28 return True
29 except ValueError:
30 return False
31
32# retrieve tags from git repository
33def GetTags(repo, tag_lower_limit):
34 alltags_raw=subprocess.run(["git", "-C", repo, "tag", "-l", "--merged"], stdout=subprocess.PIPE)
35 alltags=alltags_raw.stdout.decode('utf-8').split('\n')
36 return list(filter(lambda x: len(x) > 0 and version.parse(x) >= version.parse(tag_lower_limit), alltags))
37
38 # sort tags in chronological order (assuming they're all on the same branch)
39 revisions={}
40 for tag in tags:
41 # count number of revisions since tag
42 revisions_since_tag_raw=subprocess.run(["git", "-C", repo, "rev-list", "--count", tag + ".."], stdout=subprocess.PIPE)
43 revisions[tag]=int(revisions_since_tag_raw.stdout.decode('utf-8'))
44
45 print(revisions)
46 tags.sort(key=lambda x: revisions[x], reverse=True)
47 return tags
48
49# return (tag, list of issues fixed after tag as integers)
50def FixedAfterTag(repo, team, project, tags):
51 # for each tag, collect which issues have been resolved (Fix.. Close.. Solve.. Implement...)
52 # or mentioned otherwise
53 uri_start=Template('https://gitlab.com/${team}/${project}/-/issues/').substitute(team=team, project=project)
54 # The build system is on Python 3.5, so we're stuck with this mechanism
55 # print(uri_start)
56
57 last_fixed_in={}
58 last_mentioned_in={}
59 issues=set([])
60
61 for tag in tags:
62 log_raw=subprocess.run(["git", "-C", repo, "log", tag + ".."], stdout=subprocess.PIPE)
63 log=log_raw.stdout.decode('utf-8').split('\n')
64
65 for logline in log:
66 mentions=False
67 fixes=False
68 ref=None
69 if logline[0:4] == ' ':
70 for word in logline.split():
71 if word.startswith(uri_start):
72 ref = word[len(uri_start):]
73 elif word.startswith('#'):
74 ref = word[1:]
75 if not ref is None and RepresentsInt(ref):
76 ref=int(ref)
77 mentions = True
78 trimmed=logline.strip().upper()
79 if trimmed.startswith('FIX') or trimmed.startswith('IMPLEMENT') or trimmed.startswith('CLOSE') or trimmed.startswith('SOLVE'):
80 fixes = True
81 if fixes:
82 last_fixed_in[ref] = tag
83 if mentions:
84 last_mentioned_in[ref] = tag
85 issues.add(ref)
86
87 #print(issues)
88 #print(last_fixed_in)
89 #print(last_mentioned_in)
90
91 fixed_after_tag={}
92 for issue in issues:
93 fixed_in = None
94 if issue in last_fixed_in:
95 fixed_in = last_fixed_in[issue]
96 if fixed_in == None and issue in last_mentioned_in:
97 fixed_in = last_mentioned_in[issue]
98 if fixed_in != None:
99 #print(issue, fixed_in)
100 fixed_after_tag.setdefault(fixed_in, []).append(issue)
101
102 #print(fixed_after_tag)
103 return fixed_after_tag
104
105# retrieves metadata for an issue from gitlab, composes markup patch note line
106def GetMarkupLine(team, project, issue):
107 uri=Template('https://gitlab.com/api/v4/projects/${team}%2F${project}/issues?scope=all&state=closed&iids[]=${issue}').substitute(team=team, project=project, issue=issue)
108 #print(uri)
109 with urllib.request.urlopen(uri) as content:
110 data = json.loads(content.read().decode())
111 #print(data)
112 if len(data) == 0:
113 return "", None
114 title = data[0]['title']
115 weblink = data[0]['web_url']
116 labels = data[0]['labels']
117 line = None
118 if data[0]['state'] == 'closed':
119 line = Template(' * ${title} ([#${issue}](${weblink}))').substitute(title=title.strip(), issue=issue, weblink=weblink)
120 #print(line, labels)
121 if 'Type::Bug' in labels:
122 return 'Fixed Bugs', line
123 elif 'Type::Feature' in labels:
124 return 'New Features', line
125 elif 'Type::Removed' in labels:
126 return 'Removed', line
127 elif 'Type::Breaking' in labels:
128 return 'Breaking Changes', line
129 else:
130 return 'Other Changes', line
131
132# parse given frozen changelog, look for last 'changes since' note, extract tag name
133def GetLastFrozenTag(frozen):
134 file = open(frozen, 'r')
135 begin = '#### Changes since '
136 for line in file:
137 if line.startswith(begin):
138 version=line[len(begin):]
139 version = version.strip(':\n ')
140 if len(version) > 2:
141 if version[0] != 'v':
142 version = 'v' + version
143 return version
144
145parser = argparse.ArgumentParser(description='Generates ChangeLog/Patch Notes')
146parser.add_argument('repository', help='Path to the local git repository')
147parser.add_argument('frozen_changelog', help='Path to a previous, now immutable changelog')
148parser.add_argument('gitlab_team', help='Team name on gitlab')
149parser.add_argument('gitlab_project', help='Project name on gitlab')
150parser.add_argument('-p', help='Just print patch notes', action='store_true')
151
152args = parser.parse_args()
153
154if len(sys.argv) < 5:
155 print("Not enough arguments")
156 exit(1)
157
158patchnotes = args.p
159repo = args.repository
160frozen = args.frozen_changelog
161team = args.gitlab_team
162project = args.gitlab_project
163
164# adapt for other branches
165tag_lower_limit=GetLastFrozenTag(frozen)
166# print(tag_lower_limit)
167
168# get all tags relevant to the current branch
169tags=GetTags(repo, tag_lower_limit)
170#print("tags =", tags)
171
172fixed_after_tag=FixedAfterTag(repo, team, project, tags)
173#print(fixed_after_tag)
174
175for tag in fixed_after_tag:
176 # print(tag)
177 fixed = fixed_after_tag[tag]
178 # luckily, the category names are alphabetically in the order we want them in :)
179 categories={}
180 #categories={'Fixed Bugs' : [], 'New Features' : [], 'Other Changes': []}
181 for issue in fixed:
182 category, line=GetMarkupLine(team, project, issue)
183 if not line is None:
184 categories.setdefault(category, []).append(line)
185
186 if len(categories) > 0:
187 printtag=tag
188 if tag[0] == 'v':
189 printtag = tag[1:]
190 print()
191 print("#### Changes since", printtag + ":")
192 print()
193 for category in categories:
194 print("#####", category)
195 print()
196 for line in categories[category]:
197 print(line)
198 print()
199 if patchnotes:
200 exit(0)
201 print()
202
203file = open(frozen, 'r')
204print(file.read())
0205
=== modified file 'batch/make/sortresources'
--- batch/make/sortresources 2007-11-04 03:21:24 +0000
+++ batch/make/sortresources 2020-07-03 06:03:19 +0000
@@ -27,7 +27,9 @@
27find ${destination}/ -name "*~" -exec rm -rf \{\} \;27find ${destination}/ -name "*~" -exec rm -rf \{\} \;
2828
29# rename them properly29# rename them properly
30python ${sortresources} -v ${destination} || exit 130PYTHON=`which python3 python python2 2> /dev/null | head -n 1`
31echo python is ${PYTHON}
32${PYTHON} ${sortresources} -v ${destination} || exit 1
3133
32# silently remove empty directories34# silently remove empty directories
33find ${destination} -type d -depth -exec rmdir \{\} \; > /dev/null 2>&1 35find ${destination} -type d -depth -exec rmdir \{\} \; > /dev/null 2>&1
3436
=== modified file 'batch/make/sortresources.py'
--- batch/make/sortresources.py 2012-07-21 19:16:26 +0000
+++ batch/make/sortresources.py 2020-07-03 06:03:19 +0000
@@ -8,9 +8,10 @@
8# sortresources.py <path_to_seach_and_sort>8# sortresources.py <path_to_seach_and_sort>
9# use sortresources.py -h to get command line option help9# use sortresources.py -h to get command line option help
1010
11from __future__ import print_function
12
11from xml import sax13from xml import sax
12from xml.sax import handler14from xml.sax import handler
13import string
14import os.path15import os.path
15import os16import os
16import sys17import sys
@@ -161,7 +162,7 @@
161 return False162 return False
162163
163 if doPrint:164 if doPrint:
164 print("renaming " + oldFile + " -> " + newFile)165 print("renaming", oldFile, "->", newFile)
165166
166# move file oldFile to newFile, setting apache rewrite rules to keep the file167# move file oldFile to newFile, setting apache rewrite rules to keep the file
167# fetchable from its old position168# fetchable from its old position
@@ -183,8 +184,8 @@
183 # open .htaccess file in the old directory for reading184 # open .htaccess file in the old directory for reading
184 accessFile = open(htaccessPath)185 accessFile = open(htaccessPath)
185 for line in accessFile:186 for line in accessFile:
186 splitLineLower = string.split(line.lower())187 splitLineLower = str.split(line.lower())
187 splitLine = string.split(line)188 splitLine = str.split(line)
188 if splitLineLower[0] == "rewriteengine":189 if splitLineLower[0] == "rewriteengine":
189 # rewriting is already mentioned; we don't have to enable it laster.190 # rewriting is already mentioned; we don't have to enable it laster.
190 needEngine = False191 needEngine = False
@@ -195,7 +196,7 @@
195 # nothing to do196 # nothing to do
196 return197 return
197 else:198 else:
198 print("Warning: There already is a different RewriteRule for " + oldFile + " in place.")199 print("Warning: There already is a different RewriteRule for", oldFile, "in place.")
199 except: pass200 except: pass
200201
201 # open .htaccess file for appended writing202 # open .htaccess file for appended writing
@@ -273,7 +274,7 @@
273 if arg[1] == "v":274 if arg[1] == "v":
274 doPrint = True275 doPrint = True
275 continue276 continue
276 print("\nUnknown option: " + arg)277 print("\nUnknown option:", arg)
277 Options(-1)278 Options(-1)
278 else:279 else:
279 Options(-1)280 Options(-1)
280281
=== modified file 'batch/make/uninstall'
--- batch/make/uninstall 2011-07-19 12:09:41 +0000
+++ batch/make/uninstall 2020-07-03 06:03:19 +0000
@@ -69,7 +69,7 @@
6969
70# compose uninstall script from file and directory list70# compose uninstall script from file and directory list
71cat ${UNINSTALL}.files >> ${UNINSTALL}71cat ${UNINSTALL}.files >> ${UNINSTALL}
72sort ${UNINSTALL}.dir --reverse --unique >> ${UNINSTALL}72sort ${UNINSTALL}.dir -ru >> ${UNINSTALL}
7373
74rm -rf ${DEST}74rm -rf ${DEST}
7575
7676
=== added file 'batch/make/update_changelog'
--- batch/make/update_changelog 1970-01-01 00:00:00 +0000
+++ batch/make/update_changelog 2020-07-03 06:03:19 +0000
@@ -0,0 +1,13 @@
1#!/bin/sh
2# Updates CHANGELOG.md from CHANGELOG_FROZEN.md, git history and launchpad issues
3# usage: update_changelog
4
5set -x
6
7md=`dirname $0`
8top_srcdir=${md}/../../
9
10${md}/patchnotes.py ${top_srcdir} ${top_srcdir}/CHANGELOG_FROZEN.md armagetronad armagetronad > ${top_srcdir}/CHANGELOG.md
11
12sed < ${top_srcdir}/CHANGELOG.md > ${top_srcdir}/NEWS -e "s/^ \* /- /" -e "s/^ - / /" -e "s/^ / /" -e "s/^##### */ /" -e "s/^#### *//" -e "s/^##* *//" -e 's,(\[\(.*\)\](\(.*\))),(\1),'
13
014
=== modified file 'batch/make/version'
--- batch/make/version 2019-03-04 00:53:47 +0000
+++ batch/make/version 2020-07-03 06:03:19 +0000
@@ -2,10 +2,16 @@
2# determines the version of the sources2# determines the version of the sources
3# usage: version <source directory>3# usage: version <source directory>
44
5#set -x5# set -x
66
7srcdir="$1"7srcdir="$1"
88
9# if we're building via CI from a protected tag, that is our version
10if test "${CI_COMMIT_REF_PROTECTED}" = "true" && ! test -z "${CI_COMMIT_TAG}"; then
11 echo "${CI_COMMIT_TAG}" | sed -e s/^v//
12 exit 0
13fi
14
9# set version parts to defaults for CVS snapshot15# set version parts to defaults for CVS snapshot
10major_version=`cat ${srcdir}/major_version`16major_version=`cat ${srcdir}/major_version`
11minor_version_proto=`cat ${srcdir}/minor_version`17minor_version_proto=`cat ${srcdir}/minor_version`
@@ -97,7 +103,10 @@
97 fi103 fi
98fi104fi
99105
100if test -d "${srcdir}/.git"; then106# try to get a good guess about which branch we're on
107GIT_BRANCH="alpha"
108
109if test -e "${srcdir}/.git"; then
101 # check for a tag110 # check for a tag
102 cd $srcdir111 cd $srcdir
103 # todo: once we have make tags, consider just git describe --tags as version ID.112 # todo: once we have make tags, consider just git describe --tags as version ID.
@@ -106,7 +115,8 @@
106 minor_version=""115 minor_version=""
107 DATE=""116 DATE=""
108 else117 else
109 if git diff-index --quiet HEAD --; then118 git update-index --refresh > /dev/null
119 if git diff-index --quiet HEAD --; then
110 # local checkout clean, just use revno120 # local checkout clean, just use revno
111 DATE=_z`git rev-list HEAD --count`121 DATE=_z`git rev-list HEAD --count`
112 else122 else
@@ -114,11 +124,23 @@
114 DATE=_z`git rev-list HEAD --count`_$DATE124 DATE=_z`git rev-list HEAD --count`_$DATE
115 fi125 fi
116 fi126 fi
127
128 GIT_BRANCH=`git -C ${srcdir} rev-parse --abbrev-ref HEAD`
117fi129fi
130test -z "${CI_COMMIT_BRANCH}" || GIT_BRANCH=${CI_COMMIT_BRANCH}
118131
119if test -z "$minor_version"132if test -z "$minor_version"
120then133then
121 test -z "$DATE" || minor_version=`echo ${minor_version_proto} | sed -e "s,DATE,$DATE," -e "s,YYYYMMDD,$DATE,"`134 test -z "$DATE" || minor_version=`echo ${minor_version_proto} | sed -e "s,DATE,$DATE," -e "s,YYYYMMDD,$DATE,"`
122fi135fi
123136
137if test "${CI_COMMIT_REF_PROTECTED}" = "true"; then
138 # determine alpha/beta/rc status based on branch
139 if echo ${GIT_BRANCH} | grep -q "^beta"; then
140 minor_version=`echo ${minor_version} | sed -e s,alpha,beta,`
141 elif echo ${GIT_BRANCH} | grep -q "^release"; then
142 minor_version=`echo ${minor_version} | sed -e s,alpha,rc,`
143 fi
144fi
145
124echo $major_version$minor_version146echo $major_version$minor_version
125147
=== modified file 'bootstrap.sh'
--- bootstrap.sh 2019-07-26 01:01:51 +0000
+++ bootstrap.sh 2020-07-03 06:03:19 +0000
@@ -10,7 +10,7 @@
10 rm -f version10 rm -f version
11fi11fi
12echo "Copying license..."12echo "Copying license..."
13cp COPYING.txt COPYING13test -r COPYING || cp COPYING.txt COPYING || exit $?
14echo "Running aclocal..."14echo "Running aclocal..."
15aclocal || { rm aclocal.m4; exit 1; }15aclocal || { rm aclocal.m4; exit 1; }
16echo "Running autoheader..."16echo "Running autoheader..."
1717
=== removed file 'config.guess'
=== modified file 'config/settings.cfg'
--- config/settings.cfg 2016-03-19 07:05:52 +0000
+++ config/settings.cfg 2020-07-03 06:03:19 +0000
@@ -434,6 +434,8 @@
434FILTER_NAME_ENDS 1 # Filter whitespace from beginning and end of player names.434FILTER_NAME_ENDS 1 # Filter whitespace from beginning and end of player names.
435FILTER_NAME_MIDDLE 1 # Filter excess whitespace and other junk from the middle of player names.435FILTER_NAME_MIDDLE 1 # Filter excess whitespace and other junk from the middle of player names.
436FILTER_COLOR_SERVER_NAMES 0 # Filter color codes from server names in the server browser. Only affects the client.436FILTER_COLOR_SERVER_NAMES 0 # Filter color codes from server names in the server browser. Only affects the client.
437VERIFY_COLOR_STRICT 1 # Verify color codes before interpreting them. Capital letters and anything not 0-9, a-f is not considered a color code then. If set to 0 (the in code default), out of range ascii characters are accepted and interpreted as 0.
438
437439
438SILENCE_DEFAULT 0 # silence new players by default?440SILENCE_DEFAULT 0 # silence new players by default?
439ENABLE_CHAT 1 # allow public messages?441ENABLE_CHAT 1 # allow public messages?
440442
=== modified file 'config/settings_dedicated.cfg'
--- config/settings_dedicated.cfg 2014-03-30 06:31:13 +0000
+++ config/settings_dedicated.cfg 2020-07-03 06:03:19 +0000
@@ -235,7 +235,7 @@
235PING_FLOOD_TIME_100 100.0 # Minimum time for 100 ping packets to arrive.235PING_FLOOD_TIME_100 100.0 # Minimum time for 100 ping packets to arrive.
236PING_FLOOD_GLOBAL .1 # The same times, multiplied by this value, count for all pings from all machines. Negative values disable global flood protection.236PING_FLOOD_GLOBAL .1 # The same times, multiplied by this value, count for all pings from all machines. Negative values disable global flood protection.
237CONNECTION_FLOOD_SENSITIVITY .01 # The times PING_FLOOD_TIME_X, multiplied by this value, count for all incoming messages from clients not connected already. A flood here activates turtle mode. Negative values disable global flood protection.237CONNECTION_FLOOD_SENSITIVITY .01 # The times PING_FLOOD_TIME_X, multiplied by this value, count for all incoming messages from clients not connected already. A flood here activates turtle mode. Negative values disable global flood protection.
238CONNECTION_LIMIT 100 # Maximum number of packets from unknown peers to handle at one 238CONNECTION_LIMIT 5 # Maximum number of packets from unknown peers to handle at one
239ANTI_SPOOF 0 # If set to 1, checks connecting clients for spoofed IPs are done. Only clients passing a connectivity test are allowed in. This is done in turtle mode automatically, but may be useful to have on at all times.239ANTI_SPOOF 0 # If set to 1, checks connecting clients for spoofed IPs are done. Only clients passing a connectivity test are allowed in. This is done in turtle mode automatically, but may be useful to have on at all times.
240240
241241
242242
=== modified file 'configure.ac'
--- configure.ac 2019-08-21 22:59:09 +0000
+++ configure.ac 2020-07-03 06:03:19 +0000
@@ -1,4 +1,4 @@
1dnl I would like to do this to generate the version number...1/dnl I would like to do this to generate the version number...
2dnl AC_DEFUN([AUTOMATIC_VERSION],syscmd([sh batch/make/version .]))2dnl AC_DEFUN([AUTOMATIC_VERSION],syscmd([sh batch/make/version .]))
33
4dnl but have to do this with version generated in bootstrap.sh instead for some reason4dnl but have to do this with version generated in bootstrap.sh instead for some reason
@@ -29,7 +29,7 @@
29dnl AC_CANONICAL_HOST29dnl AC_CANONICAL_HOST
3030
31AC_PROG_RANLIB31AC_PROG_RANLIB
32AM_INIT_AUTOMAKE([subdir-objects])32AM_INIT_AUTOMAKE([subdir-objects tar-ustar])
3333
34dnl detect which link commant to use34dnl detect which link commant to use
35AC_PROG_LN_S35AC_PROG_LN_S
@@ -38,14 +38,14 @@
38AC_CHECK_PROG(HAVE_M4,m4,true,false)38AC_CHECK_PROG(HAVE_M4,m4,true,false)
39AM_CONDITIONAL(HAVE_M4, test $HAVE_M4 = true)39AM_CONDITIONAL(HAVE_M4, test $HAVE_M4 = true)
4040
41dnl check whether date accepts -r to refer to a file41dnl dirty trick to allow verbatim output to Makefile.in -> Makefile
42AM_CONDITIONAL(DATE_R, date +"%Y" -r $0 > /dev/null 2>&1)42dnl source: http://gnu-automake.7480.n7.nabble.com/ifdef-endif-issue-td2662.html
43AC_SUBST([protect], [""])
4344
44dnl export version45dnl export version
45version=$VERSION46version=$VERSION
46AC_SUBST(version)47AC_SUBST(version)
4748
48AC_ARG_VAR(XML2_CONFIG,[Configuration script of libxml2 to use, defaults to xml2-config])
49AC_ARG_VAR(CXXFLAGS,Flags passed to the C++ compiler)49AC_ARG_VAR(CXXFLAGS,Flags passed to the C++ compiler)
50AC_ARG_VAR(DEBUGLEVEL,[Debug level for developers, normal users can safely ignore it. Accepted values go from 0 to 5. See README-DEVELOPER for details.])50AC_ARG_VAR(DEBUGLEVEL,[Debug level for developers, normal users can safely ignore it. Accepted values go from 0 to 5. See README-DEVELOPER for details.])
51AC_ARG_VAR(CODELEVEL,[Code checking strictness level for developers, normal users can safely ignore it. Accepted values go from 0 to 4. See README-DEVELOPER for details.])51AC_ARG_VAR(CODELEVEL,[Code checking strictness level for developers, normal users can safely ignore it. Accepted values go from 0 to 4. See README-DEVELOPER for details.])
@@ -61,6 +61,8 @@
61dnl a modern autoconf is required to process this61dnl a modern autoconf is required to process this
62AC_PREREQ(2.50)62AC_PREREQ(2.50)
6363
64PKG_PROG_PKG_CONFIG
65
64build_regular=true66build_regular=true
6567
66have_lzma=false68have_lzma=false
@@ -131,7 +133,7 @@
131133
132# flag to set when mockup versions of the executables should be built to save134# flag to set when mockup versions of the executables should be built to save
133# compile time when testing the release process135# compile time when testing the release process
134AM_CONDITIONAL(BUILDFAKERELEASE, test "$ARMAGETRONAD_FAKERELEASE" != "")136AM_CONDITIONAL(BUILDFAKERELEASE, test "$ARMAGETRONAD_FAKERELEASE" != "" && test "$ARMAGETRONAD_FAKERELEASE" != "false" && test "$ARMAGETRONAD_FAKERELEASE" != "no")
135137
136# set replacement variables for dedicated server138# set replacement variables for dedicated server
137progtitle_serverorclient=" Client"139progtitle_serverorclient=" Client"
@@ -330,12 +332,18 @@
330dnl ])332dnl ])
331dnl])333dnl])
332334
333
334if test $CODELEVEL -ge 1; then335if test $CODELEVEL -ge 1; then
335 CXXFLAGS="$CXXFLAGS -Wall"336 CXXFLAGS="$CXXFLAGS -Wall"
336 337
337 dnl careful, only supported on GCC 4.2 and later338 dnl careful, only supported on GCC 4.2 and later
338 AX_CXXFLAGS_GCC_OPTION(-Wno-strict-overflow)339 AX_CXXFLAGS_GCC_OPTION(-Wno-strict-overflow)
340
341 dnl this one is from GCC 7 (change to 1 or 2 in the future,
342 dnl leave at default and use [[fallthrough]] (std C++ 17)
343 AX_CXXFLAGS_GCC_OPTION(-Wimplicit-fallthrough=1)
344
345
346
339fi347fi
340348
341dnl test $CODELEVEL -ge 2 && CXXFLAGS="$CXXFLAGS -Wshadow -Wpointer-arith -Wfloat-equal -W -Wcast-qual -Wcast-align -Wconversion -Wunreachable-code --pedantic -Winline"349dnl test $CODELEVEL -ge 2 && CXXFLAGS="$CXXFLAGS -Wshadow -Wpointer-arith -Wfloat-equal -W -Wcast-qual -Wcast-align -Wconversion -Wunreachable-code --pedantic -Winline"
@@ -572,29 +580,10 @@
572dnl *************************************************580dnl *************************************************
573581
574if test x$armamain = xtrue; then582if test x$armamain = xtrue; then
575583 PKG_CHECK_MODULES([XML2], [libxml-2.0 >= 2.6.11])
576test -z "$XML2_CONFIG" && XML2_CONFIG=xml2-config584 CPPFLAGS="$CPPFLAGS $XML2_CFLAGS"
577585 LIBS="$LIBS $XML2_LIBS"
578if ! $XML2_CONFIG --libs > /dev/null; then586 AC_DEFINE(HAVE_LIBXML2, 1, [Define if you have the libxml2 library])
579 AC_MSG_ERROR([Fatal error: the libxml2 configuration script $XML2_CONFIG does not work/exist.])
580fi
581
582# if test x$armamain = xtrue; then
583AC_CHECK_LIB(xml2,xmlParseMemory,
584CPPFLAGS="$CPPFLAGS `$XML2_CONFIG --cflags`"
585LIBS="`$XML2_CONFIG --libs` $LIBS"
586AC_DEFINE(HAVE_LIBXML2, 1, [Define if you have the xml2 library (-lxml2).]),
587AC_MSG_ERROR([You need the library xml2 to compile ${progtitle}. Read the file doc/install_linux.html.])
588,`$XML2_CONFIG --libs`)
589
590AC_CHECK_FUNC(xmlParserInputBufferCreateFilenameDefault,
591,
592AC_MSG_ERROR([
593 Your xml2 library is obsolete!
594 Please upgrade to 2.6.11 or later
595])
596)
597# fi
598587
599dnl *************************************************588dnl *************************************************
600dnl Armathentication Threading589dnl Armathentication Threading
@@ -994,6 +983,10 @@
994resource/Makefile983resource/Makefile
995config/Makefile984config/Makefile
996desktop/Makefile985desktop/Makefile
986docker/build/Makefile
987docker/build/setup_ci_test.sh
988docker/build/context/version.sh
989docker/deploy/targets.sh
997desktop/armagetronad.desktop990desktop/armagetronad.desktop
998)991)
999992
1000993
=== modified file 'desktop/armagetronad.desktop.in'
--- desktop/armagetronad.desktop.in 2015-04-01 11:44:48 +0000
+++ desktop/armagetronad.desktop.in 2020-07-03 06:03:19 +0000
@@ -1,12 +1,11 @@
1[Desktop Entry]1[Desktop Entry]
2Type=Application2Type=Application
3Name=@progtitle@@progtitle_server@3Name=@progtitle@@progtitle_server@
4Exec=@progname@4Exec=@progname@ %f
5Comment=3d light cycle game5Comment=3d light cycle game
6Comment[de]=dreidimensionales Lichtradspiel6Comment[de]=dreidimensionales Lichtradspiel
7Icon=@progname@7Icon=@progname@
8Terminal=@build_dedicated@8Terminal=@build_dedicated@
9Path=@prefix@/bin
10Categories=Game;ActionGame;9Categories=Game;ActionGame;
11StartupNotify=@build_dedicated@10StartupNotify=@build_dedicated@
12MimeType=application/x-armagetronad;11MimeType=application/x-armagetronad;
1312
=== added directory 'docker'
=== added file 'docker/README.md'
--- docker/README.md 1970-01-01 00:00:00 +0000
+++ docker/README.md 2020-07-03 06:03:19 +0000
@@ -0,0 +1,103 @@
1# Docker Based Build System
2
3## You Need to Have Installed
4 * Everything needed for a dedicated server build, plus python packaging
5 * [docker in rootless mode](https://docs.docker.com/engine/security/rootless/)
6 * Optional: [docker in reglar mode](https://docs.docker.com/engine/install/ubuntu/) for steam SDK creation
7 * Optional: [x11docker](https://github.com/mviereck/x11docker) for Windows build system creation
8
9Ubuntu is recommended, as rootless docker supports the overlay2 driver there;
10pretty much everyone else only gets the vfs driver that always copies the whole
11image contents.
12
13For Ubuntu, to be on the safe side:
14
15 sudo apt install git wine-stable automake \
16 bison g++ make libboost-dev libboost-thread-dev \
17 libprotobuf-dev libzthread-dev python recode curl uidmap python3-packaging
18
19Then follow the instructions from the rootless docker and x11docker above.
20
21If you are not using Ubuntu on your main machine, you can run Rootless Docker inside
22an Ubuntu virtual machine and export the socket for use on your main machine. The safest way to run such a machine is with one NAT network connection that you enable
23a port forwarding [rule for SSH](https://bobcares.com/blog/virtualbox-ssh-nat/) for.
24Once that is set up, assuming your UID is 1000 on the host and 1001 on the host and you went with the example 2522 source port, connect to the guest with
25
26 ssh -p 2522 guest -L /run/user/1001/docker.sock:/run/user/1000/docker.sock
27
28as suggested [here](https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface) and keep that running. Inform your local docker client about the socket with
29
30 export DOCKER_HOST=unix:///run/user/1000/docker.sock
31
32and off you go. Only your host user can access that socket and can only control a Docker daemon on a virtual machine running as a non-root user.
33
34To secure the VM some more, you may want to restrict its access to your LAN. You can use [ufw](https://linuxize.com/post/how-to-setup-a-firewall-with-ufw-on-ubuntu-20-04/) for that. Assuming 192.160.0.1 is your router's IP on the LAN, execute on the VM:
35
36 sudo ufw allow ssh # default is to block everything, so before we enable ufw, we better make sure ssh will keep working
37 sudo ufw enable
38 sudo ufw allow out to 192.168.0.1 # this allows traffic to your router and therefore the internet
39 sudo ufw deny out to 10.0.0.0/8 # these block all private subnets; LANs usually use these IPs. If yours does not, adapt.
40 sudo ufw deny out to 172.16.0.0/12
41 sudo ufw deny out to 192.168.0.0/16
42 sudo ufw deny in from 10.0.0.0/8
43 sudo ufw deny in from 172.16.0.0/12
44 sudo ufw deny in from 192.168.0.0/16
45
46The 'deny in' rules are redundant because the VM is behind a NAT anyway, but you never know. Maybe you switch it to 'bridged' one day.
47
48## Contents
49
50 * scripts/ contains helper scripts
51 * images/ contains everything else needed to build images from scratch
52 * build/ contains the actual build stuff
53 * deploy/ contains information about deployments; pre-filled with target definition; each requires certain secrets
54
55## How to Build
56
57Assuming the source is in armagetronad, do
58
59 cd armagetronad
60 ./bootstrap.sh
61 mkdir ../build
62 cd ../build
63 ../armagetronad/configure --disable-glout
64 cd docker/build
65 make <target>
66
67target can be
68
69 * *free*: Build everything relevant for free open source systems
70 * *closed*: Build steam and windows binaries
71 * *full*: Build all
72 * *clean*: Remove build results
73
74## Developer Notes
75To update to another branch, you may have to adapt related branch names in scripts/relevant_branches.sh.
76
77To make builds use up to date versions of additional git repositories, call scripts/update_gits.sh.
78
79All scripts can be invoked from any work directory as long as you invoke them with a relative or absoulte path, they find their relevant data directories and other scripts automatically.
80
81## GitLab CI
82
83The root .gitlab-ci.yml uses the files in this directory to do the builds. The building should work fine in any gitlab runner configured to use docker, especially the shared runners.
84
85For deployment, however, an own runner needs to be set up. A stadard setup will do fine, but then run as root. To run a rootless gitlab runner, you must do the following. Install gitlab runner normally, but disable the default service with
86
87 systemctl disable gitlab-runner
88
89As a regular user, register a runner with
90
91 gitlab-runner register
92
93the data to fill in is described on the GitLab CI configuration of the project. Then, normally, gitlab-runner uses docker-in-docker to run additional containers. That does not work rootless. Instead, you can just make the docker control socket available to gitlab's container by editing the volumes line in `~/.gitlab-runer/config.toml` to
94
95 volumes = ["/var/run/user/UID/docker.sock:/var/run/docker.sock", "/cache", "/home/USERNAME/secrets:/secrets:ro"]
96
97replacing UID with your user ID and USERNAME with your username. If you want to use the runner for deployment, the secrets folder then has to contain the credentials required to do so. Read deploy/targets.sh for details.
98
99Then, run the runner with
100
101 gitlab-runner run
102
103 Security and consistency implication: You then only have one docker instance. Jobs running on your runner can therefore modify the same docker images, for example apply tags. Therefore, all our CI scripts reference used images by their digest and use randomized names for containers so they don't get into one another's way.
0\ No newline at end of file104\ No newline at end of file
1105
=== added directory 'docker/build'
=== added file 'docker/build/Makefile.am'
--- docker/build/Makefile.am 1970-01-01 00:00:00 +0000
+++ docker/build/Makefile.am 2020-07-03 06:03:19 +0000
@@ -0,0 +1,652 @@
1.PHONY: tarball clean distclean source free closed full all
2
3# We want everything deleted if something bad happens
4.DELETE_ON_ERROR:
5
6default:
7 echo "Nothing generic to do."
8
9# individual targets for split jobs
10CI_prepare: gits_artifacts.tag source make_ci.sh rootcontext.64
11CI_linux_server_32: appimage_server_32.tag apptar_server_32.tag
12CI_linux_client_32: appimage_client_32.tag apptar_client_32.tag
13CI_linux_server_64: appimage_server_64.tag apptar_server_64.tag
14CI_linux_client_64: appimage_client_64.tag apptar_client_64.tag
15CI_windows: winzip.tag windows.tag
16CI_debtest: debtest.tag
17CI_linux_steam: steamdirs/steam_linux
18CI_windows_steam: steamdirs/steam_windows
19
20# full open source builds
21free.tag: appimage.tag apptar.tag sourcetar.tag
22 touch $@
23free: free.tag
24
25# builds for non-open source systems/environments
26closed_regular.tag: windows.tag winzip.tag
27 touch $@
28closed_regular: closed.tag
29closed_steam.tag: steam_windows.tag steam_linux.tag
30 touch $@
31closed_steam: closed_steam.tag
32closed.tag: closed_steam.tag closed_regular.tag
33 touch $@
34closed: closed.tag
35
36# closed comes first because windows builds take the longest and are not internally parallelized
37full.tag: result.winsource_32 result.winsource_steam closed.tag free.tag
38 touch $@
39full: full.tag
40
41# what to build from GitLab CI, divided into stages
42CI_base.tag: gits.tag source.tag result.build_server_32 result.build_client_64 context.64
43 touch $@
44
45# minimal expected build to be packable
46CI_pack.tag: gits_artifacts.tag source.tag CI_base.tag free.tag upload/PATCHNOTES.md upload/CHANGELOG.md
47 touch $@
48
49# all windows builds
50CI_windows.tag: CI_base.tag steam_windows.tag closed_regular.tag
51 touch $@
52
53# all free linux builds (so, no steam)
54CI_free.tag: CI_base.tag free.tag
55 touch $@
56
57# (OBSOLETE) targets for CI merge tests, a bit leaner than a full build
58CI_merge.tag: windows.tag debtest.tag
59 touch $@
60CI_merge: CI_merge.tag
61CI_merge_nodeb.tag: windows.tag CI_base.tag
62 touch $@
63CI_merge_nodeb: CI_merge_nodeb.tag
64
65# all builds
66#CI.tag: CI_pack.tag apptar_server_64.tag
67CI.tag: CI_windows.tag CI_free.tag full.tag CI_pack.tag
68 touch $@
69
70CI_base: CI_base.tag
71CI: CI.tag
72
73all: default
74
75dockertest.tag:
76 cp ${srcdir}/fakerelease_proto.sh .
77 @echo "Testing whether 'docker' works..."
78 docker help > /dev/null
79 echo > $@
80
81tarwrapper.sh: ${top_srcdir}/docker/scripts/tarwrapper.sh
82 ln -s $< $@
83
84#***************************************************************
85
86# variables
87
88# package metadata
89PACKAGE_VERSION:=$(shell grep "^PACKAGE_VERSION=" context/version.sh | sed -e "s,.*=,,")
90PACKAGE_NAME:=$(shell grep "^PACKAGE_NAME=" context/version.sh | sed -e "s,.*=,,")
91PACKAGE_TITLE:=$(shell grep "^PACKAGE_TITLE=" context/version.sh | sed -e "s,.*=,,")
92PACKAGE_NAME_SUFFIX:=$(shell echo $(PACKAGE_NAME) | sed -e "s,.*-,-,")
93PACKAGE_TITLE_SUFFIX:=$(shell echo $(PACKAGE_TITLE) | sed -e "s,.* , ,")
94STEAM_PACKAGE_NAME=retrocycles
95STEAM_PACKAGE_TITLE=Retrocycles
96
97# configurations for lean builds not supposed to be installed
98CONFIGURE_ARGUMENTS:=--disable-uninstall --disable-restoreold --enable-etc --enable-automakedefaults --disable-useradd --disable-sysinstall --disable-initscripts
99CONFIGURE_ARGUMENTS_SERVER:=--disable-glout --enable-armathentication
100
101# other directories
102SCRIPTDIR:=${srcdir}/../scripts
103GITS:=$(SCRIPTDIR)/.cache/gits
104
105# dump CI data and variables determined from it
106CI_INFO: ${srcdir}/../scripts/brand.sh
107 . ${srcdir}/../scripts/brand.sh @top_srcdir@ && \
108 echo SERIES=$${SERIES} > $@ && \
109 echo PROGRAM_NAME=$${PROGRAM_NAME} >> $@ && \
110 echo PROGRAM_TITLE=$${PROGRAM_TITLE} >> $@ && \
111 echo CI_COMMIT_REF_PROTECTED=$${CI_COMMIT_REF_PROTECTED} >> $@ && \
112 echo CI_COMMIT_SHA=$${CI_COMMIT_SHA} >> $@ && \
113 echo CI_COMMIT_REF_NAME=$${CI_COMMIT_REF_NAME} >> $@
114
115.PRECIOUS: CI_INFO
116
117#***************************************************************
118
119upload/.tag:
120 mkdir -p upload
121 echo > $@
122proto.tag:
123 mkdir -p proto
124 echo > $@
125
126make_ci.sh: ${srcdir}/make_ci.sh.in
127 cp $< $@
128
129context/version.sh: ${srcdir}/context/version.sh.in
130 cd ../../; ./config.status docker/build/context/version.sh
131
132../deploy/targets.sh: ${srcdir}/../deploy/targets.sh.in
133 cd ../../; ./config.status docker/deploy/targets.sh
134
135#***************************************************************
136
137# create source tarball
138TARBALL:=../../armagetronad-@version@.tar.gz
139$(TARBALL):
140 $(MAKE) -C ../../ dist GZIP_ENV=""
141tarball: $(TARBALL)
142
143# unpack source tarball
144source.tag: $(TARBALL) dockertest.tag
145 rm -rf source armagetronad-@version@
146 tar -xzf $(TARBALL)
147 mv armagetronad-@version@ source
148 echo > $@
149source: source.tag
150
151# rebranded tarball for upload
152upload/$(PACKAGE_NAME)-@version@.tbz: $(TARBALL) upload/.tag tarwrapper.sh
153 rm -rf $@ repack
154 mkdir -p repack_1 repack_2
155 cd repack_1; tar -xzf ../$(TARBALL)
156 mv repack_1/armagetronad-@version@ repack_2/$(PACKAGE_NAME)-@version@
157 cd repack_2; ../tarwrapper.sh -cjf repacked.tbz $(PACKAGE_NAME)-@version@
158 mv repack_2/repacked.tbz $@
159 rm -rf repack_1 repack_2
160
161sourcetar.tag: upload/$(PACKAGE_NAME)-@version@.tbz
162 touch $@
163
164# foreign gits (in the cache)
165gits.tag: $(SCRIPTDIR)/fix_gits.sh
166 $(SCRIPTDIR)/fix_gits.sh
167 echo > $@
168
169# bits of gits we need in artifacts
170gits_artifacts.tag: gits.tag
171 rm -rf gits
172 mkdir -p gits
173 cp -a ${GITS}/ubuntu/debian gits/
174 mkdir -p gits/steam
175 cp -a ${GITS}/steam-art/good/title.png gits/steam
176 echo > $@
177
178upload/PATCHNOTES.md: sourcetar.tag upload/.tag
179 ${top_srcdir}/batch/make/patchnotes.py ${top_srcdir} ${top_srcdir}/CHANGELOG_FROZEN.md armagetronad armagetronad -p > $@
180
181upload/CHANGELOG.md: sourcetar.tag upload/.tag
182 ${top_srcdir}/batch/make/patchnotes.py ${top_srcdir} ${top_srcdir}/CHANGELOG_FROZEN.md armagetronad armagetronad > $@
183
184#***************************************************************
185
186# generic context with source
187# technically everything here depends on the Makefile, but enforcing rebuilds on all
188# Makefile edits is too annoying during develop/test cycles.
189rootcontext.64: source.tag ${srcdir}/*.sh ${srcdir}/context/build.sh #Makefile
190 ${srcdir}/prepare_context.sh $@.dir source ${srcdir}/context/build.sh
191 echo "armabuild_64" > $@.dir/image
192 echo > $@
193
194context.64: rootcontext.64
195 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*'
196 echo > $@
197
198#***************************************************************
199
200# switch container to use to 32 bit
201context.32: context.64
202 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*'
203 rm $@.dir/image
204 echo "armabuild_32" > $@.dir/image
205 echo > $@
206
207# switch container to use to steam SDK, rebrand
208context.steam: context.64 gits_artifacts.tag
209 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*'
210 rm $@.dir/image
211 echo "armasteam_64" > $@.dir/image
212# rebrand
213 sed -i $@.dir/version.sh -e s/PACKAGE_NAME=armagetronad/PACKAGE_NAME=$(STEAM_PACKAGE_TITLE)/ -e s/PACKAGE_TITLE=\"Armagetron\ Advanced/PACKAGE_TITLE=\"$(STEAM_PACKAGE_TITLE)/ -e s/PACKAGE_TITLE=\"Armagetron/PACKAGE_TITLE=\"$(STEAM_PACKAGE_TITLE)/
214# no remotely adult stuff
215 sed -i $@.dir/source/src/engine/ePlayer.cpp -e "s/pr0n/cat videos/"
216# install alternative title, adapt sources
217 cp gits/steam/title.png $@.dir/source/textures/
218 sed -i $@.dir/source/src/tron/gLogo.cpp $@.dir/source/Makefile.* -e "s,textures/title.jpg,textures/title.png,"
219 cd $@.dir/source; automake
220# done
221 echo > $@
222
223# add debian/ubuntu build info for release %. Requires GPG key from ~/.gnupg
224context.debsrc_%: rootcontext.64 ${srcdir}/rebrand_debian_core.sh ${srcdir}/debian_source.sh gits_artifacts.tag $(TARBALL)
225 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*' $(TARBALL) ${srcdir}/rebrand_debian_core.sh ${srcdir}/debian_source.sh ./gits/debian
226 if test -r ../deploy/secrets/sec.gpg; then cp -lrf ../deploy/secrets/*.gpg $@.dir/; fi
227 echo "armadeb_64" > $@.dir/image
228 echo > $@
229result.debsrc_%: context.debsrc_%
230 +$(srcdir)/context_to_result.sh $@.dir ./debian_source.sh $*
231 echo > $@
232
233# test build a debian package (with a really old ubuntu codename)
234context.debsrc_test: context.debsrc_dapper
235 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*'
236# extract fake secrets
237 base64 -d < ${srcdir}/../deploy/anonymous_secrets.b64 | tar -xjf - --one-top-level=$@.dir
238 mv $@.dir/secrets/* $@.dir
239 rmdir $@.dir/secrets/
240 echo > $@
241context.debtest: result.debsrc_test
242 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*'
243 echo "cd source && debuild -i -us -uc -b && rm -rf *" > $@.dir/build_deb.sh
244 chmod +x $@.dir/build_deb.sh
245 echo > $@
246
247result.debtest: context.debtest
248 +$(srcdir)/context_to_result.sh $@.dir bash ./build_deb.sh
249 echo > $@
250
251debtest.tag: result.debtest
252 echo > $@
253
254# switch container to use alpine
255context.test: rootcontext.64
256 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*'
257 rm $@.dir/image
258 echo "armalpine_32" > $@.dir/image
259 echo > $@
260
261#***************************************************************
262
263context.build_server_%: context.%
264 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*'
265 echo "server" > $@.dir/serverclient
266 echo > $@
267
268context.build_client_%: context.%
269 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*'
270 echo "client" > $@.dir/serverclient
271 echo > $@
272
273.PRECIOUS: context.build_server_32 context.build_client_32 context.build_server_64 context.build_client_64
274
275#***************************************************************
276
277# server build for further processing
278result.build_server_%: context.build_server_%
279 +$(srcdir)/context_to_result.sh $@.dir ./build.sh $(CONFIGURE_ARGUMENTS) $(CONFIGURE_ARGUMENTS_SERVER)
280 echo > $@
281
282# client build for further processing
283result.build_client_%: context.build_client_%
284 +$(srcdir)/context_to_result.sh $@.dir ./build.sh $(CONFIGURE_ARGUMENTS)
285 echo > $@
286
287.PRECIOUS: result.build_server_32 result.build_client_32 result.build_server_64 result.build_client_64
288
289#***************************************************************
290
291# portable application directories
292context.appdir_%: result.build_% ${srcdir}/context/portable/* ${srcdir}/context/appdir.sh ${srcdir}/context/steam.sh
293 ${srcdir}/prepare_context.sh $@.dir $<.dir/* ${srcdir}/context/portable ${srcdir}/context/appdir.sh ${srcdir}/context/steam.sh
294 echo > $@
295
296result.appdir_%: context.appdir_%
297 +$(srcdir)/context_to_result.sh $@.dir ./appdir.sh
298 echo > $@
299
300# use different script for steam builds, rearranging some things
301result.appdir_%_steam: context.appdir_%_steam
302 +$(srcdir)/context_to_result.sh $@.dir ./steam.sh
303 echo > $@
304
305# tarball of appdir
306APPTAR_SERVER_32=$(PACKAGE_NAME)-server_32-$(PACKAGE_VERSION).tbz
307APPTAR_SERVER_64=$(PACKAGE_NAME)-server_64-$(PACKAGE_VERSION).tbz
308APPTAR_CLIENT_32=$(PACKAGE_NAME)-client_32-$(PACKAGE_VERSION).tbz
309APPTAR_CLIENT_64=$(PACKAGE_NAME)-client_64-$(PACKAGE_VERSION).tbz
310apptar_server_32.tag: upload/$(APPTAR_SERVER_32)
311 echo > $@
312apptar_server_64.tag: upload/$(APPTAR_SERVER_64)
313 echo > $@
314apptar_client_32.tag: upload/$(APPTAR_CLIENT_32)
315 echo > $@
316apptar_client_64.tag: upload/$(APPTAR_CLIENT_64)
317 echo > $@
318
319upload/$(APPTAR_SERVER_32): result.appdir_server_32 upload/.tag tarwrapper.sh
320 cd $<.dir/appdir; ../../tarwrapper.sh -cjf ../../$@ .
321upload/$(APPTAR_CLIENT_32): result.appdir_client_32 upload/.tag tarwrapper.sh
322 cd $<.dir/appdir; ../../tarwrapper.sh -cjf ../../$@ .
323upload/$(APPTAR_SERVER_64): result.appdir_server_64 upload/.tag tarwrapper.sh
324 cd $<.dir/appdir; ../../tarwrapper.sh -cjf ../../$@ .
325upload/$(APPTAR_CLIENT_64): result.appdir_client_64 upload/.tag tarwrapper.sh
326 cd $<.dir/appdir; ../../tarwrapper.sh -cjf ../../$@ .
327
328apptar.tag: apptar_server_32.tag apptar_client_32.tag apptar_server_64.tag apptar_client_64.tag upload/$(APPTAR_SERVER_32) upload/$(APPTAR_SERVER_64) upload/$(APPTAR_CLIENT_32) upload/$(APPTAR_CLIENT_64)
329 echo > $@
330apptar: apptar.tag
331
332.PHONY: appdir apptar
333
334.PRECIOUS: context.apptar_server_32 context.apptar_client_32 context.apptar_server_64 context.apptar_client_64
335
336.PRECIOUS: context.appdir_server_32 context.appdir_client_32 context.appdir_server_64 context.appdir_client_64
337
338#***************************************************************
339
340# AppImages
341context.appimage_%: result.appdir_% ${srcdir}/context/appimage.sh
342 ${srcdir}/prepare_context.sh $@.dir $<.dir/appdir $<.dir/image $<.dir/version.sh ${srcdir}/context/appimage.sh
343 echo > $@
344
345result.appimage_%: context.appimage_%
346 +$(srcdir)/context_to_result.sh $@.dir "./appimage.sh AppImage"
347 echo > $@
348
349APPIMAGE_BASENAME:=$(shell echo $(PACKAGE_TITLE) | sed -e "s, ,,g")
350APPIMAGE_CLIENT_64:=$(APPIMAGE_BASENAME)-$(PACKAGE_VERSION)
351APPIMAGE_SERVER_64:=$(APPIMAGE_BASENAME)Dedicated-$(PACKAGE_VERSION)
352APPIMAGE_CLIENT_32:=$(APPIMAGE_BASENAME)-32bit-$(PACKAGE_VERSION)
353APPIMAGE_SERVER_32:=$(APPIMAGE_BASENAME)Dedicated-32bit-$(PACKAGE_VERSION)
354
355upload/$(APPIMAGE_CLIENT_64): result.appimage_client_64 upload/.tag
356 cp $<.dir/AppImage $@
357upload/$(APPIMAGE_SERVER_64): result.appimage_server_64 upload/.tag
358 cp $<.dir/AppImage $@
359upload/$(APPIMAGE_CLIENT_32): result.appimage_client_32 upload/.tag
360 cp $<.dir/AppImage $@
361upload/$(APPIMAGE_SERVER_32): result.appimage_server_32 upload/.tag
362 cp $<.dir/AppImage $@
363
364appimage_client_64.tag: upload/$(APPIMAGE_CLIENT_64)
365 echo > $@
366appimage_server_64.tag: upload/$(APPIMAGE_SERVER_64)
367 echo > $@
368appimage_client_32.tag: upload/$(APPIMAGE_CLIENT_32)
369 echo > $@
370appimage_server_32.tag: upload/$(APPIMAGE_SERVER_32)
371 echo > $@
372
373appimage.tag: appimage_client_64.tag appimage_server_64.tag appimage_client_32.tag appimage_server_32.tag
374 echo > $@
375
376.PRECIOUS: context.appimage_server_32 context.appimage_client_32 context.appimage_server_64 context.appimage_client_64
377
378#***************************************************************
379
380# windows source
381context.winsource_%: result.build_server_% ${srcdir}/context/winsource.sh gits.tag
382 ${srcdir}/prepare_context.sh $@.dir $<.dir/* ${srcdir}/context/winsource.sh $(GITS)/codeblocks
383 echo > $@
384result.winsource_%: context.winsource_%
385 +$(srcdir)/context_to_result.sh $@.dir ./winsource.sh
386 echo > $@
387
388# windows build
389context.winbuild_%: result.winsource_% ${srcdir}/context/winbuild.sh gits.tag
390 ${srcdir}/prepare_context.sh $@.dir $<.dir/* ${srcdir}/context/winbuild.sh $(GITS)/winlibs
391 rm $@.dir/image
392 echo "armawineblocks" > $@.dir/image
393 echo > $@
394result.winbuild_%: context.winbuild_%
395 +$(srcdir)/context_to_result.sh $@.dir ./winbuild.sh
396 echo > $@
397
398# windows installers
399context.wininst_%: result.winbuild_% ${srcdir}/context/wininst.sh
400 ${srcdir}/prepare_context.sh $@.dir $<.dir/* ${srcdir}/context/wininst.sh
401 rm $@.dir/image
402 echo "armawineblocks" > $@.dir/image
403 echo > $@
404result.wininst_%: context.wininst_%
405 +$(srcdir)/context_to_result.sh $@.dir ./wininst.sh
406 echo > $@
407
408# windows source zip
409WINZIP_SOURCE_NAME:=$(PACKAGE_NAME)-source-$(PACKAGE_VERSION)
410WINZIP_SOURCE_DIR:=proto/$(WINZIP_SOURCE_NAME)
411WINZIP_SOURCE:=upload/$(WINZIP_SOURCE_NAME).zip
412$(WINZIP_SOURCE_DIR): result.winsource_32 proto.tag Makefile
413 rm -rf $@.dir
414 cp -al $<.dir/winsource $@.dir
415 echo > $@
416$(WINZIP_SOURCE): $(WINZIP_SOURCE_DIR) upload/.tag
417 cd $(WINZIP_SOURCE_DIR).dir; zip -9 -r ../../$(WINZIP_SOURCE) *
418winzip_source.tag: $(WINZIP_SOURCE)
419 echo > $@
420
421# windows client zip
422WINZIP_CLIENT_NAME:=$(PACKAGE_NAME)-client-$(PACKAGE_VERSION)
423WINZIP_CLIENT_DIR:=proto/$(WINZIP_CLIENT_NAME)
424WINZIP_CLIENT:=upload/$(WINZIP_CLIENT_NAME).win32.zip
425$(WINZIP_CLIENT_DIR): result.winbuild_32 proto.tag Makefile
426 rm -rf $@.dir
427 cp -al $<.dir/dist $@.dir
428 rm $@.dir/$(PACKAGE_NAME)_dedicated.exe $@.dir/*.nsi $@.dir/banner* $@.dir/INSTALL.txt
429 echo > $@
430$(WINZIP_CLIENT): $(WINZIP_CLIENT_DIR) upload/.tag
431 cd $(WINZIP_CLIENT_DIR).dir; zip -9 -r ../../$(WINZIP_CLIENT) *
432winzip_client.tag: $(WINZIP_CLIENT)
433 echo > $@
434
435# windows server zip
436WINZIP_SERVER_NAME:=$(PACKAGE_NAME)-server-$(PACKAGE_VERSION)
437WINZIP_SERVER_DIR:=proto/$(WINZIP_SERVER_NAME)
438WINZIP_SERVER:=upload/$(WINZIP_SERVER_NAME).win32.zip
439$(WINZIP_SERVER_DIR): result.winbuild_32 proto.tag Makefile
440 rm -rf $@.dir
441 cp -al $<.dir/dist $@.dir
442 rm -r $@.dir/$(PACKAGE_NAME).exe $@.dir/*.nsi $@.dir/banner* \
443 $@.dir/INSTALL.txt $@.dir/models $@.dir/sound $@.dir/textures \
444 $@.dir/SDL* $@.dir/libpng* $@.dir/jpeg*
445 echo > $@
446$(WINZIP_SERVER): $(WINZIP_SERVER_DIR) upload/.tag
447 cd $(WINZIP_SERVER_DIR).dir; zip -9 -r ../../$(WINZIP_SERVER) *
448winzip_server.tag: $(WINZIP_SERVER)
449 echo > $@
450
451winzip.tag: winzip_server.tag winzip_client.tag winzip_source.tag
452 echo > $@
453
454
455# copy installers into upload
456WININST_CLIENT_NAME:=$(PACKAGE_NAME)-$(PACKAGE_VERSION).gcc.win32.exe
457WININST_SERVER_NAME:=$(PACKAGE_NAME)-dedicated-$(PACKAGE_VERSION).gcc.win32.exe
458WININST_CLIENT=upload/$(WININST_CLIENT_NAME)
459WININST_SERVER=upload/$(WININST_SERVER_NAME)
460$(WININST_CLIENT): result.wininst_32 upload/.tag
461 rm -f $@
462 cp $<.dir/$(WININST_CLIENT_NAME) $@
463$(WININST_SERVER): result.wininst_32 upload/.tag
464 rm -f $@
465 cp $<.dir/$(WININST_SERVER_NAME) $@
466windows.tag: $(WININST_CLIENT) $(WININST_SERVER)
467 echo > $@
468
469# prerequisites for zeroinstall
470zeroinstall.tag: winzip.tag apptar.tag
471 touch $@
472zeroinstall: zeroinstall.tag
473
474.PHONY: windows winzip_client winzip_server zeroinstall
475
476.PRECIOUS: context.wininst_32 context.winbuild_32 context.winsource_32
477
478#***************************************************************
479
480steamdirs/.tag:
481 mkdir -p steamdirs
482 echo > $@
483
484# steam packaging
485steamdirs/steam_linux: result.appdir_server_steam result.appdir_client_steam steamdirs/.tag
486 rm -rf $@.dir
487 cp -al $<.dir/appdir $@.dir
488 cp -al result.appdir_client_steam.dir/appdir/* $@.dir/
489 echo > $@
490
491steamdirs/steam_windows: result.winbuild_steam steamdirs/.tag
492 rm -rf $@.dir
493 cp -al $<.dir/dist $@.dir
494 mv $@.dir/*dedicated.exe $@.dir/DEDICATED.hex
495 mv $@.dir/*.exe $@.dir/CLIENT.hex
496 mv $@.dir/CLIENT.hex $@.dir/$(STEAM_PACKAGE_TITLE).exe
497 mv $@.dir/DEDICATED.hex $@.dir/$(STEAM_PACKAGE_TITLE)_Dedicated.exe
498 rm -rf $@.dir/*.nsi
499 rm -rf $@.dir/*.url
500 rm -rf $@.dir/banner*
501 echo > $@
502
503steam_linux.tag: steamdirs/steam_linux result.appdir_client_steam result.appdir_server_steam
504 echo > $@
505steam_windows.tag: steamdirs/steam_windows result.winbuild_steam
506 echo > $@
507
508steam.tag: steam_windows.tag steam_linux.tag
509 echo > $@
510.PHONY: steam steam_windows steam_linux
511
512.PRECIOUS: context.build_client_steam result.build_client_steam context.appdir_client_steam result.build_server_steam context.build_server_steam context.appdir_server_steam context.winbuild_steam context.winsource_steam
513
514#***************************************************************
515
516# for testing, we want minimal builds before any deployment
517# in production, the CI solution is responsible for having built
518# everything not explicitly required here
519deploy_base.tag: CI_pack.tag debtest.tag ../deploy/targets.sh
520 echo > $@
521deploy_base: deploy_base.tag
522
523context.deploy_base_%: rootcontext.64 deploy_base.tag ${srcdir}/../deploy/deploy_%.sh ../deploy/* CI_INFO
524 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*' upload ../deploy/'*' ${srcdir}/../deploy/deploy_$*.sh CI_INFO
525 echo > $@
526context.deploy_%: context.deploy_base_%
527 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*'
528 echo > $@
529result.deploy_%: context.deploy_%
530 +$(srcdir)/context_to_result.sh $@.dir ./deploy_$*.sh
531 echo > $@
532
533# special case steam: run in steamcmd image
534context.deploy_steam: context.deploy_base_steam ${srcdir}/../deploy/steamcontentbuilder/*/* steamdirs/*
535 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*' ${srcdir}/../deploy/steamcontentbuilder
536 sed -i $@.dir/steamcontentbuilder/scripts/app_build_1306180.vdf -e "s/BUILD_DESCRIPTION/$(STEAM_PACKAGE_TITLE)$(PACKAGE_TITLE_SUFFIX) $(PACKAGE_VERSION)/"
537 mkdir -p $@.dir/steamcontentbuilder/content $@.dir/steamcontentbuilder/output
538 cp -al steamdirs/steam_windows.dir $@.dir/steamcontentbuilder/content/steam_windows
539 cp -al steamdirs/steam_linux.dir $@.dir/steamcontentbuilder/content/steam_linux
540 rm -rf $@.dir/upload
541 rm -f $@.dir/image
542 echo "steamcmd" > $@.dir/image
543 echo > $@
544
545context.deploy_ppa_%: result.debsrc_% ${srcdir}/../deploy/deploy_ppa.sh ../deploy/targets.sh CI_INFO
546 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*' ${srcdir}/../deploy/deploy_ppa.sh ../deploy/targets.sh ../deploy/secrets/*.gpg CI_INFO
547 echo > $@
548result.deploy_ppa_%: context.deploy_ppa_%
549 +$(srcdir)/context_to_result.sh $@.dir ./deploy_ppa.sh $*
550 echo > $@
551
552# deploy for launchpad needs armadeb image
553context.deploy_lp: context.deploy_base_lp ${srcdir}/../deploy/lp-project-upload
554 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*' ${srcdir}/../deploy/lp-project-upload
555 rm -f $@.dir/image
556 echo "armadeb_64" > $@.dir/image
557 echo > $@
558
559context.update_zi: context.deploy_base_zeroinstall ${srcdir}/../deploy/*_zeroinstall.sh
560 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*' ${srcdir}/../deploy/*_zeroinstall.sh
561 rm -f $@.dir/image
562 echo "armadeploy_64" > $@.dir/image
563 echo > $@
564result.update_zi: context.update_zi
565 +$(srcdir)/context_to_result.sh $@.dir ./update_zeroinstall.sh
566 echo > $@
567context.deploy_zi: context.deploy_base_zeroinstall result.update_zi ${srcdir}/../deploy/*_zeroinstall.sh result.deploy_lp result.deploy_scp
568 ${srcdir}/prepare_context.sh $@.dir $<.dir/'*' result.update_zi.dir/zeroinstall ${srcdir}/../deploy/*_zeroinstall.sh
569 rm -f $@.dir/image
570 echo "armadeploy_64" > $@.dir/image
571 echo > $@
572result.deploy_zi: context.deploy_zi
573 +$(srcdir)/context_to_result.sh $@.dir ./deploy_zeroinstall.sh
574 echo > $@
575
576# deploy to download site (additional dependency here only, standard rules apply)
577result.deploy_download: result.deploy_scp result.deploy_lp
578
579# individual deploy targets
580deploy_lp: result.deploy_lp
581deploy_scp: result.deploy_scp
582deploy_steam: result.deploy_steam
583deploy_zi: result.deploy_zi
584deploy_download: result.deploy_download
585
586deploy_ppa: \
587deploy_ppa_focal \
588deploy_ppa_eoan \
589deploy_ppa_bionic \
590deploy_ppa_xenial \
591deploy_ppa_trusty
592
593deploy_ppa_%: result.deploy_ppa_%
594 @echo Deployed $*
595
596deploy: deploy_lp deploy_scp deploy_ppa deploy_zi deploy_steam deploy_download
597#deploy: deploy_scp
598#deploy: deploy_zi
599#deploy: deploy_ppa
600
601unstaged_%:
602# disable staging, deploy for real
603 sed -i ../deploy/targets.sh -e "s/STAGING=true/STAGING=false/"
604 STAGING=false MAKE=$(MAKE) ${srcdir}/make_deploy.sh $*
605
606staged_%:
607# enforce staging
608 sed -i ../deploy/targets.sh -e "s/STAGING=false/STAGING=true/"
609 MAKE=$(MAKE) ${srcdir}/make_deploy.sh $*
610
611.PHONY: deploy deploy_ppa deploy_scp deploy_steam deploy_base deploy_download
612
613.PRECIOUS: context.debsrc_dapper \
614context.debsrc_bionic result.debsrc_bionic context.deploy_ppa_bionic result.deploy_ppa_bionic \
615context.debsrc_trusty result.debsrc_trusty context.deploy_ppa_trusty result.deploy_ppa_trusty \
616context.debsrc_xenial result.debsrc_xenial context.deploy_ppa_xenial result.deploy_ppa_xenial \
617context.debsrc_eoan result.debsrc_eoan context.deploy_ppa_eoan result.deploy_ppa_eoan \
618context.debsrc_focal result.debsrc_focal context.deploy_ppa_focal result.deploy_ppa_focal \
619context.deploy_base_scp context.deploy_scp \
620context.deploy_base_download result.deploy_download context.deploy_download
621
622#***************************************************************
623
624# base64 encode secrets so they can be passed in via a protected configuration variable
625../deploy/secrets.b64: ../deploy/secrets/* ../deploy/secrets/*/*
626 cd ../deploy; tar --exclude-backups -cjf - secrets | base64 > secrets.b64
627
628secrets: ../deploy/secrets.b64
629
630.PHONY: secrets
631
632#***************************************************************
633
634# test client build on lean alpine linux
635test: result.build_client_test result.build_server_test
636
637#***************************************************************
638
639intermediateclean:
640 rm -rf context.*
641
642# keep the artifacts clean of junk not needed in the next phase
643artifactclean:
644 rm -rf *.dir source proto/*.dir
645
646clean: intermediateclean
647 rm -rf upload source gits result.* *.tag proto
648 if git -C ${srcdir} rev-parse --abbrev-ref HEAD > /dev/null; then rm -f CI_INFO; fi
649distclean: clean
650 rm -rf $(TARBALL) CI_INFO
651 cd ${top_srcdir} && ./bootstrap.sh
652 cat ${top_srcdir}/version.m4
0653
=== added file 'docker/build/build_in_container.sh'
--- docker/build/build_in_container.sh 1970-01-01 00:00:00 +0000
+++ docker/build/build_in_container.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,87 @@
1#!/bin/bash
2
3# Usage: build_in_container.sh <base_image> <result> <command>
4# Takes <base_image> as base, copies current directory into a build directory,
5# runs <commmand>, copies resulting build directory to ./<result>/
6
7base=$1
8shift
9result=$1
10shift
11
12if test -d ${result}; then
13 echo ${result} already exists.
14 exit 1
15fi
16
17set -x
18
19# make sure base image exists
20wd=`dirname $0`
21${wd}/../scripts/ensure_image.sh "${base}" -d
22. ${wd}/../images/digest.sh "${base}" || exit $?
23
24dockeruser=`docker inspect --format '{{.Config.User}}' ${REGISTRY}${base}${REFERENCE}` || exit $?
25home=/home/${dockeruser}
26if test -z "$dockeruser";then
27 dockeruser=root
28 home=/root
29fi
30
31# create dockerfile with prepared input files
32tmp=`mktemp`
33container_name=image_${PPID}_`basename ${tmp} | tr '[:upper:]' '[:lower:]'`
34function build(){
35docker build --no-cache -t ${container_name} -f - . <<EOF
36FROM ${REGISTRY}${base}${REFERENCE}
37RUN mkdir -p ${home}/BUILDDIR
38COPY --chown=${dockeruser} ./ ${home}/BUILDDIR
39WORKDIR ${home}/BUILDDIR
40EOF
41}
42
43build || exit $?
44
45# run command and extract output from container
46function run_and_extract(){
47 EXITCODE=0
48 cidfile=${result}.CID
49 rm -f ${cidfile}
50 docker run --cidfile ${cidfile} ${container_name} $@ || EXITCODE=$?
51 container_id=`cat ${cidfile}`
52 rm -f ${cidfile}
53 docker cp ${container_id}:${home}/BUILDDIR ${result} || EXITCODE=$?
54 docker rm -f ${container_id} || true
55 docker rmi -f ${container_name} || true
56 return ${EXITCODE}
57}
58
59if ! run_and_extract "$@"; then
60 # on failure, remove output
61 rm -rf ${tmp}
62 rm -rf ${result}.error
63 mv ${result} ${result}.error
64 exit 1
65fi
66
67rm -rf ${tmp}
68
69exit 0
70
71# save disk space by deduplicating source and destination
72set +x
73function link_identical_files(){
74 while read file; do
75 if test -r "${result}/${file}"; then
76 if diff "${file}" "${result}/${file}" > /dev/null; then
77 echo cp -lf "${file}" ...
78 cp -lf "${file}" "${result}/${file}"
79 else
80 echo NOT "${file}", differs
81 fi
82 fi
83 done
84}
85find . -type f | link_identical_files || exit $?
86set -x
87
088
=== added directory 'docker/build/context'
=== added file 'docker/build/context/appdir.sh'
--- docker/build/context/appdir.sh 1970-01-01 00:00:00 +0000
+++ docker/build/context/appdir.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,15 @@
1#!/bin/bash
2
3# build a portable application dir
4test -x fakerelease.sh && . fakerelease.sh
5. version.sh || exit 1
6
7set -x
8
9SUFFIX=
10cat serverclient | grep "server" > /dev/null && SUFFIX=-dedicated
11make -C build install DESTDIR=`pwd`/appdir || exit
12APPDIR=appdir PACKAGE=${PACKAGE_NAME}${SUFFIX} portable/build || exit
13
14# comment out to inspect result for debug purposes
15rm -rf build source
016
=== added file 'docker/build/context/appimage.sh'
--- docker/build/context/appimage.sh 1970-01-01 00:00:00 +0000
+++ docker/build/context/appimage.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,24 @@
1#!/bin/bash
2
3# pack portable application dir into AppImage
4set -x
5
6. ./version.sh
7
8# determine arch suffix
9ARCH=x86_64
10if test `getconf LONG_BIT` -eq 32; then
11 ARCH=i686
12fi
13
14# copy icon
15cp -l appdir/usr/local/share/games/${PACKAGE_NAME}*/desktop/icons/large/${PACKAGE_NAME}*.png appdir/
16
17# pack it up. The appimagetool package is available here:
18# https://github.com/AppImage/AppImageKit/releases
19
20rm -f $1
21ARCH=${ARCH} appimagetool-${ARCH}.AppImage --appimage-extract-and-run appdir $1
22
23# comment out to inspect result for debug purposes
24rm -rf appdir
025
=== added file 'docker/build/context/build.sh'
--- docker/build/context/build.sh 1970-01-01 00:00:00 +0000
+++ docker/build/context/build.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,14 @@
1#!/bin/bash
2
3# do a build from source to build
4test -x fakerelease.sh && . fakerelease.sh
5. version.sh || exit $?
6
7set -x
8
9mkdir -p build
10pushd build
11progname="${PACKAGE_NAME}" progtitle="${PACKAGE_TITLE}" ../source/configure --prefix=/usr/local $@ || exit $?
12nice -n 19 make -j `nproc` || exit $?
13popd
14
015
=== added directory 'docker/build/context/portable'
=== added file 'docker/build/context/portable/AppRun'
--- docker/build/context/portable/AppRun 1970-01-01 00:00:00 +0000
+++ docker/build/context/portable/AppRun 2020-07-03 06:03:19 +0000
@@ -0,0 +1,38 @@
1#!/bin/bash
2
3#set -x
4
5root=$(dirname "${0}")
6EXEC=$(grep -h -m 1 -r Exec= ${root}/*.desktop | cut -d "=" -f 2 | cut -d % -f 1 | cut -d " " -f 1 | head -n 1)
7# append library path so system libraries are found first (if we put our libs into /usr/lib),
8# same for executables.
9
10# true portable app: create a .armagetronad directory in the current directory and
11# it'll be used to store your data.
12extraarg=
13test -d .${EXEC} && extraarg="--userdatadir .${EXEC} --vardir .${EXEC}/var --userconfigdir .${EXEC}/config"
14
15# for debugging: if LD_DEBUG_APP=true, use the included libraries first.
16# you can then use strace to check no non-standard external libraries are needed.
17
18extralibs=
19if test "x${LD_DEBUG_APP}" = xtrue; then
20 echo "Library debug mode: ignore system libraries."
21else
22 CACHE=~/.${EXEC}/.syslibs
23 mkdir -p ~/.${EXEC}
24 if test ! -e ${CACHE} || test ${0} -nt ${CACHE}; then
25 # find all directories in ld's cache
26 for lib in $({ /sbin/ldconfig -p || ldconfig -p; } | tail -n +2 | sed -e "s,.* =>,," -e "s,/[^/]*$,," | sort -u); do
27 extralib=${extralib}:${lib}
28 done
29 echo ${extralib} > ${CACHE}
30 fi
31 extralib=$(cat ${CACHE})
32fi
33
34LD_LIBRARY_PATH="${root}/usr/local/lib${extralib}:${LD_LIBRARY_PATH}:${root}/usr/lib"
35PATH="${root}/usr/local/bin:${PATH}${root}/usr/bin"
36export LD_LIBRARY_PATH
37export PATH
38exec $EXEC ${extraarg} $@
039
=== added file 'docker/build/context/portable/README'
--- docker/build/context/portable/README 1970-01-01 00:00:00 +0000
+++ docker/build/context/portable/README 2020-07-03 06:03:19 +0000
@@ -0,0 +1,2 @@
1Contains files for portable builds (AppImage/Steam)
2
03
=== added file 'docker/build/context/portable/build'
--- docker/build/context/portable/build 1970-01-01 00:00:00 +0000
+++ docker/build/context/portable/build 2020-07-03 06:03:19 +0000
@@ -0,0 +1,89 @@
1#!/bin/bash
2# builds portable client
3
4# set -x
5
6# add AppRun and desktop file
7cp portable/AppRun ${APPDIR}/
8find ${APPDIR} -type f -name "*.desktop" -exec mv \{\} ${APPDIR}/ \;
9find ${APPDIR} -type l -name "*.desktop" -exec rm \{\} \;
10
11# hack Icon
12for f in $(find ${APPDIR} -type d -name "desktop"); do
13 cp $f/icons/small/*.png ${APPDIR}/${PACKAGE}.png
14done
15
16# correct absolute symlinks
17APPDIR=${APPDIR} $(dirname $0)/fixlinks
18
19lastpath=/usr/lib/*linux-gnu
20otherpath=${lastpath}
21
22function copylib()
23{
24 baselib=$1
25 path=$(dirname ${baselib})
26 baselib=$(basename ${baselib})
27 echo "Found in ${path}."
28 if test "$lastpath" != "$path"; then
29 otherpath=$lastpath
30 fi
31 lastpath=$path
32 while test -n "${baselib}"; do
33 # copy libary
34 echo Copying ${baselib}...
35 cp -a "${path}/${baselib}" ${APPDIR}/usr/lib/
36 # resolve links
37 baselib=$(ls -l ${path}/${baselib} | grep -- "->" | sed -e "s,.*-> ,,")
38 done
39}
40
41# include libraries
42mkdir -p ${APPDIR}/usr/lib/
43mkdir -p ${APPDIR}/usr/local/lib/
44for library in \
45libxml2 \
46libZThread \
47libSDL-1 \
48libboost_thread \
49libSDL_image libpng \
50libSDL_mixer \
51libGLEW \
52libfreetype \
53libftgl \
54libprotobuf \
55; do
56 echo "Checking for library ${library}...."
57 baselib=$(ldd ${APPDIR}/usr/local/bin/${PACKAGE} | grep "${library}" | sed -e "s,.*=> ,," -e "s, (.*,,")
58 if test -z "${baselib}"; then
59 echo "Not linked."
60 else
61 copylib ${baselib}
62 fi
63done
64
65if ! echo ${PACKAGE} | grep dedicated; then
66# libraries we know are dynamically loaded later, so they don't appear in ldd's output
67for library in \
68libjpeg.so.8 \
69; do
70 echo "Installing library ${library} anyway, we know it's needed."
71 if test -r ${lastpath}/${library}; then
72 copylib ${lastpath}/${library}
73 else
74 copylib ${otherpath}/${library}
75 fi
76done
77fi
78
79# more libraries for 0.4, later
80#libogg.so \
81#libogg.so.0 \
82#libvorbis.so \
83#libvorbis.so.0 \
84#libvorbisfile.so \
85#libvorbisfile.so.3 \
86#libmikmod.so \
87#libmikmod.so.2 \
88
89echo $lastpath
090
=== added file 'docker/build/context/portable/fixlinks'
--- docker/build/context/portable/fixlinks 1970-01-01 00:00:00 +0000
+++ docker/build/context/portable/fixlinks 2020-07-03 06:03:19 +0000
@@ -0,0 +1,21 @@
1#!/bin/bash
2# fixes absolute symbolic links
3
4set -x
5
6# correct absolute symlinks
7pushd ${APPDIR}
8function processlinks()
9{
10 while read SOURCE; do
11 TARGET=$(ls -l "${SOURCE}" | sed -e "s,.*-> *,,")
12 RELATIVEUP=$(dirname ${SOURCE} | sed -e 's,^./,,' -e 's,[^/]*,..,g')
13 if echo ${TARGET} | grep '^/' > /dev/null; then
14 NEWTARGET=${RELATIVEUP}${TARGET}
15 ln -sf ${NEWTARGET} ${SOURCE}
16 fi
17 done
18}
19
20find . -type l | processlinks
21popd
022
=== added file 'docker/build/context/steam.sh'
--- docker/build/context/steam.sh 1970-01-01 00:00:00 +0000
+++ docker/build/context/steam.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,32 @@
1#!/bin/bash
2
3# build a portable application dir for the steam runtime
4test -x fakerelease.sh && . fakerelease.sh
5. version.sh || exit 1
6
7set -x
8
9STEAM_PACKAGE_NAME=`echo ${PACKAGE_NAME} | sed -e s/-.*//` || exit $?
10STEAM_PACKAGE_TITLE=`echo ${PACKAGE_TITLE} | sed -e s/-.*// -e "s/ .*//"` || exit $?
11
12# delegate
13./appdir.sh $@ || exit $?
14
15# move stuff around
16sed -i appdir/armagetronad.desktop -e s/armagetronad/${STEAM_PACKAGE_NAME}/g || exit $?
17if test `cat serverclient` = client; then
18 sed -i appdir/AppRun -e s/EXEC=.*\$/EXEC=${PACKAGE_NAME}/g || exit $?
19 mv appdir/AppRun appdir/${STEAM_PACKAGE_TITLE} || exit $?
20 mv appdir/armagetronad.desktop appdir/${STEAM_PACKAGE_NAME}.desktop || exit $?
21else
22 sed -i appdir/AppRun -e s/EXEC=.*\$/EXEC=${PACKAGE_NAME}-dedicated/g || exit $?
23 mv appdir/AppRun appdir/${STEAM_PACKAGE_TITLE}_Dedicated || exit $?
24 mv appdir/armagetronad.desktop appdir/${STEAM_PACKAGE_NAME}-dedicated.desktop || exit $?
25fi
26
27# all in the steam runtime
28rm -f appdir/usr/lib/libSDL*
29rm -f appdir/usr/lib/libjpeg*
30rm -f appdir/usr/lib/libxml2*
31rm -f appdir/usr/lib/libpng*
32rm -f appdir/usr/lib/libfreetype*
033
=== added file 'docker/build/context/testbuild.sh'
--- docker/build/context/testbuild.sh 1970-01-01 00:00:00 +0000
+++ docker/build/context/testbuild.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,10 @@
1#!/bin/bash
2
3# do a simple test server build
4test -x fakerelease.sh && . fakerelease.sh
5
6mkdir build
7cd build
8../source/configure "$*"
9make
10
011
=== added file 'docker/build/context/version.sh.in'
--- docker/build/context/version.sh.in 1970-01-01 00:00:00 +0000
+++ docker/build/context/version.sh.in 2020-07-03 06:03:19 +0000
@@ -0,0 +1,6 @@
1PACKAGE_VERSION=@version@
2PACKAGE_NAME=@prognamebase@
3PACKAGE_TITLE="@progtitle@"
4
5# depends on whether the current build is configured as client or server, maybe don't use?
6# PACKAGE_NAME_FULL=@progname@
07
=== added file 'docker/build/context/winbuild.sh'
--- docker/build/context/winbuild.sh 1970-01-01 00:00:00 +0000
+++ docker/build/context/winbuild.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,14 @@
1#!/bin/sh
2# makes windows build from source
3
4set -x
5
6Xvfb :99 -screen 1 640x480x8 -nolisten tcp &
7DISPLAY=:99
8sleep 1
9cd winsource
10./fromunix.sh || exit $?
11cd ..
12
13# comment out for debugging
14rm -rf winsource winlibs debug
015
=== added file 'docker/build/context/wininst.sh'
--- docker/build/context/wininst.sh 1970-01-01 00:00:00 +0000
+++ docker/build/context/wininst.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,22 @@
1#!/bin/sh
2# builds windows installer
3
4set -x
5
6if test -r ~/.wine/drive_c/Program\ Files\ \(x86\)/NSIS/makensis.exe; then
7 NSIS="C:\Program Files (x86)\NSIS\makensis.exe"
8else
9 NSIS="C:\Program Files\NSIS\makensis.exe"
10fi
11
12Xvfb :99 -screen 1 640x480x8 -nolisten tcp &
13DISPLAY=:99
14sleep 1
15cd dist
16wine "$NSIS" gcc.armagetronad.nsi || exit $?
17wine "$NSIS" gcc.armagetronad_dedicated.nsi || exit $?
18mv *.gcc.win32.exe ../ || exit $?
19cd ..
20
21# comment out for debugging
22rm -rf dist
023
=== added file 'docker/build/context/winsource.sh'
--- docker/build/context/winsource.sh 1970-01-01 00:00:00 +0000
+++ docker/build/context/winsource.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,82 @@
1#!/bin/sh
2# packs windows sources
3
4set -x
5
6. ./version.sh
7
8WINDIR=winsource
9SRCDIR=source
10BUILDDIR=build
11DOCDIR=build/src/doc
12CODEBLOCKS=codeblocks
13
14# prepare windows sources
15rm -rf $WINDIR
16cp -a $SRCDIR $WINDIR || exit 1
17rm -rf $WINDIR/src/doc
18rm -rf $WINDIR/doc
19cp -r $DOCDIR $WINDIR/doc || exit 1
20cp -r $BUILDDIR/language/languages.txt $WINDIR/language || exit 1
21cp -r $BUILDDIR/config/aiplayers.cfg $WINDIR/config || exit 1
22
23# rename text files
24for f in $WINDIR/INSTALL $WINDIR/COPYING $WINDIR/AUTHORS $WINDIR/NEWS $WINDIR/ChangeLog `find $WINDIR -name "*README*"`; do
25 mv $f $f.txt || exit 1
26done
27
28# copy Code::Blocks build files
29if test -n "${CODEBLOCKS}" && test -d ${CODEBLOCKS}; then
30 cp -r ${CODEBLOCKS}/* ${WINDIR}/ || exit 1
31
32 # adapt relative paths to source
33 for f in `ls ${CODEBLOCKS} -1 | egrep ".*\.cbp$|.*.\.bat$"`; do
34 echo $f
35 sed < ${CODEBLOCKS}/$f > ${WINDIR}/$f -e "s,=\.\.\\\\armagetronad,=.,g" -e "s,\.\./armagetronad[^_],,g" -e "s,\.\.\\\\armagetronad[^_],,g" -e "s,armagetronad,${PACKAGE_NAME},g"
36 done
37fi
38
39# transcribe nsi scripts
40for source in ${CODEBLOCKS}/*.nsi; do
41 f=`basename ${source}`
42 #echo Adapting installer script $f...
43 sed < ${source} > ${WINDIR}/$f \
44 -e "s,define PRODUCT_VERSION.*$,define PRODUCT_VERSION \"${PACKAGE_VERSION}\"," \
45 -e "s,define PRODUCT_BASENAME.*$,define PRODUCT_BASENAME \"${PACKAGE_TITLE}\"," \
46 -e "s,armagetronad,${PACKAGE_NAME},g" || exit 1
47
48 for suffix in gcc; do
49 sed < ${source} > ${WINDIR}/${suffix}.$f \
50 -e "s,define PRODUCT_VERSION.*$,define PRODUCT_VERSION \"${PACKAGE_VERSION}.${suffix}\"," \
51 -e "s,define PRODUCT_BASENAME.*$,define PRODUCT_BASENAME \"${PACKAGE_TITLE}\"," \
52 -e "s,armagetronad,${PACKAGE_NAME},g" || exit 1
53
54 # generate special makedist script that copies only the wanted installer generators
55 MAKEDIST=${WINDIR}/makedist_${suffix}.bat
56 echo "call makedist.bat" > ${MAKEDIST}
57 echo "xcopy dist\\${suffix}.*.nsi . /Y" >> ${MAKEDIST}
58 echo "del dist\\*.nsi" >> ${MAKEDIST}
59 echo "xcopy ${suffix}.*.nsi dist /Y" >> ${MAKEDIST}
60 echo "del ${suffix}*.nsi" >> ${MAKEDIST}
61 echo "pause" >> ${MAKEDIST}
62 done
63done
64
65# transcode to windows CR/LF line mode
66for suffix in bat nsi nsi.m4 cfg txt dsp dsw h cpp dtd xml; do
67 find $WINDIR -name "*.$suffix" -exec recode latin1..latin1/CR-LF \{\} \;
68done
69
70rm -rf $WINDIR/config.* $WINDIR/configure* $WINDIR/*.m4 $WINDIR/*.kde*
71rm -rf $WINDIR/bootstrap.sh $WINDIR/batch $WINDIR/missing $WINDIR/install-sh $WINDIR/textures/KGN*
72find $WINDIR -name "*.in" -exec rm \{\} \;
73find $WINDIR -name "*.am" -exec rm \{\} \;
74find $WINDIR -name "Makefile*" -exec rm \{\} \;
75find $WINDIR -name "*.ghost" -exec rm \{\} \;
76find $WINDIR -depth -name "CVS" -exec rm -rf \{\} \;
77find $WINDIR -depth -name "*~" -exec rm -rf \{\} \;
78
79chmod +x winsource/fromunix.sh || exit 1
80
81# comment out for debugging
82rm -rf ${CODEBLOCKS} ${SRCDIR} ${BUILDDIR}
083
=== added file 'docker/build/context_to_result.sh'
--- docker/build/context_to_result.sh 1970-01-01 00:00:00 +0000
+++ docker/build/context_to_result.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,43 @@
1#!/bin/bash
2
3# runs a context through dockerbuild
4# usage: context_to_result.sh <image> <name> <command>
5# takes input: context.<name>
6# produces output: result.<name>
7# name can also carry a context. or result. prefix, it will be removed
8
9#echo -e "\e]2;Build $1\a"
10
11set -x
12
13wd="`dirname $0`"
14bic="`readlink -f ${wd}/build_in_container.sh`"
15
16name="$1"
17shift
18
19if echo ${name} | grep "^context\." > /dev/null; then
20 name=`echo ${name} | sed -e s,context\.,,`
21fi
22if echo ${name} | grep "^result\." > /dev/null; then
23 name=`echo ${name} | sed -e s,result\.,,`
24fi
25
26rm -rf result.${name}
27cd context.${name} || exit $?
28image=`cat image` || exit $?
29
30#sleep 1
31
32find . -name "*~" -exec rm \{\} \;
33
34set +x
35echo -e "\n\n********************************************************************"
36echo -e "Build ${name}"
37echo -e "vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n\n"
38
39${bic} "${image}" ../result.${name} "$@" || exit $?
40
41echo -e "\n\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
42echo -e "Done building ${name}"
43echo -e "********************************************************************"
044
=== added file 'docker/build/debian_source.sh'
--- docker/build/debian_source.sh 1970-01-01 00:00:00 +0000
+++ docker/build/debian_source.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,48 @@
1#!/bin/bash
2
3# prepares debian sources
4# parameters: <series> (unstable/karmic/gutsy...)
5
6# import gpg keys
7EXIT=0
8gpg --import pub.gpg 2>&1 | tee importlog || EXIT=$?
9gpg --allow-secret-key-import --import sec.gpg || EXIT=$?
10rm -rf *.gpg
11test ${EXIT} = 0 || exit ${EXIT}
12
13set -x
14
15# determine email of key owner
16#grep "public key .* imported" importlog
17#grep "public key .* imported" importlog | sed -e 's/>".*$/>/' -e 's/^.*"//'
18MAIL=`grep "public key .* imported" importlog | sed -e 's/>".*$/>/' -e 's/^.*"//'`
19
20SERIES=$1
21test -z ${SERIES} && SERIES=unstable
22
23. version.sh || exit $?
24
25DEBIAN_VERSION=`echo ${PACKAGE_VERSION} | sed -e s,_,~,g`~ppa1~${SERIES}
26
27mv debian/changelog changelog_orig || exit $?
28cat > debian/changelog <<EOF
29armagetronad (${DEBIAN_VERSION}) ${SERIES}; urgency=medium
30
31 * Updated to new upstream version
32
33 -- ${MAIL} `date -R`
34
35EOF
36cat changelog_orig >> debian/changelog || exit $?
37
38. `dirname $0`/rebrand_debian_core.sh || exit $?
39
40mv *${PACKAGE_VERSION}.tar.gz ${PACKAGE_NAME}_${DEBIAN_VERSION}.orig.tar.gz || exit $?
41
42mv debian source/ || exit $?
43pushd source || exit $?
44debuild -S -sa || exit $?
45
46# cleanup (no, required for testing)
47#popd
48#rm -rf source
049
=== added file 'docker/build/fakerelease_proto.sh'
--- docker/build/fakerelease_proto.sh 1970-01-01 00:00:00 +0000
+++ docker/build/fakerelease_proto.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,3 @@
1# move to fakerelease.sh in configured directory to enable quick
2# compilation free test builds
3export ARMAGETRONAD_FAKERELEASE=true
04
=== added file 'docker/build/make_ci.sh.in'
--- docker/build/make_ci.sh.in 1970-01-01 00:00:00 +0000
+++ docker/build/make_ci.sh.in 2020-07-03 06:03:19 +0000
@@ -0,0 +1,34 @@
1#!/bin/bash
2
3# Helper script for building, just calls make <args>
4# Optional first argument: -k, keeps intermediate directories
5# (default: delete intermediates)
6
7set -x
8
9keep=false
10if test "$1" = -k; then
11 keep=true
12 shift
13fi
14
15EXIT=0
16
17pushd `dirname $0` || exit $?
18
19# first make run
20if ! make $*; then
21 # try again with better debug output
22 make -d $* || EXIT=$?
23fi
24
25# remove heavy intermediate directories
26if test ${keep} = false; then
27 make artifactclean
28fi
29
30popd
31
32# communicate final make return
33exit ${EXIT}
34
035
=== added file 'docker/build/make_deploy.sh'
--- docker/build/make_deploy.sh 1970-01-01 00:00:00 +0000
+++ docker/build/make_deploy.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,29 @@
1#!/bin/bash
2
3# Helper script for deployment, used form (un)staged_% make targets
4# Usage: make_deploy.sh <target to make>
5# usually, <target to make> will be 'deploy'
6
7set -x
8
9EXIT=0
10
11# first make run
12if ! ${MAKE} $*; then
13 # deployment occasionally fails due to network problems, wait a bit and try again
14 sleep 300
15 if ! ${MAKE} $*; then
16 sleep 900
17 # last run without fancy arguments
18 make $* || EXIT=$?
19 fi
20fi
21
22# reset deployment targets
23rm -f ../deploy/targets.sh
24${MAKE} ../deploy/targets.sh
25
26# communicate final make return
27exit ${EXIT}
28
29
030
=== added file 'docker/build/prepare_context.sh'
--- docker/build/prepare_context.sh 1970-01-01 00:00:00 +0000
+++ docker/build/prepare_context.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,33 @@
1#!/bin/bash
2
3# prepares a context for a docker based build
4# usage: prepare_context.sh <target_dir> <files and directories>
5
6target="$1"
7shift
8
9#echo -e "\e]2;Prepare ${target}\a"
10
11echo -e "\n\n********************************************************************"
12echo -e "Prepare ${target} from $1"
13echo -e "vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n\n"
14
15set -x
16
17rm -rf ${target}
18mkdir -p ${target}
19
20if ! cp -lrf context/version.sh $@ ${target}/; then
21 rm -rf ${target}/version.sh
22 cp -lrf context/version.sh ${target}/ || { rm -rf ${target}; exit 1; }
23
24 for f in $@; do
25 rm -rf ${target}/`basename $f`
26 cp -lrf $f ${target}/ || { rm -rf ${target}; exit 1; }
27 done
28fi
29
30if test -f fakerelease.sh; then
31 rm -rf ${target}/fakerelease.sh
32 cp -lrf fakerelease.sh ${target}/
33fi
034
=== added file 'docker/build/rebrand_debian_core.sh'
--- docker/build/rebrand_debian_core.sh 1970-01-01 00:00:00 +0000
+++ docker/build/rebrand_debian_core.sh 2020-07-03 06:03:19 +0000
@@ -0,0 +1,24 @@
1#/bin/bash
2
3#set -x
4
5
6
7PACKAGE=${PACKAGE_NAME}
8NAME=${PACKAGE_TITLE}
9
10
11pushd debian
12sed -i -e "s/Armagetron Advanced/${NAME}/g" rules
13for f in * man/* bin/* source/*; do
14 dest=$(echo $f | sed -e "s,armagetronad,${PACKAGE},g")
15 if test ! -d $f; then
16 echo $f "->" $dest
17 sed -e "s/armagetronad/${PACKAGE}/g" < $f | sed -e "s/${PACKAGE}\.net/armagetronad.net/g" -e "s/${PACKAGE}\.source/armagetronad.source/g" -e "s/${PACKAGE}-armagetronad/armagetronad-armagetronad/g" > $dest.out
18 rm -f $f $dest
19 mv $dest.out $dest
20 fi
21done
22chmod 755 rules
23popd
24
025
=== added file 'docker/build/setup_ci_test.sh.in'
--- docker/build/setup_ci_test.sh.in 1970-01-01 00:00:00 +0000
+++ docker/build/setup_ci_test.sh.in 2020-07-03 06:03:19 +0000
@@ -0,0 +1,45 @@
1# sets up build environemnt to match CI situation
2
3function test_targets(){
4 . ../deploy/targets.sh
5 echo LP_VERSION=${LP_VERSION}
6 echo SERIES=${SERIES}
7 echo SUFFIX=${SUFFIX}
8 echo SF_DIR=${SF_DIR}
9 echo LP_SERIES=${LP_SERIES}
10 echo ZI_SERIES=${ZI_SERIES}
11 echo STEAM_BRANCH=${STEAM_BRANCH}
12 echo UBUNTU_PPA=${UBUNTU_PPA}
13 echo UPLOAD_SCP${UPLOAD_SCP}
14 echo DOWNLOAD_URI_BASE=${DOWNLOAD_URI_BASE}
15}
16
17if @top_srcdir@/docker/scripts/setup_ci_variables_test.sh $*; then
18 . @top_srcdir@/docker/scripts/setup_ci_variables_test.sh $*
19 . @top_srcdir@/docker/scripts/brand.sh @top_srcdir@
20 pushd @top_builddir@
21 pushd @abs_top_srcdir@
22 ./bootstrap.sh
23 popd
24 @abs_top_srcdir@/configure --disable-glout progname=${PROGRAM_NAME} progtitle="${PROGRAM_TITLE}"
25 popd
26 rm -f CI_INFO
27 make CI_INFO
28 echo ""
29 echo ""
30 echo '****** CI_INFO ********'
31 cat CI_INFO
32 OLD_STAGING=${STAGING}
33 echo ""
34 echo '****** STAGING=true ********'
35 STAGING=true
36 test_targets
37 echo ""
38 echo '****** STAGING=false ********'
39 STAGING=false
40 test_targets
41
42 echo ""
43 STAGING=${OLD_STAGING}
44fi
45
046
=== added directory 'docker/deploy'
=== added file 'docker/deploy/anonymous_secrets.b64'
--- docker/deploy/anonymous_secrets.b64 1970-01-01 00:00:00 +0000
+++ docker/deploy/anonymous_secrets.b64 2020-07-03 06:03:19 +0000
@@ -0,0 +1,104 @@
1QlpoOTFBWSZTWWGRinoADcT/hPiQAQBAG//iP///8H////AAAgAIYBNfb7NNd9PufPe3uu92va77
2d6fW1q29t7yznu689fffa71r1t89e7617fXbMvvfY+e+vb2n3ut9l7X0d3dryvdxviKp41MJiYjC
3aaYEwCMJgExMpQgAIqaYIyYCMmIwgwNGgJjUZNSRA0ephqpkyaYnqZI8EwEwTI0xNDRgmpioAAao
4Qyap7TADSaYIap+pmgxoBMmik0AAaqE8AmyNE1PIJsCaaaB6mRT9MCJIAAahAENGmmnqGj1J6aZT
5NDARop+jRNIT1PU8UtJ+WC/gDtxUipDLEIQA5ymWIQ65SNKpgKEJgIUhHAAlsTALh5Xf7lznHnFL
6nm1he8YrQtc3/FAaInXBjztCKwspm5wf/vWdmBV4v5UQfQ46R+9eZ0EjvUYeaIGmcdelrBfatPGi
7zlhuyHUy2QlCWB98fBxf3Dz8sY/i5loJSSAhiZwIJAVk5S+QFdu3R9u0OaY/+R7QfQqs1/H3upYv
8e8gePI3U7V0exxCYcubWJOT7z1O/Ax5NKFHDBim3aaglT+0Sm7xvn/1UsGUe2sXF9TJP5vxKMnbq
9Wg1AA2bgPwMDbFChVvYA1iarb95h86i3rl3ZLP1/B7MqbD4cVUAtYTnP4O0swKQxFqGUNWh76RLW
10h6p+3eHwaT1muDT+wl0GUTKKU8hSSaQMLXO4iUrz2jn8CTBG6VgewQZJZcoyElsQn/MQKoBk3jF5
11IAkCMmIYEby+/4j0JZmnrcmNNCuXh6jVlLgjpcYy8le2oejmiTOHB7+ZsMGhXlgWudB9ivr3dkBA
12KWgHstX0WkhubAC7plrhG8VFL8vguT4NtRwZY0MkqNiagwYSTjbJwMbg/lS6A4XGQzo+3j6iw/MQ
139Ff0OVeIbGe/rdXb/T901/8/Ze04elAOfR+dHZP6uy1+RLS44KhxGJM4uuGoPDB8/CjxI4RWtaiO
14c1nIQ9bl/tJkCDpyMAgHG/mgq3mO6igiDBiRxE0ORFm9jjeEUf0kWUCM/GAUW3fi7gIFFwv1HBSx
15eTwD4vcWG45bBVrbuDj3M89m4iENP4U6pDT35Ky1x8CiHIsN14cXlAzRokAoU9DRZtYpwCiJnHK6
1684HUEK8rGeANG7NZ5MnJMSZHcJmkOoNH/AGYIqd/tIJBHtStXeHOHA9kHh+R7kRd8eMXJQMm03Wz
172ExxogvzI0WgmRIbZsmwORDEgXsRBItS4gDlNZveESLunzJn/gHmrjmnyy8c1jLI91zPJgmv+r1X
18w5o371jp5xC7pXCivZ/HxZC/jC0PnJ42HEzu77usMqOgzXXg/hG8wJ6SXv+QXTZaiX5K1faPYXW0
194jwIqGv1Rv0sH8neaZQ2P+hOUGxWLrjT9UQsBg3mJURCGvRZjVPtXPPvpD3E0eUm8+zIesXd07xJ
20p6DvJNMBSPdmfxcLcCLr1s/RKN8zfEaH2wtt/HwRR+uj9NnwK97kq6YPjjSHwqubReegLMs1McTr
21GaadwPvxH4b5grzNF0e4xto6BCkdbVdx1XwxrGqnv7L3JX6D32OmwL+65dfIF8nMEOti6sPGvvCf
22zrKZPQKRWnlx0vjshw7KviHAx573dbPSrZq1eCgROIdbTBL4JO7RvvQnYtB9gmfbsIYRxj30ZzdQ
231rFWHBeZpNs6bP2tkEe3nULqoW7q3JI0ewKzJkOhnyzFefZZCUfCX1pPhUVOBspDuo6D8A0H/fBZ
24ylhEqWVfOwcofGe8USnA6vwLH2pR0L03BupPvLeGKxxUXk6ERSidw+1mWGqfgtQeeVc7jzbMl3b1
25i66iiI6zTPfeV/G4XCF3RJU1EkCL9s1AswdFBMCnp+Un6ssereu+WGeOXDFWpKGdQ9LywnIUbV5r
26c7vXqcr8V6XTv9JVgYGLdmoWrOPUOUoPvIoK1reynjVjVnWHjRbzZ71izMMTiGrzU6pQlT67m51I
27BQkbhUk6IS1rVvJBH77MkHjmsmwijxnYIf8KYKxxO7sK2kkIwikpHGoHkH/HdkzQnSXcxGWYwHp+
28cPcHb4qn5IgDMik/IY+i90uyqRGdj1WBlkqDplc231nz5ZQTd5DuKq8dWtI91Z4NI7x7+nctw6Fl
29rlcXeqr+dD/4D8wZMUPry6iWSEgq/IChAX10457GHATQchlPsmaYi8Kl3YUyacZWzaJwTJkeQ7jb
30YQVcU0sLTDTKIu/3mmtbwv0N/f2AM785X0Oe8+D1AMofBI4ZyVSmYL4ac9nq1m0HB8X65fqQWgEf
31k1ENjdoXzrFQj2iz9hoIwJraJK1LAzITPBb87Hxa4CKSqxUQInbp1lLHOeW9twJ/m64h3fA+M7fX
32Ppg+QX5qkh0C2izPBbb4qs84D/4xxRuxjindFOjFFRxISGQMC4Ny8m59MBcHd4sOjlGjiF4WtLp9
33XoSYWjur2nrebbI7AbhfFViEZk7srWF0T5jD+LwnNE2n7ChiSoOiEx4wXkqX8OGc78gwz25z4xP7
340toRQ7hi1M+eXSlSiTRGsSQrcL3jWmSUhl2uQEuMO36fAI26qYBwADIMi19CKi3mkv0vtALdC1vu
35YeT4oMjzvl1NIF0q1VHnUdbQIdIwWa3JXwjzqu+RUmV2gr9T+r5UeWIYaUze2LKJ2GuL+2uiyVB0
36ZZ5b33L0EwJnczRogJxrFBZ1krtrXaIlWzyZ3kvWmsgvUXdELq/T1NFbSpPuZgN4At7FZNTN42Al
379cnyMq3xEQVt8oACKb5yAGkkWmoScx697gt5kN4jcRu8Om4q5Z+0BxItuo54sM2TDaHM6r97Bk4b
38sC5uC9mCylhcmpVTLkVGblu0O5u4ISNwyA7bJED2rK3wUvrK5JxlMhy2BU4IHmKNa5YQ3OXM2iVU
39KGvrL22mZNku8rCpC7PsoMEqHYezJD2cvPsNxCB1bFJVQ+y3FKy1K4Zgf7loCt6mgFCmqJuD21JY
40Dd3q6IoXx8OpG01G3wI5cx2hc1ZT6/GgeII6JyA0nRZiXkdGMDYkE4H5/y6FJIh6C2/UwFaw+iBK
41xpitAgwFzAuxsLLyaB+g3L37jWB4SD41tfDa8jCgIFvCjgcmDX5OYaOhOoNqnvvzSDvpQqD9qvnq
42mHn0q/ThcqLVV+sx0KYp6palpCHpsuNSVA+ZixwbgegSmM5W+4rkSH3ZjEO5wV5v25DJwCFxQDU3
43353B0PVFzjtDNCfAq7Lz4dXCOYrgGxqmipHsBBfqje6Ml+IT+sX3gm1stgkQbmLIbvwG9AsQiaHU
44bQ+D7Lq3cabBfdCGb9tnr4WsnoHuNwRyAr5C+MRr99iB842FXkmsSupIGS9UJQ2Z2rmh6SyDHOEf
45Lolsb4x+TubR8Zera8j+1eY4OpDYhOk2+D1mekqg3DQ0MOlAiTZWT8PNTirJaG9A9ahYvHEDTSyj
46XDqcn183mTWYJWFkE2uQTvenZk9zRGz0sfrspjf2DnWPl9n/WcMcl6PcY3rMJooLBMOrV3fkXzeG
47sWBPD9bO8TSGlA+CquWZxrPZPYL64y+AYhytBONUXR/296AbdM6BgenHpGkld7Zm33EWcRF99MFh
48r4xqgQbV5FxZT6j43NfOixSRivI4+BsyXOMj4VjzYwW8Mb4wTR9/kDNZEzcbgOcp/1U+HoeVwxfD
493nqzBgkQvWt9LLentBrHyobYWv1qVYv9Pv9rj4Qe27hTTIVVynPTtwqVV8pYRskhREkwBVfVzWqR
50tmZSD5hdzQx/q7EOenyBBz2ahLojO518Li+6kpe6qYPYJsNkL7gPlxQftbltckjupn3NwY2JB6Zd
51IWU8HKaRgq6PPaH6m9RRjA8uf5Gsg5BTtcg1wyPupHX2Lk5pb6i51xb5UVRU3vJ3zqUs0JdXN3tO
52jttxvlrKn2kEbC9P2vhaTUN2D3FeUJpiBIzhorZO3oAuwXxO7XmsUUJXH1h65k97KCIqUAciLykR
53W5ib6aI6ZX6GnIXStWiVzWoLX7Fg0ImskpoFrPY1Q9hxc+l/D8t47VEUqIHE7Lz5hMOfWliCl8gn
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches