Skip to content

Use Github release of the linux buildroot #1280

Use Github release of the linux buildroot

Use Github release of the linux buildroot #1280

Workflow file for this run

name: 🐧 Linux Builds
on:
push:
branches: [ master, github_actions, "1.2" ]
pull_request:
branches: [ master ]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# Global Cache Settings
env:
SCONS_CACHE_LIMIT: 4096
jobs:
linux:
runs-on: "ubuntu-20.04"
name: ${{matrix.name}}
strategy:
matrix:
include:
# --- Check past and future Godot versions ---
- name: 4.0 Editor
precision: single
target: editor
production: no
executable_name: godot.linuxbsd.editor.x86_64
godot_base_branch: "4.0"
# TODO Had to downgrade to less warnings because Godot 4.0 raises warnings in GCC 13.
# To fix this we would have to cherry-pick 41890ff9c3028d3b05d993f8f7ec42c346824304 to the 4.0 branch.
# There might be other issues cropping up, since there doesn't seem to be an official CI checking this.
warnings: all
werror: yes
- name: 4.1 Editor
precision: single
target: editor
production: no
executable_name: godot.linuxbsd.editor.x86_64
godot_base_branch: "4.1"
warnings: extra
werror: yes
- name: 4.2 Editor
precision: single
target: editor
production: no
executable_name: godot.linuxbsd.editor.x86_64
godot_base_branch: "4.2"
warnings: extra
# TODO Had to turn off warning as errors, even though it worked in the past.
# Downgrading warnings to `all` or `moderate` did not fix it.
# Something in Godot 4.2, or in the version of GCC in the buildroot, has changed causing this to happen:
# drivers/gles3/storage/texture_storage.cpp:1513:31: error: 'void* memset(void*, int, size_t)'
# specified bound between 18446744065119617024 and 18446744073709551612 exceeds maximum object size
# [-Werror=stringop-overflow=]
# memset(v_offsets, 0, sizeof(int) * base_size);
# ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Looking at the code, I could not find what's wrong.
werror: no
- name: master Editor
precision: single
target: editor
production: no
executable_name: godot.linuxbsd.editor.x86_64
godot_base_branch: "master"
warnings: extra
werror: yes
# --- Builds with artifacts ---
- name: 4.3 Editor
precision: single
target: editor
production: yes
executable_name: godot.linuxbsd.editor.x86_64
godot_base_branch: "4.3-stable"
warnings: extra
werror: yes
- name: 4.3 Template
precision: single
target: template_release
production: yes
executable_name: godot.linuxbsd.template_release.x86_64
godot_base_branch: "4.3-stable"
warnings: extra
werror: yes
- name: 4.3 Editor Float64
precision: double
target: editor
production: yes
executable_name: godot.linuxbsd.editor.double.x86_64
godot_base_branch: "4.3-stable"
warnings: extra
werror: yes
steps:
# Clone Godot
- uses: actions/checkout@v4
with:
repository: godotengine/godot
ref: ${{ matrix.godot_base_branch }}
# Clone our module under the correct directory
- uses: actions/checkout@v4
with:
path: modules/voxel
# Setup custom buildroot so we may use an old but compatible GLIBC version, while keeping recent toolchain.
# This allows to make production builds that are compatible with older Linux distros.
# TODO Enhancement: cache buildroot so future runs can use it?
# TODO Enhancement: make buildroot setup a self-contained step. There are bits of setup elsewhere.
# Currently I also setup `PATH` in the Compilation step because modifications
# do not persist between steps (?). I also placed this step after checkout because the checkout step changes
# the working directory for all following steps.
- name: Setup buildroot
run: |
wget https://github.com/godotengine/buildroot/releases/download/godot-2023.08.x-4/x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2
tar -xjf x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2
cd x86_64-godot-linux-gnu_sdk-buildroot
./relocate-sdk.sh
cd ..
# [Already provided by the custom buildroot]
# Azure repositories are not reliable, we need to prevent azure giving us packages.
# - name: Make apt sources.list use the default Ubuntu repositories
# run: |
# sudo rm -f /etc/apt/sources.list.d/*
# sudo cp -f misc/ci/sources.list /etc/apt/sources.list
# sudo apt-get update
# [Already provided by the custom buildroot]
# Install all packages (except scons)
# - name: Configure dependencies
# run: |
# sudo apt-get install build-essential pkg-config libx11-dev libxcursor-dev \
# libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev yasm
# Upload cache on completion and check it out now
- name: Load .scons_cache directory
id: linux-cache
uses: actions/cache@v4
with:
path: ${{github.workspace}}/.scons_cache/
key: ${{matrix.executable_name}}-${{matrix.godot_base_branch}}-${{github.ref}}-${{github.sha}}
restore-keys: |
${{matrix.executable_name}}-${{matrix.godot_base_branch}}-${{github.ref}}-${{github.sha}}
${{matrix.executable_name}}-${{matrix.godot_base_branch}}-${{github.ref}}
${{matrix.executable_name}}-${{matrix.godot_base_branch}}
# [Already provided by the custom buildroot]
# Use python 3.x release (works cross platform; best to keep self contained in it's own step)
# - name: Set up Python 3.x
# uses: actions/setup-python@v5
# with:
# # Semantic version range syntax or exact version of a Python version
# python-version: '3.x'
# # Optional - x64 or x86 architecture, defaults to x64
# architecture: 'x64'
# [Already provided by the custom buildroot]
# Setup scons, print python version and scons version info, so if anything is broken it won't run the build.
# - name: Configuring Python packages
# run: |
# python -c "import sys; print(sys.version)"
# python -m pip install scons
# python --version
# scons --version
# We should always be explicit with our flags usage here since it's gonna be sure to always set those flags
- name: Compilation
env:
SCONS_CACHE: ${{github.workspace}}/.scons_cache/
run: |
PATH=${GITHUB_WORKSPACE}/x86_64-godot-linux-gnu_sdk-buildroot/bin:$PATH
scons verbose=yes warnings=${{matrix.warnings}} werror=${{matrix.werror}} platform=linuxbsd tests=no dev_build=no target=${{matrix.target}} production=${{matrix.production}} precision=${{matrix.precision}}
# Make build available
- uses: actions/upload-artifact@v4
if: ${{ matrix.production == 'yes' }}
with:
name: ${{matrix.executable_name}}
path: bin/${{matrix.executable_name}}