Merge pull request #166 from Geequlim/4.1 #153
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: 🐧 Linux Builds | ||
on: | ||
workflow_call: | ||
# Global Settings | ||
env: | ||
# Used for the cache key, and godot-cpp checkout. Add version suffix to force clean build. | ||
GODOT_BASE_BRANCH: '4.0' | ||
SCONSFLAGS: verbose=yes warnings=extra werror=yes module_text_server_fb_enabled=yes | ||
DOTNET_NOLOGO: true | ||
DOTNET_CLI_TELEMETRY_OPTOUT: true | ||
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 w/ Mono (target=editor) | ||
cache-name: linux-editor-mono | ||
target: editor | ||
tests: false # Disabled due freeze caused by mix Mono build and CI | ||
sconsflags: module_mono_enabled=yes | ||
doc-test: true | ||
bin: "./bin/godot.linuxbsd.editor.x86_64.mono" | ||
build-mono: true | ||
proj-conv: true | ||
artifact: true | ||
- name: Minimal template (target=template_release, everything disabled) | ||
cache-name: linux-template-minimal | ||
target: template_release | ||
tests: false | ||
sconsflags: modules_enabled_by_default=no disable_3d=yes disable_advanced_gui=yes deprecated=no | ||
steps: | ||
- name: Checkout Godot | ||
uses: actions/checkout@v2 | ||
with: | ||
repository: godotengine/godot | ||
ref: ${{ env.GODOT_BASE_BRANCH }} | ||
- name: Checkout ECMAScript | ||
uses: actions/checkout@v2 | ||
with: | ||
path: ${{github.workspace}}/modules/javascript/ | ||
# Need newer mesa for lavapipe to work properly. | ||
- name: Linux dependencies for tests | ||
if: ${{ matrix.proj-test }} | ||
run: | | ||
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list | ||
sudo add-apt-repository ppa:kisak/kisak-mesa | ||
sudo apt-get install -qq mesa-vulkan-drivers | ||
- 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: Set up .NET Sdk | ||
uses: actions/setup-dotnet@v2 | ||
if: ${{ matrix.build-mono }} | ||
with: | ||
dotnet-version: '6.0.x' | ||
- name: Setup GCC problem matcher | ||
uses: ammaraskar/gcc-problem-matcher@master | ||
- name: Compilation | ||
uses: ./.github/actions/godot-build | ||
with: | ||
sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }} | ||
platform: linuxbsd | ||
target: ${{ matrix.target }} | ||
tests: ${{ matrix.tests }} | ||
- name: Generate C# glue | ||
if: ${{ matrix.build-mono }} | ||
run: | | ||
${{ matrix.bin }} --headless --generate-mono-glue ./modules/mono/glue || true | ||
- name: Build .NET solutions | ||
if: ${{ matrix.build-mono }} | ||
run: | | ||
./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=linuxbsd | ||
# Execute unit tests for the editor | ||
- name: Unit tests | ||
if: ${{ matrix.tests }} | ||
run: | | ||
${{ matrix.bin }} --version | ||
${{ matrix.bin }} --help | ||
${{ matrix.bin }} --test --headless | ||
# 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" | ||
${{ matrix.bin }} --doctool --headless 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$' | ||
# Test 3.x -> 4.x project converter | ||
- name: Test project converter | ||
if: ${{ matrix.proj-conv }} | ||
run: | | ||
mkdir converter_test | ||
cd converter_test | ||
touch project.godot | ||
../${{ matrix.bin }} --headless --validate-conversion-3to4 | ||
cd .. | ||
rm converter_test -rf | ||
# 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/godotengine/regression-test-project/archive/4.0.zip | ||
unzip 4.0.zip | ||
mv "regression-test-project-4.0" "test_project" | ||
# Editor is quite complicated piece of software, so it is easy to introduce bug here | ||
- name: Open and close editor (Vulkan) | ||
if: ${{ matrix.proj-test }} | ||
run: | | ||
xvfb-run ${{ matrix.bin }} --audio-driver Dummy --editor --quit --path test_project 2>&1 | tee sanitizers_log.txt || true | ||
misc/scripts/check_ci_log.py sanitizers_log.txt | ||
- name: Open and close editor (GLES3) | ||
if: ${{ matrix.proj-test }} | ||
run: | | ||
DRI_PRIME=0 xvfb-run ${{ matrix.bin }} --audio-driver Dummy --rendering-driver opengl3 --editor --quit --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: | | ||
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 }} |