@@ -15,14 +15,14 @@ jobs:
1515 strategy :
1616 fail-fast : false
1717 matrix :
18- os : [ubuntu-latest, macOS-latest, windows-latest, ubuntu-20 .04]
18+ os : [ubuntu-latest, macOS-latest, windows-latest, ubuntu-22 .04]
1919 include :
2020 - os : ubuntu-latest
2121 cmake-args : -G Ninja
2222 cmake-init-env : CXXFLAGS=-Werror
2323 package-file : " *-linux_x86_64.tar.xz"
2424 fancy : true
25- - os : ubuntu-20 .04
25+ - os : ubuntu-22 .04
2626 cmake-path : /usr/bin/
2727 cmake-args : -G Ninja -DTEST_MYSQL=ON
2828 cmake-init-env : CXXFLAGS=-Werror
3535 package-file : " *-macos.dmg"
3636 fancy : false
3737 - os : windows-latest
38- cmake-args : -A x64
38+ cmake-args : -A x64 -DEXCEPTION_HANDLING=ON
3939 cmake-init-env : CXXFLAGS=/WX LDFLAGS=/WX
4040 package-file : " *-win64.zip"
4141 fancy : false
@@ -51,11 +51,13 @@ jobs:
5151 sudo apt-get update -y
5252 # mount: /var/lib/grub/esp: special device /dev/disk/by-id/scsi-... does not exist.
5353 # sudo apt-get upgrade -y
54- sudo apt-get install pkg-config cmake ninja-build libfreetype6-dev libnotify-dev libsdl2-dev libsqlite3-dev libvulkan-dev glslang-tools spirv-tools libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev libx264-dev libpng-dev valgrind gcovr -y
54+ sudo apt-get install pkg-config ninja-build libfreetype6-dev libnotify-dev libsdl2-dev libsqlite3-dev libvulkan-dev glslang-tools spirv-tools libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev libx264-dev libpng-dev valgrind gcovr libglew-dev -y
5555
5656 - name : Prepare Linux (non-fancy)
5757 if : ${{ contains(matrix.os, 'ubuntu') && !matrix.fancy }}
5858 run : |
59+ curl -LO https://github.com/Kitware/CMake/releases/download/v3.13.4/cmake-3.13.4-Linux-x86_64.tar.gz
60+ sudo tar --strip-components 1 -C /usr -xf cmake-3.13.4-Linux-x86_64.tar.gz
5961 # Our minimum supported Rust version (MSRV)
6062 rustup default 1.63.0
6163 sudo rm -rf /var/lib/mysql/ /var/run/mysqld
7476 - name : Prepare Linux (fancy)
7577 if : contains(matrix.os, 'ubuntu') && matrix.fancy
7678 run : |
77- sudo apt-get install libmariadb-dev libwebsockets-dev mariadb-server -y
79+ sudo apt-get install cmake libmariadb-dev libwebsockets-dev mariadb-server -y
7880 sudo systemctl stop mysql
7981 sudo rm -rf /var/lib/mysql/
8082 sudo mysql_install_db --user=mysql --datadir=/var/lib/mysql/
9193 if : contains(matrix.os, 'macOS')
9294 run : |
9395 brew update || true
94- brew install pkg-config sdl2 ffmpeg ninja molten-vk vulkan-headers glslang spirv-tools || true
96+ brew install pkg-config sdl2 ffmpeg ninja molten-vk vulkan-headers glslang spirv-tools rust || true
9597 brew upgrade freetype
9698 pip3 install --break-system-packages dmgbuild
9799 echo /Library/Frameworks/Python.framework/Versions/3.12/bin >> $GITHUB_PATH
@@ -100,10 +102,23 @@ jobs:
100102 - name : Cache Rust dependencies
101103 uses : Swatinem/rust-cache@v2
102104
105+ - name : Build mastersrv
106+ if : " !contains(matrix.os, 'ubuntu-22.04')"
107+ run : |
108+ cd src/mastersrv
109+ cargo build
110+
111+ - name : Build masterping
112+ if : " !contains(matrix.os, 'ubuntu-22.04')"
113+ run : |
114+ cd src/masterping
115+ cargo build
116+
103117 - name : Build in debug mode
104118 run : |
105119 mkdir debug
106120 cd debug
121+ ${{ matrix.cmake-path }}cmake --version
107122 ${{ matrix.cmake-path }}cmake -E env ${{ matrix.cmake-init-env }} ${{ matrix.cmake-path }}cmake ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=Debug -Werror=dev -DDOWNLOAD_GTEST=ON -DDEV=ON -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG=. ..
108123 ${{ matrix.cmake-path }}cmake --build . --config Debug --target everything ${{ matrix.build-args }}
109124
@@ -139,7 +154,6 @@ jobs:
139154 run : |
140155 mkdir headless
141156 cd headless
142- ${{ matrix.cmake-path }}cmake --version
143157 ${{ matrix.cmake-path }}cmake -E env CXXFLAGS="--coverage -Werror" ${{ matrix.cmake-path }}cmake -E env LDFLAGS="--coverage -Werror" ${{ matrix.cmake-path }}cmake ${{ matrix.cmake-args }} -DHEADLESS_CLIENT=ON -DCMAKE_BUILD_TYPE=Debug -Werror=dev -DDOWNLOAD_GTEST=ON -DDEV=ON -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG=. ..
144158 ${{ matrix.cmake-path }}cmake -E env RUSTFLAGS="-Clink-arg=--coverage" ${{ matrix.cmake-path }}cmake --build . --config Debug ${{ matrix.build-args }}
145159
@@ -155,21 +169,6 @@ jobs:
155169 with :
156170 flags : unittests
157171
158- - name : Test headless client (start & connect)
159- if : contains(matrix.os, 'ubuntu-latest')
160- run : |
161- cd headless
162- # Remove old coverage data:
163- find . -name '*.gcno' -o -name '*.gcda' -delete
164- ./DDNet-Server &
165- ./DDNet "cl_download_skins 0;connect localhost:8303;quit"
166-
167- - name : Upload Codecov report (start & connect)
168- if : contains(matrix.os, 'ubuntu-latest')
169- uses : codecov/codecov-action@v4
170- with :
171- flags : startconnect
172-
173172 - name : Build in release mode with debug info and all features on
174173 if : matrix.fancy
175174 run : |
@@ -193,10 +192,10 @@ jobs:
193192 - name : Run integration tests with Valgrind's Memcheck
194193 if : contains(matrix.os, 'ubuntu-latest')
195194 run : |
196- cd headless
197195 # Remove old coverage data:
198- find . -name '*.gcno' -o -name '*.gcda' -delete
199- ./integration_test.sh --valgrind-memcheck
196+ find headless -name '*.gcno' -o -name '*.gcda' -delete
197+ cp src/mastersrv/target/debug/mastersrv headless
198+ python scripts/integration_test.py --test-mastersrv --valgrind-memcheck headless
200199
201200 - name : Upload Codecov report (integration tests)
202201 if : contains(matrix.os, 'ubuntu-latest')
@@ -216,3 +215,70 @@ jobs:
216215 with :
217216 name : ddnet-${{ matrix.os }}
218217 path : release/artifacts
218+
219+ build-android :
220+ runs-on : ubuntu-24.04
221+ env :
222+ CARGO_HTTP_MULTIPLEXING : false
223+ steps :
224+ - uses : actions/checkout@v4
225+ with :
226+ submodules : true
227+
228+ - name : Validate Gradle Wrapper
229+ uses : gradle/actions/wrapper-validation@v4
230+
231+ - name : Prepare Linux
232+ run : |
233+ sudo apt-get update -y
234+ sudo apt-get install cmake ninja-build openjdk-21-jdk p7zip-full curl glslang-tools openssl
235+ cargo install cargo-ndk
236+ rustup target add armv7-linux-androideabi
237+ rustup target add i686-linux-android
238+ rustup target add aarch64-linux-android
239+ rustup target add x86_64-linux-android
240+ mkdir ~/Android
241+ cd ~/Android
242+ mkdir Sdk
243+ cd Sdk
244+ mkdir ndk
245+ cd ndk
246+ wget --quiet https://dl.google.com/android/repository/android-ndk-r26d-linux.zip
247+ unzip android-ndk-r26d-linux.zip
248+ rm android-ndk-r26d-linux.zip
249+ cd ~/Android/Sdk
250+ mkdir build-tools
251+ cd build-tools
252+ wget --quiet https://dl.google.com/android/repository/build-tools_r30.0.3-linux.zip
253+ unzip build-tools_r30.0.3-linux.zip
254+ rm build-tools_r30.0.3-linux.zip
255+ mv android-11 30.0.3
256+ cd ~/Android/Sdk
257+ mkdir cmdline-tools
258+ cd cmdline-tools
259+ wget --quiet https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
260+ unzip commandlinetools-linux-11076708_latest.zip
261+ rm commandlinetools-linux-11076708_latest.zip
262+ mv cmdline-tools latest
263+ yes | latest/bin/sdkmanager --licenses
264+
265+ - name : Cache Rust dependencies
266+ uses : Swatinem/rust-cache@v2
267+
268+ - name : Build Android app
269+ env :
270+ TW_KEY_NAME : /home/runner/DDNet.jks
271+ TW_KEY_ALIAS : DDNet-Key
272+ run : |
273+ export TW_KEY_PW="$(openssl rand -base64 32)"
274+ keytool -genkey -v -keystore "$TW_KEY_NAME" -keyalg RSA -keysize 2048 -validity 10000 -alias "$TW_KEY_ALIAS" -storepass "$TW_KEY_PW" -dname "CN=DDNet CI, OU=DDNet, O=DDNet"
275+ mkdir build-android
276+ scripts/android/cmake_android.sh all DDNet org.ddnet.client Release build-android
277+ mkdir artifacts
278+ mv build-android/DDNet.apk artifacts
279+
280+ - name : Upload Artifacts
281+ uses : actions/upload-artifact@v4
282+ with :
283+ name : ddnet-android
284+ path : artifacts
0 commit comments