mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-09-20 15:24:14 +02:00
b4fcef1829
draw-bezier-curves only exists as SVG in the qet icon theme; on Debian/Ubuntu the SVG icon engine lives in qt6-svg-plugins, which --no-install-recommends leaves out. breeze-icon-theme is not needed: the test uses the qet theme compiled into the binary.
80 lines
3.3 KiB
YAML
80 lines
3.3 KiB
YAML
# Linux build, unit tests, and the IPC open-forwarding regression gate.
|
|
#
|
|
# The existing workflows build Windows and generate documentation; nothing
|
|
# builds QElectroTech on Linux or runs tests/ in CI. This does both.
|
|
#
|
|
# It runs inside an ubuntu:26.04 container rather than directly on the runner
|
|
# because the IPC gate below needs Qt 6.10.2. The ubuntu-latest image ships
|
|
# Qt 6.4, and whether the crash that gate covers reproduces on 6.4 has never
|
|
# been checked -- a gate that cannot go red is worse than no gate.
|
|
name: Linux build and tests
|
|
|
|
on:
|
|
push:
|
|
branches: [master]
|
|
pull_request:
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
linux:
|
|
name: Build and test (Qt 6, Debug)
|
|
runs-on: ubuntu-latest
|
|
container: ubuntu:26.04
|
|
|
|
steps:
|
|
- name: Install build and test dependencies
|
|
run: |
|
|
apt-get update
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
|
ca-certificates build-essential cmake ninja-build git pkg-config \
|
|
qt6-base-dev qt6-base-private-dev qt6-tools-dev qt6-tools-dev-tools \
|
|
libqt6svg6-dev libqt6sql6-sqlite libsqlite3-dev libcups2-dev \
|
|
libxkbcommon-x11-0 \
|
|
xvfb openbox xdotool x11-utils
|
|
# extra-cmake-modules and the KF6 libraries are installed rather than
|
|
# left to FetchContent: without them CMake builds extra-cmake-modules
|
|
# from source, and its Qt Help documentation target then demands
|
|
# Qt6{Core,Gui,Widgets,DBus}Tools, failing the configure with an error
|
|
# that appears to be about QElectroTech and is not.
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
|
extra-cmake-modules libkf6coreaddons-dev libkf6widgetsaddons-dev \
|
|
qt6-svg-plugins
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Configure
|
|
# Debug, not Release. Whether a use-after-free faults depends on what
|
|
# the allocator does with the freed block: the commit before #868
|
|
# crashes every time built Debug and survives every time built
|
|
# -O3 -DNDEBUG, so a Release job would never catch a regression here.
|
|
run: |
|
|
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
cmake -B build -G Ninja \
|
|
-DCMAKE_BUILD_TYPE=Debug \
|
|
-DQT_VERSION_MAJOR=6
|
|
|
|
- name: Build
|
|
run: cmake --build build --parallel $(nproc)
|
|
|
|
- name: Unit tests
|
|
run: xvfb-run -a ctest --test-dir build --output-on-failure
|
|
|
|
- name: IPC open-forwarding regression (#868)
|
|
# Fails the job only on an actual crash. An inconclusive run means the
|
|
# crash path was not exercised -- it proves nothing, which is not the
|
|
# same as a regression, and failing on it would make this job flaky
|
|
# rather than informative.
|
|
run: |
|
|
set +e
|
|
tests/ipc-regression/run.sh --binary build/qelectrotech
|
|
status=$?
|
|
set -e
|
|
case $status in
|
|
0) echo "::notice::IPC gate passed" ;;
|
|
2) echo "::warning::IPC gate inconclusive -- the crash path was not exercised, nothing was proven" ;;
|
|
*) echo "::error::IPC gate failed -- forwarded files are being opened inside the socket handler again"
|
|
exit 1 ;;
|
|
esac
|