Preserve display assignments and fix CI checks

Keep surviving outputs on their applied CRTCs when enabling another display. Reserve nested IPC directories with explicit private permissions and cover session umasks.

Separate compositor checks from release-only workspace checks, provide test runtime prerequisites, and correct the reload test's initial revision assumption.
This commit is contained in:
Samuel Onoja committed 2026-10-07 09:30:25 +01:00
1 parent a6f24e8188
commit dcbcec6ba4
7 files changed
+355 -139

No files matched your search

+69
View File
@@ -0,0 +1,69 @@
name: Compositor lifecycle and capture tests
on:
pull_request:
paths:
- "compositor/**"
- "crates/**"
- "shell/**"
- "portal/**"
- "feresectl/**"
- "scripts/**"
- "packaging/**"
- "assets/**"
- "LICENSE"
- "rust-toolchain.toml"
- "rustfmt.toml"
- "Cargo.toml"
- "Cargo.lock"
- ".github/workflows/compositor-checks.yml"
push:
branches: [main]
paths:
- "compositor/**"
- "crates/**"
- "shell/**"
- "portal/**"
- "feresectl/**"
- "scripts/**"
- "packaging/**"
- "assets/**"
- "LICENSE"
- "rust-toolchain.toml"
- "rustfmt.toml"
- "Cargo.toml"
- "Cargo.lock"
- ".github/workflows/compositor-checks.yml"
workflow_dispatch:
permissions:
contents: read
concurrency:
group: compositor-checks-${{ github.ref }}
cancel-in-progress: true
jobs:
protocol:
runs-on: ubuntu-24.04
timeout-minutes: 30
env:
XDG_RUNTIME_DIR: /tmp/ferese-compositor-runtime
steps:
- uses: actions/checkout@v6
- name: Install compositor build 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 \
libegl-dev libegl-mesa0 libgl1-mesa-dri libdrm-dev libfontconfig1-dev libfreetype-dev libexpat1-dev xauth
- 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
- name: Test compositor policies, protocols and worker lifecycles
run: cargo +1.95.0 test --locked -p ferese -- --nocapture
- name: Test capture privacy, resize dependencies and cursor composition
env:
LIBGL_ALWAYS_SOFTWARE: "1"
EGL_PLATFORM: surfaceless
run: |
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
-101
View File
@@ -1,101 +0,0 @@
name: Workspace release checks
on:
pull_request:
paths:
- "compositor/**"
- "crates/**"
- "shell/**"
- "portal/**"
- "feresectl/**"
- "scripts/**"
- "packaging/**"
- "assets/**"
- "LICENSE"
- "rust-toolchain.toml"
- "rustfmt.toml"
- "Cargo.toml"
- "Cargo.lock"
- ".github/workflows/compositor-lifecycle.yml"
push:
branches: [main]
paths:
- "compositor/**"
- "crates/**"
- "shell/**"
- "portal/**"
- "feresectl/**"
- "scripts/**"
- "packaging/**"
- "assets/**"
- "LICENSE"
- "rust-toolchain.toml"
- "rustfmt.toml"
- "Cargo.toml"
- "Cargo.lock"
- ".github/workflows/compositor-lifecycle.yml"
workflow_dispatch:
permissions:
contents: read
concurrency:
group: compositor-lifecycle-${{ github.ref }}
cancel-in-progress: true
jobs:
protocol:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
- name: Install compositor build 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 \
libegl-dev libegl-mesa0 libgl1-mesa-dri libdrm-dev libfontconfig1-dev libfreetype-dev libexpat1-dev
- name: Install Rust
run: rustup toolchain install 1.95.0 --profile minimal
- name: Test compositor policies, protocols and worker lifecycles
run: cargo +1.95.0 test --locked -p ferese -- --nocapture
- name: Test capture privacy, resize dependencies and cursor composition
env:
LIBGL_ALWAYS_SOFTWARE: "1"
EGL_PLATFORM: surfaceless
run: |
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
workspace:
runs-on: ubuntu-24.04
container: fedora:44
timeout-minutes: 60
env:
CARGO_BUILD_JOBS: "2"
CARGO_INCREMENTAL: "0"
CARGO_PROFILE_DEV_DEBUG: "0"
CARGO_PROFILE_TEST_DEBUG: "0"
steps:
- name: Install desktop build and test dependencies
run: |
dnf install -y --allowerasing python3 python3-gobject python3-pillow git curl gcc gcc-c++ make cmake pkgconf-pkg-config \
wayland-devel wayland-protocols-devel libxkbcommon-devel libinput-devel systemd-devel libseat-devel \
mesa-libgbm-devel mesa-libEGL-devel mesa-dri-drivers libdrm-devel fontconfig-devel \
freetype-devel expat-devel dbus-daemon dbus-tools desktop-file-utils foot pam \
clang clang-devel pipewire-devel pipewire wireplumber polkit polkit-libs libei \
xdg-desktop-portal xdg-desktop-portal-gtk \
gstreamer1-devel gstreamer1-plugins-base gstreamer1-plugins-good pipewire-gstreamer
- uses: actions/checkout@v6
- name: Install pinned Rust and checks
run: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o /tmp/rustup.sh
sh /tmp/rustup.sh -y --profile minimal --default-toolchain 1.95.0 --component rustfmt --component clippy
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- name: Check formatting and all workspace lints
run: |
cargo fmt --all --check
cargo clippy --locked --workspace --all-targets -- -D warnings
- name: Build desktop binaries and test the complete workspace
run: |
cargo build --locked --workspace
cargo test --locked --workspace --no-fail-fast
- name: Test installer, session recovery and private portal contracts
run: python3 -m unittest discover -s scripts/tests -v
+50
View File
@@ -0,0 +1,50 @@
name: Workspace release checks
on:
release:
types: [published]
permissions:
contents: read
concurrency:
group: release-checks-${{ github.ref }}
cancel-in-progress: false
jobs:
workspace:
runs-on: ubuntu-24.04
container:
image: fedora:44
options: --init
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-release-runtime
steps:
- name: Install desktop build and test dependencies
run: |
dnf install -y --allowerasing python3 python3-gobject python3-pillow git curl gcc gcc-c++ make cmake pkgconf-pkg-config \
wayland-devel wayland-protocols-devel libxkbcommon-devel libinput-devel systemd-devel libseat-devel \
mesa-libgbm-devel mesa-libEGL-devel mesa-dri-drivers libdrm-devel fontconfig-devel \
freetype-devel expat-devel dbus-daemon dbus-tools desktop-file-utils foot pam xorg-x11-xauth \
clang clang-devel pipewire-devel pipewire wireplumber polkit polkit-libs libei \
xdg-desktop-portal xdg-desktop-portal-gtk \
gstreamer1-devel gstreamer1-plugins-base gstreamer1-plugins-good pipewire-gstreamer
- name: Create private test runtime directory
run: install -d -m 0700 "$XDG_RUNTIME_DIR"
- uses: actions/checkout@v6
- name: Install pinned Rust and checks
run: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o /tmp/rustup.sh
sh /tmp/rustup.sh -y --profile minimal --default-toolchain 1.95.0 --component rustfmt --component clippy
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- name: Check formatting and all workspace lints
run: |
cargo fmt --all --check
cargo clippy --locked --workspace --all-targets -- -D warnings
- name: Build desktop binaries and test the complete workspace
run: |
cargo build --locked --workspace
cargo test --locked --workspace --no-fail-fast
- name: Test installer, session recovery and private portal contracts
run: python3 -m unittest discover -s scripts/tests -v