Avoid background title updates when no shell window list is visible, and skip output and capture invalidation for titles outside compositor decorations. Preserve focused titles, fresh window lists and capture privacy. Request high EGL context priority with fallback, cover rendering and native title behavior in CI, and keep audio recording flowing while video capture is idle.
129 lines
6.3 KiB
YAML
129 lines
6.3 KiB
YAML
name: Workspace and native stability checks
|
|
on:
|
|
workflow_dispatch:
|
|
permissions:
|
|
contents: read
|
|
concurrency:
|
|
group: workspace-checks-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
jobs:
|
|
workspace:
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 60
|
|
env:
|
|
CARGO_BUILD_JOBS: "2"
|
|
CARGO_INCREMENTAL: "0"
|
|
CARGO_PROFILE_DEV_DEBUG: "0"
|
|
CARGO_PROFILE_TEST_DEBUG: "0"
|
|
XDG_RUNTIME_DIR: /tmp/ferese-workspace-runtime
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Install workspace build and test dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y build-essential pkg-config dbus-daemon libwayland-dev \
|
|
libxkbcommon-dev xkb-data libinput-dev libudev-dev libseat-dev libgbm-dev \
|
|
python3-gi python3-pil libegl-dev libegl-mesa0 libgl1-mesa-dri mesa-vulkan-drivers libdrm-dev libfontconfig1-dev libfreetype-dev libexpat1-dev xauth \
|
|
clang libclang-dev libpipewire-0.3-dev libspa-0.2-dev libglib2.0-dev libgstreamer1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good libpam-modules
|
|
- name: Create private test runtime directory
|
|
run: install -d -m 0700 "$XDG_RUNTIME_DIR"
|
|
- name: Install Rust
|
|
run: rustup toolchain install 1.95.0 --profile minimal --component rustfmt --component clippy
|
|
- name: Check formatting and all workspace lints
|
|
run: |
|
|
cargo +1.95.0 fmt --all --check
|
|
cargo +1.95.0 clippy --locked --workspace --all-targets -- -D warnings
|
|
- name: Build desktop binaries
|
|
run: cargo +1.95.0 build --locked --workspace
|
|
- name: Test every workspace package
|
|
run: cargo +1.95.0 test --locked --workspace --no-fail-fast -- --nocapture
|
|
- name: Validate every Settings control against the compositor
|
|
env:
|
|
FERESE_TEST_BINARY: ${{ github.workspace }}/target/debug/ferese
|
|
run: cargo +1.95.0 test --locked -p ferese-settings all_gui_controls_and_presets_pass_compositor_validation -- --ignored --nocapture
|
|
- name: Fetch pinned upstream portal contracts
|
|
uses: actions/checkout@v6
|
|
with:
|
|
repository: flatpak/xdg-desktop-portal
|
|
ref: 23a76c392170dbbd26230f85ef56c3a57e52b857 # 1.20.3
|
|
path: build/portal-contracts
|
|
- name: Test installer, session recovery and private portal contracts
|
|
env:
|
|
FERESE_TEST_PORTAL_INTERFACES: ${{ github.workspace }}/build/portal-contracts/data
|
|
FERESE_TEST_PORTAL_BACKGROUND: "1"
|
|
run: python3 -m unittest discover -s scripts/tests -v
|
|
- name: Test EGL initialization, capture privacy and cursor composition
|
|
env:
|
|
LIBGL_ALWAYS_SOFTWARE: "1"
|
|
EGL_PLATFORM: surfaceless
|
|
run: |
|
|
cargo +1.95.0 test --locked -p ferese backends::direct::context::tests -- --include-ignored --nocapture
|
|
cargo +1.95.0 test --locked -p ferese backends::direct::capture::tests::unchanged_capture_skips_preparation_without_losing_source_updates -- --ignored --nocapture
|
|
cargo +1.95.0 test --locked -p ferese state::capture_privacy::tests -- --ignored --nocapture
|
|
cargo +1.95.0 test --locked -p ferese backends::direct::capture::tests::capture_recomposes_cursor_without_touching_the_display_target -- --ignored --nocapture
|
|
cargo +1.95.0 test --locked -p ferese winit::tests::capture_failure_restores_display_target_and_subsequent_frames_render -- --ignored --nocapture
|
|
cargo +1.95.0 test --locked -p ferese render::capture::stream_gpu_tests -- --ignored --nocapture
|
|
- name: Preserve static recording duration
|
|
run: cargo +1.95.0 test --locked -p xdg-desktop-portal-ferese --bin ferese-record recorder::tests::encoder_preserves_the_duration_of_a_static_capture -- --ignored --nocapture
|
|
- name: Share desktop binaries with native checks
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: native-check-binaries
|
|
path: |
|
|
target/debug/ferese
|
|
target/debug/ferese-shell
|
|
target/debug/feresectl
|
|
if-no-files-found: error
|
|
retention-days: 1
|
|
native:
|
|
name: Native panel and XWayland checks
|
|
needs: workspace
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 20
|
|
env:
|
|
CARGO_BUILD_JOBS: "2"
|
|
CARGO_PROFILE_DEV_DEBUG: "0"
|
|
LIBGL_ALWAYS_SOFTWARE: "1"
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Install native test dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y weston xwayland x11-utils xauth dbus-daemon \
|
|
build-essential pkg-config clang libclang-dev libxcb1-dev libxcb-cursor-dev libxkbcommon-dev \
|
|
libwayland-dev wayland-protocols libgbm1 libseat1 libinput10 libpipewire-0.3-0t64 \
|
|
libegl1 libegl-mesa0 libgl1-mesa-dri mesa-vulkan-drivers fonts-dejavu-core
|
|
- name: Create the shared X11 socket directory
|
|
run: sudo install -d -m 1777 -o root -g root /tmp/.X11-unix
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
name: native-check-binaries
|
|
path: target/debug
|
|
- name: Restore executable permissions
|
|
run: chmod +x target/debug/ferese target/debug/ferese-shell target/debug/feresectl
|
|
- name: Install pinned Rust
|
|
run: rustup toolchain install 1.95.0 --profile minimal
|
|
- name: Build pinned XWayland Satellite with readiness support
|
|
uses: actions/checkout@v6
|
|
with:
|
|
repository: Supreeeme/xwayland-satellite
|
|
ref: b83eab900644e4c7c77982ce3d44cb490f0c5e1d # v0.8.3
|
|
path: build/xwayland-satellite
|
|
- name: Build XWayland Satellite
|
|
run: cargo +1.95.0 build --manifest-path build/xwayland-satellite/Cargo.toml --locked --features systemd
|
|
- name: Run isolated native checks on a headless Wayland host
|
|
env:
|
|
FERESE_TEST_BINARY: target/debug/ferese
|
|
FERESE_TEST_SHELL: target/debug/ferese-shell
|
|
FERESE_TEST_CTL: target/debug/feresectl
|
|
FERESE_TEST_SATELLITE: build/xwayland-satellite/target/debug/xwayland-satellite
|
|
run: python3 scripts/ci/run-native-checks.py --log-dir build/native-check-logs
|
|
- name: Save native test logs
|
|
if: always()
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: native-check-logs
|
|
path: build/native-check-logs
|
|
if-no-files-found: warn
|
|
retention-days: 7
|