Skip to content

CI follow-up: bundle Qt runtime in artifacts to reach one Qt install per OS (round two of #352) #355

Description

@maximus321

Context

Follow-up to #352 / PR #354, which consolidated the test shards and cut Qt CDN downloads per run from ~27 to ~10 (Windows is already down to 1: its test jobs run windeployqt'd binaries from the build artifact with no Qt install at all).

This issue is speculative - open for observation. If the Qt CDN flakes stop biting after #354, close it unneeded. If builds or the remaining Linux/mac test groups keep flaking on aqt downloads, this is round two.

Goal

One Qt install per OS per run (i.e. only the build jobs install Qt): Linux 5 → 1, macOS 4 → 1.

Plan (the Windows recipe, applied to Linux/mac)

  1. Move the self-building unit suites' builds into the build jobs. test_unit_suites (Linux) and the mac live-integration build currently qmake/make on the test runner, which is why those jobs need Qt dev tools. build_linux / build_mac already build the other test binaries - add the unit suites there and ship the binaries in the artifact.
  2. Bundle the Qt runtime into the artifact, like build/qwtlib already does for QWT:
    • Linux: copy the needed libQt6*.so* plus plugin dirs (platforms, tls, sqldrivers, imageformats, multimedia) into build/qtlib; test groups set LD_LIBRARY_PATH + QT_PLUGIN_PATH.
    • macOS: copy the frameworks or use DYLD_FRAMEWORK_PATH; test binaries are plain executables (not .app bundles), so macdeployqt doesn't apply directly.

Known hard parts

  • QtWebEngine: login_screen and ui_navigation link it; bundling adds ~300-400 MB (WebEngineCore lib + resources + locales) to the linux/mac artifacts. Consider whether those two suites keep a Qt install (one group) while everything else goes bundled - that alone would still be Linux 5 → 2.
  • Plugin path resolution under offscreen/Xvfb needs QT_QPA_PLATFORM_PLUGIN_PATH verification.
  • Artifact size vs. download time trade-off: artifacts are GitHub-internal (reliable) vs. the Qt CDN (flaky) - the trade is favourable for stability, but download time for 4 consumers/OS grows.

Decision gate

Watch CI for ~a week after #354 merges. Count aqt failures (the auto-retry workflow log is the tally). Zero or near-zero → close this. Recurring → implement.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions