Skip to content

release-linux

release-linux #6

Workflow file for this run

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