The top-bar recorder previously saved a full monitor without sound. It now lets you select a region within one monitor and choose system audio, microphone audio, or both. Audio remains off by default, and recordings with audio are saved as VP8/Opus WebM files. The portal still controls screen access and cancellation; stopping from the bar or ending the video stream finishes the recording, including its audio tracks. Region selection accounts for fractional display scales and negative monitor coordinates. The picker keeps its action buttons visible while the display list and recording options scroll together. The picker, dependency lists, and recording documentation now explain the available choices and the slurp and audio requirements. Routine pushes and pull requests no longer start CI runners. Workspace checks and website deployment are manual, while release checks run when requested manually, through a version tag, or through a PR labeled `release`. Publishing still requires a pushed version tag. This also fixes release asset checksums by normalizing RPM filenames before generating the checksum file. Validated locally with a release build, portal and shell recorder tests, formatting, Clippy, actionlint, packaging tests, and mocked publishing checks. Media tests encoded and decoded cropped video with audio, checked that video termination finishes live audio, and exercised system, microphone, and combined capture against a private PipeWire-Pulse server. Mixed recordings must contain both fixture frequencies, with negative controls for either missing source. The picker was also checked on 800 × 600 and 800 × 400 desktops and opened in a live nested window.
86 lines
4.2 KiB
YAML
86 lines
4.2 KiB
YAML
name: Workspace release checks
|
|
on:
|
|
workflow_dispatch:
|
|
workflow_call:
|
|
permissions:
|
|
contents: read
|
|
concurrency:
|
|
group: release-checks-${{ github.workflow }}-${{ 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 mesa-vulkan-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 weston \
|
|
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: Check release tag matches the workspace version
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
env:
|
|
RELEASE_TAG: ${{ github.ref_name }}
|
|
run: |
|
|
python3 - <<'PYTHON'
|
|
import os, tomllib
|
|
with open("Cargo.toml", "rb") as source:
|
|
version = tomllib.load(source)["workspace"]["package"]["version"]
|
|
assert os.environ["RELEASE_TAG"] == "v" + version, "Tag must match workspace.package.version"
|
|
PYTHON
|
|
- name: Test capture privacy and failure recovery
|
|
env:
|
|
LIBGL_ALWAYS_SOFTWARE: "1"
|
|
EGL_PLATFORM: surfaceless
|
|
run: |
|
|
cargo test --locked -p ferese state::capture_privacy::tests -- --ignored
|
|
cargo test --locked -p ferese backends::direct::capture::tests::capture_recomposes_cursor_without_touching_the_display_target -- --ignored
|
|
cargo test --locked -p ferese winit::tests::capture_failure_restores_display_target_and_subsequent_frames_render -- --ignored
|
|
- name: Test recorder audio, cropping and stream revocation
|
|
run: |
|
|
cargo test --locked -p xdg-desktop-portal-ferese --bin ferese-record encoder_finishes_a_real_webm -- --ignored
|
|
cargo test --locked -p xdg-desktop-portal-ferese --bin ferese-record encoder_saves_cropped_video_and_mixed_audio_when_stopped -- --ignored
|
|
cargo test --locked -p xdg-desktop-portal-ferese --bin ferese-record video_eos_finishes_live_audio_without_waiting_for_the_user -- --ignored
|
|
- name: Test native shell, visibility and resize behavior
|
|
run: |
|
|
install -m 0644 packaging/pam.d/ferese-lock.fedora /etc/pam.d/ferese-lock
|
|
python3 scripts/ci/run-native-checks.py --suite desktop --log-dir native-logs
|
|
- name: Upload native test logs
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: native-test-logs
|
|
path: native-logs
|
|
if-no-files-found: ignore
|
|
- name: Test installer, session recovery and private portal contracts
|
|
run: python3 -m unittest discover -s scripts/tests -v
|