name: linux # build on c/cpp changes or workflow changes on: push: paths: - 'lib/**.[ch]' - 'lib/**.cpp' - 'src/**.[ch]' - 'src/**.cpp' - 'irr/**.[ch]' - 'irr/**.cpp' - '**/CMakeLists.txt' - 'cmake/Modules/**' - 'po/**.po' - 'util/ci/**' - 'util/helper_mod/**' - '.github/workflows/linux.yml' pull_request: paths: - 'lib/**.[ch]' - 'lib/**.cpp' - 'src/**.[ch]' - 'src/**.cpp' - 'irr/**.[ch]' - 'irr/**.cpp' - '**/CMakeLists.txt' - 'cmake/Modules/**' - 'po/**.po' - 'util/ci/**' - 'util/helper_mod/**' - '.github/workflows/linux.yml' env: MINETEST_POSTGRESQL_CONNECT_STRING: 'host=localhost user=minetest password=minetest dbname=minetest' jobs: # Older gcc version (should be close to our minimum supported version) gcc_9: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Install deps run: | source ./util/ci/common.sh install_linux_deps g++-9 - name: Build run: | ./util/ci/build.sh env: CC: gcc-9 CXX: g++-9 CMAKE_FLAGS: '-DCMAKE_C_FLAGS="-fsanitize=address" -DCMAKE_CXX_FLAGS="-fsanitize=address"' - name: Unittest run: | ./bin/luanti --run-unittests # Do this here because we have ASan and error paths are sensitive to dangling pointers - name: Test error cases run: | ./util/test_error_cases.sh # Current gcc version gcc_14: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - name: Install deps run: | source ./util/ci/common.sh install_linux_deps g++-14 libluajit-5.1-dev - name: Build run: | ./util/ci/build.sh env: CC: gcc-14 CXX: g++-14 # just to check that they compile correctly CMAKE_FLAGS: '-DBUILD_BENCHMARKS=1' - name: Test run: | mkdir nowrite chmod a-w nowrite cd nowrite ../bin/luanti --run-unittests # Older clang version (should be close to our minimum supported version) clang_11: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Install deps run: | source ./util/ci/common.sh install_linux_deps clang-11 - name: Build run: | ./util/ci/build.sh env: CC: clang-11 CXX: clang++-11 # Test fallback SHA implementations CMAKE_FLAGS: '-DENABLE_OPENSSL=0' - name: Test run: | ./bin/luanti --run-unittests # Current clang version clang_18: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - name: Install deps run: | source ./util/ci/common.sh install_linux_deps clang-18 lldb - name: Build run: | ./util/ci/build.sh env: CC: clang-18 CXX: clang++-18 - name: Test run: | ./bin/luanti --run-unittests - name: Integration test + devtest run: | ./util/test_multiplayer.sh # Build with prometheus-cpp (server-only), also runs on ARM64 clang_prometheus_arm: name: "clang (with Prometheus, ARM64)" runs-on: ubuntu-24.04-arm steps: - uses: actions/checkout@v4 - name: Install deps run: | source ./util/ci/common.sh install_linux_deps --headless clang libluajit-5.1-dev - name: Build prometheus-cpp run: ./util/ci/build_prometheus_cpp.sh - name: Build run: | ./util/ci/build.sh env: CC: clang CXX: clang++ CMAKE_FLAGS: "-DENABLE_PROMETHEUS=1 -DBUILD_CLIENT=0 -DENABLE_CURSES=0" - name: Test run: | ./bin/luantiserver --run-unittests