Repository navigation
ci: Install the sanitizer deps from apt-packages.txt - #1487
Merged
Merged
Conversation
rust/tools/sanitize/install-ubuntu-deps.sh takes the OBS build dependencies from the package lines of the first apt-get install in rust/tools/linux-validate/Dockerfile. obs-rust#967 moved those packages to the shared apt-packages.txt, so the Dockerfile's install line is now one line that reads that file, and the scrape finds no packages. Every scheduled asan, tsan and valgrind job since 2026-10-16 stops in "Install dependencies" with "no package list found in .../Dockerfile", and Triage then fails for want of results. The test runs the script against stub sudo and apt-get and checks that it installs every package in apt-packages.txt plus the launch tools. It fails on this commit: the script exits 1 before apt-get runs. Refs obs-rust#1395
Read the OBS build dependencies from rust/tools/linux-validate/apt-packages.txt, the list the Tier 2 CI jobs and the Docker harness install since obs-rust#967, instead of scraping the Dockerfile, whose install line no longer lists any packages. The Sanitizers workflow has failed in "Install dependencies" on every nightly run since 2026-10-16 for this reason; the runner image did not change (ubuntu-26.04 20261012.163.1 on both the last green run and the failing ones). Against the list the old scrape found on 2026-10-15, the shared list drops ccache (sanitize.sh now uses the pinned zccache from install-zccache.sh) and adds zstd. The extra launch packages are unchanged. Refs obs-rust#1395
The sanitizer asan pass builds with -fsanitize=address,undefined, and UBSan's vptr check makes every member call through WebSocketServer reference the class's typeinfo. That typeinfo is emitted with its out-of-line destructor in WebSocketServer.cpp, which the test does not compile (it stubs GetWebSocketServer() instead), so the link fails: undefined reference to `typeinfo for WebSocketServer' and sanitize.sh stops the asan pass on any build error. The test was added after the last sanitizer run that got past "Install dependencies", so no nightly has shown it yet. Turn the vptr check off for this one stubbed harness; outside a UBSan build the flag does nothing. Refs obs-rust#1395
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #1395
What and why
The Sanitizers workflow (asan, tsan, valgrind) has failed every night since 2026-10-16 (last green: run 38731778779, 10-15; first red: 38896638310), in "Install dependencies":
Triage then fails with "No results". The runner image is the same on the green and the red runs (ubuntu-26.04 20261012.163.1).
rust/tools/sanitize/install-ubuntu-deps.shread the OBS build packages by scraping the firstapt-get installofrust/tools/linux-validate/Dockerfilewith awk. ci: Run Tier 2 Linux natively on the runner #967 (10-16) moved that list intorust/tools/linux-validate/apt-packages.txt, which the Tier 2 jobs and the Docker harness now install, so the scrape found nothing.apt-packages.txt. Compared with the list it found on 10-15, the shared list drops ccache (sanitize.sh uses the pinned zccache) and adds zstd. The extra launch packages (valgrind, gdb, xvfb, ...) are unchanged.-fsanitize=undefined,test_ws_save_changes(obs-websocket: Save the scene collection after changes #812) doesn't link (undefined reference to `typeinfo for WebSocketServer'). The test stubs the server rather than compiling WebSocketServer.cpp, where the class's typeinfo lives, and UBSan's vptr check needs it. sanitize.sh stops the asan pass on any build error. That one target now builds with-fno-sanitize=vptr; ASan and the other UBSan checks still apply to it.RED → GREEN
ci: Test that the sanitizer deps script installs the Tier 2 package list.ci/test_sanitize_deps.pyruns the script against stubsudo/apt-getand checks the packages it installs. It fails on the current script ("no package list found").uv run python -m unittest ci/test_sanitize_deps.pypasses; allci/unittests pass (766, 2 skipped); shellcheck and gersemi are clean. With the vptr change,test_ws_save_changeslinks and runs under ASan in a local asan build.docker run ubuntu:26.04wasn't possible here, and the full local asan build stopped earlier on a-Werror=format-truncationwarning from this host's GCC 16.2 atlibobs/util/pipe-variadic.c.h:16(likely a false positive of that GCC, not seen on the runner), so there are no local sanitizer test results. A Sanitizers run on this head is the real check.Checklist
masterdocs/features.mdis added or updated (not applicable: no user-visible change)