release-linux #6
Workflow file for this run
This file contains hidden or 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: release-linux | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| permissions: | |
| contents: write | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| env: | |
| LINUX_DESKTOP_FEATURES: gb-desktop/sdl3-build-from-source | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| - name: Install SDL3 build dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| libasound2-dev \ | |
| libdbus-1-dev \ | |
| libdecor-0-dev \ | |
| libdrm-dev \ | |
| libegl1-mesa-dev \ | |
| libgbm-dev \ | |
| libgl1-mesa-dev \ | |
| libgles2-mesa-dev \ | |
| libibus-1.0-dev \ | |
| libpipewire-0.3-dev \ | |
| libpulse-dev \ | |
| libudev-dev \ | |
| libwayland-dev \ | |
| libx11-dev \ | |
| libxcursor-dev \ | |
| libxext-dev \ | |
| libxfixes-dev \ | |
| libxi-dev \ | |
| libxkbcommon-dev \ | |
| libxrandr-dev \ | |
| libxss-dev \ | |
| libxtst-dev \ | |
| liburing-dev \ | |
| patchelf \ | |
| wayland-protocols | |
| - name: Setup Rust | |
| uses: actions-rust-lang/setup-rust-toolchain@v1 | |
| - name: Cache Rust artifacts | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Build desktop release | |
| run: cargo build --profile release-max -p gb-desktop --features "${LINUX_DESKTOP_FEATURES}" | |
| - name: Package Linux binary | |
| run: | | |
| set -euo pipefail | |
| shopt -s nullglob | |
| package_name="gb-cycle-linux-x86_64" | |
| package_dir="dist/${package_name}" | |
| tar_path="dist/${package_name}.tar.gz" | |
| rm -rf "${package_dir}" "${tar_path}" | |
| mkdir -p "${package_dir}" | |
| cp target/release-max/gb-desktop "${package_dir}/" | |
| cp README.md LICENSE-MIT LICENSE-APACHE "${package_dir}/" | |
| sdl_libs=() | |
| sdl_lib_names=() | |
| while IFS= read -r sdl_lib; do | |
| sdl_name="$(basename "${sdl_lib}")" | |
| sdl_seen=false | |
| for existing_name in "${sdl_lib_names[@]}"; do | |
| if [[ "${existing_name}" == "${sdl_name}" ]]; then | |
| sdl_seen=true | |
| break | |
| fi | |
| done | |
| if [[ "${sdl_seen}" == false ]]; then | |
| sdl_lib_names+=("${sdl_name}") | |
| sdl_libs+=("${sdl_lib}") | |
| fi | |
| done < <( | |
| find target/release-max \( -type f -o -type l \) -name 'libSDL3*.so*' -print | | |
| sort -u | |
| ) | |
| if ((${#sdl_libs[@]} > 0)); then | |
| cp "${sdl_libs[@]}" "${package_dir}/" | |
| patchelf --set-rpath '$ORIGIN' "${package_dir}/gb-desktop" | |
| else | |
| ldd_output="$(ldd "${package_dir}/gb-desktop" 2>&1 || true)" | |
| if grep -q 'libSDL3' <<<"${ldd_output}"; then | |
| printf '%s\n' "${ldd_output}" | |
| echo "gb-desktop dynamically links SDL3 but no bundled libSDL3 shared object was emitted" >&2 | |
| exit 1 | |
| fi | |
| fi | |
| chmod +x "${package_dir}/gb-desktop" | |
| "${package_dir}/gb-desktop" --help | |
| tar -C dist -czf "${tar_path}" "${package_name}" | |
| - name: Upload Linux package artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: gb-cycle-linux-x86_64 | |
| path: dist/gb-cycle-linux-x86_64.tar.gz | |
| - name: Upload Linux package release asset | |
| if: startsWith(github.ref, 'refs/tags/') | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| files: dist/gb-cycle-linux-x86_64.tar.gz |