drm: move the drm CI out of the stock workflow, and stop touching scrap/Cargo.toml

The instruction was that nothing outside the feature should change while the
feature is off, and the runtime code honors that, but the build plumbing did not.
Start undoing that.

ci.yml goes back to upstream byte for byte. The drm test step it carried now lives
in a new workflow that only fires when a drm path changes, so a PR that does not
touch this backend pays nothing for it.

That new workflow also runs the whole rustdesk-crate test set with the feature on
rather than filtering by the `_drm` test names, because the name filter skipped
the sibling assertion that bounds `size_of::<Data>()`, which the new DmabufDesc
variant grows.

It gains a second job that fetches libdrmtap at the pinned commit, builds the .so
and then asserts the contract the runtime depends on: every symbol the loader
resolves, derived from the loader source so the two cannot drift, plus evidence
that the EGL detile path is really compiled in. libdrmtap degrades to a CPU-only
stub when the egl/glesv2 pkg-config files are absent on a build host, and nothing
downstream noticed. Note the check looks for the dlopen target name and the import
call, not for DT_NEEDED: EGL is loaded lazily on purpose so the privileged process
never links the vendor GL stack, so an ELF-level check reports a false negative on
a correct library.

libs/scrap/Cargo.toml keeps only the added feature: the unrelated blank line before
[dependencies.hwcodec] is restored, and the comment no longer describes DRMTAP_REF,
which no longer exists. The feature is now drm = ["wayland"] because all three drm
modules live inside the wayland arm of common/mod.rs, so scrap/drm alone compiled
nothing; it worked only because the root crate always enables scrap/wayland.
This commit is contained in:
Mariano Abad
2026-07-28 06:32:17 -03:00
parent 0782e38b90
commit 510ac3b3a9
3 changed files with 166 additions and 19 deletions

View File

@@ -249,18 +249,3 @@ jobs:
use-cross: ${{ matrix.job.use-cross }}
command: test
args: --locked --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}}
# The opt-in `drm` (DRM/KMS capture) feature is off in the default workspace test above, so the
# `_drm` unit tests would otherwise never run in CI. `drm` is a pure runtime-dlopen backend with no
# link-time deps (no libdrm/EGL/gbm, no GPU), so compiling just the rustdesk crate with the feature
# on is cheap and needs no extra system packages. Run the pure-userspace `_drm` tests here (the
# SCM_RIGHTS framing round-trips incl. MSG_CTRUNC/surplus-fd, and the peer-auth + admission-bound
# decisions) so the new screen-content channel is covered on every PR, alongside the ipc/auth tests.
# Linux-only; the main build/test above stays on default features so the shipped drm-off config
# remains the primary verified one.
- name: Run drm unit tests (Linux)
if: matrix.job.target == 'x86_64-unknown-linux-gnu'
uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1
with:
command: test
args: --locked --target=${{ matrix.job.target }} -p rustdesk --features drm drm_conn_tests