name: 🐧 Linux Builds on: [push, pull_request] # Global Settings env: GODOT_BASE_BRANCH: master SCONSFLAGS: verbose=yes warnings=extra werror=yes debug_symbols=no module_text_server_fb_enabled=yes concurrency: group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-linux cancel-in-progress: true jobs: build-linux: runs-on: "ubuntu-20.04" name: ${{ matrix.name }} strategy: fail-fast: false matrix: include: - name: Editor (target=release_debug, tools=yes, tests=yes) cache-name: linux-editor target: release_debug tools: true tests: true sconsflags: "" doc-test: true bin: "./bin/godot.linuxbsd.opt.tools.64" artifact: true - name: Editor and sanitizers (target=debug, tools=yes, tests=yes, use_asan=yes, use_ubsan=yes) cache-name: linux-editor-sanitizers target: debug tools: true tests: true sconsflags: use_asan=yes use_ubsan=yes proj-test: true bin: "./bin/godot.linuxbsd.tools.64s" # Skip 2GiB artifact speeding up action. artifact: false - name: Template w/ Mono (target=release, tools=no) cache-name: linux-template-mono target: release tools: false tests: false sconsflags: module_mono_enabled=yes mono_glue=no artifact: true steps: - uses: actions/checkout@v2 - name: Linux dependencies shell: bash run: | # Azure repositories are not reliable, we need to prevent azure giving us packages. sudo rm -f /etc/apt/sources.list.d/* sudo cp -f misc/ci/sources.list /etc/apt/sources.list sudo apt-get update # The actual dependencies sudo apt-get install build-essential pkg-config libx11-dev libxcursor-dev \ libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev \ libdbus-1-dev libudev-dev libxi-dev libxrandr-dev yasm xvfb wget unzip - name: Setup Godot build cache uses: ./.github/actions/godot-cache with: cache-name: ${{ matrix.cache-name }} continue-on-error: true - name: Setup python and scons uses: ./.github/actions/godot-deps - name: Compilation uses: ./.github/actions/godot-build with: sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }} platform: linuxbsd target: ${{ matrix.target }} tools: ${{ matrix.tools }} tests: ${{ matrix.tests }} # Execute unit tests for the editor - name: Unit tests if: ${{ matrix.tests }} run: | ${{ matrix.bin }} --test # Download, unzip and setup SwiftShader library [4466040] - name: Download SwiftShader if: ${{ matrix.tests }} run: | wget https://github.com/qarmin/gtk_library_store/releases/download/3.24.0/swiftshader2.zip unzip swiftshader2.zip rm swiftshader2.zip curr="$(pwd)/libvk_swiftshader.so" sed -i "s|PATH_TO_CHANGE|$curr|" vk_swiftshader_icd.json # Check class reference - name: Check for class reference updates if: ${{ matrix.doc-test }} run: | echo "Running --doctool to see if this changes the public API without updating the documentation." echo -e "If a diff is shown, it means that your code/doc changes are incomplete and you should update the class reference with --doctool.\n\n" VK_ICD_FILENAMES=$(pwd)/vk_swiftshader_icd.json DRI_PRIME=0 xvfb-run ${{ matrix.bin }} --doctool . 2>&1 > /dev/null || true git diff --color --exit-code && ! git ls-files --others --exclude-standard | sed -e 's/^/New doc file missing in PR: /' | grep 'xml$' # Download and extract zip archive with project, folder is renamed to be able to easy change used project - name: Download test project if: ${{ matrix.proj-test }} run: | wget https://github.com/qarmin/RegressionTestProject/archive/4.0.zip unzip 4.0.zip mv "RegressionTestProject-4.0" "test_project" # Editor is quite complicated piece of software, so it is easy to introduce bug here - name: Open and close editor if: ${{ matrix.proj-test }} run: | VK_ICD_FILENAMES=$(pwd)/vk_swiftshader_icd.json DRI_PRIME=0 xvfb-run ${{ matrix.bin }} --audio-driver Dummy -e -q --path test_project 2>&1 | tee sanitizers_log.txt || true misc/scripts/check_ci_log.py sanitizers_log.txt # Run test project - name: Run project if: ${{ matrix.proj-test }} run: | VK_ICD_FILENAMES=$(pwd)/vk_swiftshader_icd.json DRI_PRIME=0 xvfb-run ${{ matrix.bin }} 40 --audio-driver Dummy --path test_project 2>&1 | tee sanitizers_log.txt || true misc/scripts/check_ci_log.py sanitizers_log.txt - name: Upload artifact uses: ./.github/actions/upload-artifact if: ${{ matrix.artifact }} with: name: ${{ matrix.cache-name }}