ddnet/.github/workflows/build.yaml

193 lines
6.8 KiB
YAML
Raw Normal View History

2020-01-23 15:01:52 +00:00
name: Build
2020-06-30 23:50:40 +00:00
on:
push:
branches-ignore:
- staging.tmp
- trying.tmp
- staging-squash-merge.tmp
pull_request:
2020-01-23 15:01:52 +00:00
jobs:
build-cmake:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
2020-01-23 15:01:52 +00:00
matrix:
2022-03-20 17:04:00 +00:00
os: [ubuntu-latest, macOS-latest, windows-latest, ubuntu-20.04]
2020-01-23 15:01:52 +00:00
include:
- os: ubuntu-latest
2022-02-14 21:34:43 +00:00
cmake-args: -G Ninja
2021-12-12 10:40:39 +00:00
package-file: "*-linux_x86_64.tar.xz"
fancy: true
2020-01-23 15:01:52 +00:00
env:
CFLAGS: -Wdeclaration-after-statement -Werror
CXXFLAGS: -Werror
2022-03-20 17:04:00 +00:00
- os: ubuntu-20.04
2020-01-23 15:01:52 +00:00
cmake-path: /usr/bin/
cmake-args: -G Ninja -DTEST_MYSQL=ON
2021-12-12 10:40:39 +00:00
package-file: "*-linux_x86_64.tar.xz"
fancy: false
2020-01-23 15:01:52 +00:00
env:
CFLAGS: -Wdeclaration-after-statement -Werror
CXXFLAGS: -Werror
GTEST_FILTER: -*SQLite*
2020-01-23 15:01:52 +00:00
- os: macOS-latest
2022-02-14 21:34:43 +00:00
cmake-args: -G Ninja
2021-12-12 10:40:39 +00:00
package-file: "*-macos.dmg"
fancy: false
2020-01-23 15:01:52 +00:00
env:
CFLAGS: -Wdeclaration-after-statement -Werror
CXXFLAGS: -Werror
- os: windows-latest
cmake-args: -A x64
2021-12-12 10:40:39 +00:00
package-file: "*-win64.zip"
fancy: false
2020-01-23 15:01:52 +00:00
env:
CFLAGS: /WX
CXXFLAGS: /WX
LDFLAGS: /WX
steps:
- uses: actions/checkout@v2
2020-09-19 19:16:10 +00:00
with:
submodules: true
2020-01-23 15:01:52 +00:00
- name: Prepare Linux
if: contains(matrix.os, 'ubuntu')
run: |
sudo apt-get update -y
sudo apt-get upgrade -y
2022-05-26 12:28:55 +00:00
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 valgrind -y
2020-01-23 15:01:52 +00:00
- name: Prepare Linux (non-fancy)
if: ${{ contains(matrix.os, 'ubuntu') && !matrix.fancy }}
run: |
sudo rm -rf /var/lib/mysql/ /var/run/mysqld
sudo mkdir /var/lib/mysql/ /var/run/mysqld/
sudo chown mysql:mysql /var/lib/mysql/ /var/run/mysqld/
sudo mysqld --initialize-insecure --user=mysql --basedir=/usr --datadir=/var/lib/mysql/
sudo /usr/bin/mysqld_safe --basedir=/usr --datadir='/var/lib/mysql/' &
sleep 10
sudo mysql <<EOF
CREATE DATABASE ddnet;
CREATE USER 'ddnet'@'localhost' IDENTIFIED BY 'thebestpassword';
GRANT ALL PRIVILEGES ON ddnet.* TO 'ddnet'@'localhost';
FLUSH PRIVILEGES;
EOF
- name: Prepare Linux (fancy)
if: contains(matrix.os, 'ubuntu') && matrix.fancy
run: |
sudo apt-get install libmariadbclient-dev libwebsockets-dev mariadb-server-10.3 -y
2021-11-28 00:41:10 +00:00
sudo rm -rf /var/lib/mysql/
sudo mysql_install_db --user=mysql --datadir=/var/lib/mysql/
cd /usr; sudo mysqld_safe --datadir='/var/lib/mysql/' --no-watch
2021-11-28 00:41:10 +00:00
sleep 10
sudo mysql <<EOF
2021-11-28 00:41:10 +00:00
CREATE DATABASE ddnet;
CREATE USER 'ddnet'@'localhost' IDENTIFIED BY 'thebestpassword';
GRANT ALL PRIVILEGES ON ddnet.* TO 'ddnet'@'localhost';
FLUSH PRIVILEGES;
EOF
2021-07-08 07:08:08 +00:00
- name: Prepare macOS
2020-01-23 15:01:52 +00:00
if: contains(matrix.os, 'macOS')
run: |
brew update || true
2022-03-20 17:04:00 +00:00
brew install pkg-config sdl2 ffmpeg python3 ninja molten-vk vulkan-headers glslang spirv-tools
2020-06-24 09:51:32 +00:00
brew upgrade freetype
pip3 install dmgbuild
2020-05-01 08:31:30 +00:00
sudo rm -rf /Library/Developer/CommandLineTools
2020-01-23 15:01:52 +00:00
- name: Build in debug mode
env: ${{ matrix.env }}
run: |
mkdir debug
cd debug
${{ matrix.cmake-path }}cmake --version
${{ matrix.cmake-path }}cmake ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=Debug -Werror=dev -DDOWNLOAD_GTEST=ON -DDEV=ON -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG=. ..
${{ matrix.cmake-path }}cmake --build . --config Debug --target everything ${{ matrix.build-args }}
2020-01-23 15:01:52 +00:00
- name: Test debug
env: ${{ matrix.env }}
2020-01-23 15:01:52 +00:00
run: |
cd debug
${{ matrix.cmake-path }}cmake --build . --config Debug --target run_tests ${{ matrix.build-args }}
- name: Run debug server
env: ${{ matrix.env }}
run: |
cd debug
2020-01-23 15:01:52 +00:00
./DDNet-Server shutdown
- name: Build in release mode
env: ${{ matrix.env }}
run: |
mkdir release
cd release
${{ matrix.cmake-path }}cmake ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=Release -Werror=dev -DDOWNLOAD_GTEST=ON -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=. ..
${{ matrix.cmake-path }}cmake --build . --config Release --target everything ${{ matrix.build-args }}
2020-01-23 15:01:52 +00:00
- name: Test release
env: ${{ matrix.env }}
2020-01-23 15:01:52 +00:00
run: |
cd release
${{ matrix.cmake-path }}cmake --build . --config Release --target run_tests ${{ matrix.build-args }}
- name: Run release server
env: ${{ matrix.env }}
run: |
cd release
2020-01-23 15:01:52 +00:00
./DDNet-Server shutdown
2021-09-30 09:48:44 +00:00
- name: Build headless client
env: ${{ matrix.env }}
run: |
mkdir headless
cd headless
${{ matrix.cmake-path }}cmake --version
${{ 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=. ..
${{ matrix.cmake-path }}cmake --build . --config Debug ${{ matrix.build-args }}
- name: Test headless client
run: |
cd headless
./DDNet-Server &
./DDNet "cl_download_skins 0;connect localhost:8303;quit"
- name: Build in release mode with debug info and all features on
if: matrix.fancy
env: ${{ matrix.env }}
run: |
mkdir fancy
cd fancy
${{ matrix.cmake-path }}cmake ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DDOWNLOAD_GTEST=ON -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=. -DANTIBOT=ON -DWEBSOCKETS=ON ..
${{ matrix.cmake-path }}cmake --build . --config RelWithDebInfo --target everything ${{ matrix.build-args }}
- name: Test fancy
if: matrix.fancy
env: ${{ matrix.env }}
run: |
2021-11-28 15:05:57 +00:00
cd fancy
${{ matrix.cmake-path }}cmake --build . --config RelWithDebInfo --target run_tests ${{ matrix.build-args }}
2022-05-26 12:28:55 +00:00
- name: Run fancy server
if: matrix.fancy
env: ${{ matrix.env }}
run: |
cd fancy
./DDNet-Server shutdown
2022-05-26 12:28:55 +00:00
- name: Run integration tests with Valgrind's Memcheck
if: contains(matrix.os, 'ubuntu')
run: |
scripts/integration_test.sh --valgrind-memcheck headless
2020-01-23 15:01:52 +00:00
- name: Package
run: |
cd release
${{ matrix.cmake-path }}cmake --build . --config Release --target package_default ${{ matrix.build-args }}
2020-01-23 15:01:52 +00:00
mkdir artifacts
mv ${{ matrix.package-file }} artifacts
- name: Upload Artifacts
uses: actions/upload-artifact@v1
with:
name: ddnet-${{ matrix.os }}
path: release/artifacts