|
From: andypugh <no...@gi...> - 2026-06-05 19:25:04
|
Branch: refs/heads/master Home: https://github.com/LinuxCNC/linuxcnc Commit: 54f3fc2ca3819e5f0ab094998da003612c561a9c https://github.com/LinuxCNC/linuxcnc/commit/54f3fc2ca3819e5f0ab094998da003612c561a9c Author: Luca Toniolo <107...@us...> Date: 2026-06-04 (Thu, 04 Jun 2026) Changed paths: M debian/control.top.in M tests/ui-smoke/_lib/drive.py M tests/ui-smoke/_lib/launch.sh M tests/ui-smoke/_lib/run-gui.sh A tests/ui-smoke/_lib/smoke.ngc M tests/ui-smoke/axis/test.sh M tests/ui-smoke/gmoccapy/test.sh M tests/ui-smoke/qtdragon/test.sh M tests/ui-smoke/touchy/test.sh Log Message: ----------- test: extend ui-smoke with g-code execution and endpoint check Each per-GUI test now also drives estop reset, machine on, home all, mode auto, program_open + auto(RUN) on a tiny shared smoke.ngc, waits for sustained INTERP_IDLE, and asserts stat.position delta against --expect-delta-mm 1,1,0 converted via stat.linear_units so the same arg works on inch (axis, touchy) and mm (gmoccapy, qtdragon) sims. State/mode commands use ensure_state/ensure_mode helpers with a retry-and-stability pattern: gmoccapy and qtdragon re-issue their own mode commands during startup and can revert task_mode AUTO -> MANUAL right after we set it. The helpers wait for the desired state, then re-check after STATE_STABILITY_S; on revert they retry up to STATE_RETRY_BUDGET times. Intermediate timeouts use a quiet variant so spurious UI_SMOKE_FAIL lines do not pollute the log during retries (checkresult.sh greps for ^UI_SMOKE_FAIL on any line). smoke.ngc is G21 G91 G0 X1 Y1 G90 M2 - relative move in mm, sim- agnostic. The driver snapshots stat.position[:3] after homing and checks (final - start) against the converted delta, sidestepping each sim's HOME offset. Adds python3-zmq and python3-opencv to debian/control.top.in under !nocheck: qtdragon's hal_bridge and the camview widget segfault on startup without them, which is invisible to the connect-only Phase 1 smoke but breaks the run-program path before the program can start. 5 consecutive local runs all green at 2m43s wall each. Commit: 20fbc52ae38e18a680bf28a64bf75104561ece52 https://github.com/LinuxCNC/linuxcnc/commit/20fbc52ae38e18a680bf28a64bf75104561ece52 Author: Luca Toniolo <107...@us...> Date: 2026-06-04 (Thu, 04 Jun 2026) Changed paths: M tests/ui-smoke/_lib/run-gui.sh M tests/ui-smoke/qtdragon/test.sh Log Message: ----------- test: qtdragon ui-smoke runs against writable config mirror CI run hit a PermissionError in qtvcp's logger when it tried to open configs/sim/qtdragon/qtdragon_xyz/qtdragon.log for write: the GitHub Actions workspace is mounted read-only for the docker build user, and qtvcp resolves LOG_FILE = qtdragon.log into the config dir. hal_bridge then exits, linuxcnc tears down, and the driver retries ESTOP_RESET until the budget is exhausted. qtdragon test.sh now mirrors the qtdragon_xyz config dir to a mktemp directory, seds LOG_FILE to ~/qtdragon.log, and passes the absolute INI path to run-gui.sh. run-gui.sh treats any path starting with / as absolute; everything else still resolves under configs/sim. Trap cleans the tmp dir on exit so the working tree stays clean. Does not touch the shipped qtdragon config to avoid changing default behaviour for real users. The same fix would work for any other config that turns out to write into its own dir on CI. Commit: cc1476b65f3bf738ea6bff5333e99de68359f30e https://github.com/LinuxCNC/linuxcnc/commit/cc1476b65f3bf738ea6bff5333e99de68359f30e Author: Luca Toniolo <107...@us...> Date: 2026-06-04 (Thu, 04 Jun 2026) Changed paths: M debian/control.top.in M tests/ui-smoke/_lib/launch.sh Log Message: ----------- test: drop python3-opencv dep and set QT_XCB_GL_INTEGRATION=xcb_egl Ubuntu 24.04 rip-and-test runs hit a qtvcp segfault after the log- permission fix let qtvcp get further than Phase 1 had. Debian package-arch passes the same code. Two known asymmetries match: - python3-opencv on Ubuntu pulls Qt5 GUI bits whose cv2/qt/plugins directory overrides the system PyQt5 platform plugin path under xvfb (opencv-python issue #572, Qt Forum 119109). qtvcp's camview_widget tolerates ImportError on cv2 and just logs a warning, so dropping the dep restores the harmless fallback path Phase 1 was already exercising. - xcb_glx is the historical fragile integration under xvfb (Launchpad #1761708, QTBUG-67537); xcb_egl is what software-GL stacks expect anyway. Set as defense in depth. Local 4/4 still green with both changes. Commit: ed2c5effd4c6b41be9ce79d68b937a73bfeb3793 https://github.com/LinuxCNC/linuxcnc/commit/ed2c5effd4c6b41be9ce79d68b937a73bfeb3793 Author: Luca Toniolo <107...@us...> Date: 2026-06-04 (Thu, 04 Jun 2026) Changed paths: M tests/ui-smoke/qtdragon/test.sh Log Message: ----------- test: force QT_QPA_PLATFORM=offscreen for qtdragon xvfb + xcb + xcb_egl was not enough for Ubuntu 24.04 rip-and-test: qtvcp still segfaults during widget construction even with opencv and qtwebengine paths quiet, and the same code passes on Debian package-arch. Offscreen renders entirely in memory and exercises a different Qt plugin entirely, dodging the xcb-stack instability. scripts/linuxcnc itself forces QT_QPA_PLATFORM=xcb unless LINUXCNC_OPENGL_PLATFORM is set to a non-glx value, so pin both. Only qtdragon needs this; axis (Tk), touchy and gmoccapy (GTK) are unaffected. Trade-off: no Phase 3 screenshot from qtdragon under this config; Phase 3 would need an opt-out for offscreen tests. Commit: 218b74e851ab6cc9f41d11c52663357ced4a0b93 https://github.com/LinuxCNC/linuxcnc/commit/218b74e851ab6cc9f41d11c52663357ced4a0b93 Author: Luca Toniolo <107...@us...> Date: 2026-06-04 (Thu, 04 Jun 2026) Changed paths: M tests/ui-smoke/qtdragon/test.sh Log Message: ----------- test: disable QtWebEngine sandbox+GPU for qtdragon ui-smoke qtdragon embeds QWebEngineView. On rip-and-test (gcc) CI it racy-crashed during Chromium browser-process spawn under offscreen + xvfb, no GPU, no user namespaces. rip-and-test-clang got past it by luck. Force --no-sandbox --single-process --no-zygote --disable-gpu so the renderer runs in-process with software rendering. Commit: 98a028804cc90d06064587d8d4cb8822e5c3ee22 https://github.com/LinuxCNC/linuxcnc/commit/98a028804cc90d06064587d8d4cb8822e5c3ee22 Author: Luca Toniolo <107...@us...> Date: 2026-06-04 (Thu, 04 Jun 2026) Changed paths: M tests/ui-smoke/qtdragon/test.sh Log Message: ----------- test: block QtWebEngine import in qtdragon ui-smoke via meta_path shim QtWebEngine browser-process init segfaults inside the qtvcp process on Ubuntu 24.04 CI even with --no-sandbox --single-process --disable-gpu. The smoke test never touches the WebWidget, so block the qtpy.QtWebEngineWidgets import via a sitecustomize meta_path finder; WebWidget already has a fallback that swaps in a plain QWidget when that import fails. No Chromium spawn, no segfault. The previous chromium-flags attempt was retracted: 'Sandboxing disabled by user.' confirmed Chromium got the flags but still crashed during init, so we are not going to win that race. Commit: 939cdd5064d1358249afd0a1d55f36a063c49b51 https://github.com/LinuxCNC/linuxcnc/commit/939cdd5064d1358249afd0a1d55f36a063c49b51 Author: Luca Toniolo <107...@us...> Date: 2026-06-04 (Thu, 04 Jun 2026) Changed paths: A tests/ui-smoke/_lib/checkresult-quit.sh A tests/ui-smoke/_lib/launch-env.sh M tests/ui-smoke/_lib/launch.sh A tests/ui-smoke/_lib/qtdragon-prepare.sh A tests/ui-smoke/_lib/quit-launch.sh A tests/ui-smoke/gmoccapy-quit/checkresult A tests/ui-smoke/gmoccapy-quit/skip A tests/ui-smoke/gmoccapy-quit/test.sh A tests/ui-smoke/qtdragon-quit/checkresult A tests/ui-smoke/qtdragon-quit/skip A tests/ui-smoke/qtdragon-quit/test.sh M tests/ui-smoke/qtdragon/test.sh A tests/ui-smoke/touchy-quit/checkresult A tests/ui-smoke/touchy-quit/skip A tests/ui-smoke/touchy-quit/test.sh Log Message: ----------- tests: add ui-smoke quit-path coverage (SIGTERM) Adds a quit-path smoke test per GUI that boots the GUI, waits for the NML task to come up, sends SIGTERM to the GUI process alone, and asserts the GUI exits on its own within a short grace. This guards the clean-shutdown handlers: a GUI that absorbs SIGTERM and has to be SIGKILLed fails the test. The new _lib/quit-launch.sh shares the headless environment (software GL + audio silencing) with launch.sh by sourcing a new _lib/launch-env.sh rather than copying it, so the two launchers cannot drift apart. Results go through _lib/checkresult-quit.sh (pass on UI_SMOKE_QUIT_OK). The GUI process is identified by matching a python argv[0], so the linuxcnc launcher and xvfb-run wrappers that also carry the GUI name on their command line are not mistaken for it. Per-GUI dirs: touchy-quit, gmoccapy-quit, qtdragon-quit. The qtdragon quit test needs the same CI workarounds the qtdragon smoke test already carries (writable config mirror with a patched LOG_FILE, the offscreen Qt platform, and the QtWebEngine import shim). Those move out of qtdragon/test.sh into _lib/qtdragon-prepare.sh, sourced by both qtdragon test.sh files, so the quit test reuses them instead of leaving qtvcp to crash on startup. Requires the SIGTERM handlers in #4076 (gmoccapy), #4077 (touchy) and #4078 (qtvcp); without them the GUIs ignore SIGTERM and these tests fail by design. (cherry picked from commit aff5991dc3189b48a747c7c7e8962d4d16c5cbe3) Commit: 5098eeb4ffc3be6a83e198b179835ed14aeb19b2 https://github.com/LinuxCNC/linuxcnc/commit/5098eeb4ffc3be6a83e198b179835ed14aeb19b2 Author: Luca Toniolo <107...@us...> Date: 2026-06-04 (Thu, 04 Jun 2026) Changed paths: M tests/ui-smoke/_lib/drive.py M tests/ui-smoke/_lib/launch-env.sh Log Message: ----------- ui-smoke: fail fast and explain when the GUI process dies The driver polled NML for up to 60s after a GUI crash, then blamed whatever stage timed out (e.g. homing); a dead task keeps serving its last stat buffer. Watch the launcher PID and fail in ~1s pointing at the crash. Enable PYTHONFAULTHANDLER for a Python traceback on fatal signals. Commit: 93ad82040d521e3532b7a8d89e72d04d16faea09 https://github.com/LinuxCNC/linuxcnc/commit/93ad82040d521e3532b7a8d89e72d04d16faea09 Author: Luca Toniolo <107...@us...> Date: 2026-06-04 (Thu, 04 Jun 2026) Changed paths: A tests/ui-smoke/_lib/crashdump.sh M tests/ui-smoke/_lib/launch.sh M tests/ui-smoke/_lib/quit-launch.sh Log Message: ----------- ui-smoke: capture a native backtrace on GUI crash PYTHONFAULTHANDLER stops at the Python frame; a Qt/dbus/GL segfault needs the C stack. Arm a core dump in the launchers and, if the GUI leaves a core, gdb its backtrace into the log. Failure-path only, so green runs pay nothing. Commit: a9ff6a4b4895ccd814b01db8e90862fbc33e6cf5 https://github.com/LinuxCNC/linuxcnc/commit/a9ff6a4b4895ccd814b01db8e90862fbc33e6cf5 Author: Luca Toniolo <107...@us...> Date: 2026-06-04 (Thu, 04 Jun 2026) Changed paths: M tests/ui-smoke/_lib/quit-launch.sh Log Message: ----------- ui-smoke: show the driver's stderr in the quit path quit-launch.sh catted ui-smoke.out but not ui-smoke.err, hiding the driver's failure reason (e.g. the GUI-crashed message) on a quit-path failure. Cat it like launch.sh already does. Commit: 81c3d892ba843993e3eae78d6efd54abaece848e https://github.com/LinuxCNC/linuxcnc/commit/81c3d892ba843993e3eae78d6efd54abaece848e Author: andypugh <an...@bo...> Date: 2026-06-05 (Fri, 05 Jun 2026) Changed paths: M debian/control.top.in A tests/ui-smoke/_lib/checkresult-quit.sh A tests/ui-smoke/_lib/crashdump.sh M tests/ui-smoke/_lib/drive.py A tests/ui-smoke/_lib/launch-env.sh M tests/ui-smoke/_lib/launch.sh A tests/ui-smoke/_lib/qtdragon-prepare.sh A tests/ui-smoke/_lib/quit-launch.sh M tests/ui-smoke/_lib/run-gui.sh A tests/ui-smoke/_lib/smoke.ngc M tests/ui-smoke/axis/test.sh A tests/ui-smoke/gmoccapy-quit/checkresult A tests/ui-smoke/gmoccapy-quit/skip A tests/ui-smoke/gmoccapy-quit/test.sh M tests/ui-smoke/gmoccapy/test.sh A tests/ui-smoke/qtdragon-quit/checkresult A tests/ui-smoke/qtdragon-quit/skip A tests/ui-smoke/qtdragon-quit/test.sh M tests/ui-smoke/qtdragon/test.sh A tests/ui-smoke/touchy-quit/checkresult A tests/ui-smoke/touchy-quit/skip A tests/ui-smoke/touchy-quit/test.sh M tests/ui-smoke/touchy/test.sh Log Message: ----------- Merge pull request #4054 from grandixximo/ui-tests-phase2 test: ui-smoke phase 2, g-code execution and endpoint check Compare: https://github.com/LinuxCNC/linuxcnc/compare/106519fb3e01...81c3d892ba84 To unsubscribe from these emails, change your notification settings at https://github.com/LinuxCNC/linuxcnc/settings/notifications |