@@ -2,10 +2,10 @@ name: CI
22
33on :
44 push :
5- branches : [master, windows-build, service-update]
5+ branches : [master, btc-embedded, dash-spv-embedded, windows-build, service-update]
66 tags : ['v*']
77 pull_request :
8- branches : [master]
8+ branches : [master, btc-embedded, dash-spv-embedded ]
99
1010jobs :
1111 # ════════════════════════════════════════════════════════════════════════════
@@ -163,32 +163,34 @@ jobs:
163163 # ════════════════════════════════════════════════════════════════════════════
164164 # c2pool-qt leak-regression harness (Qt hybrid step 14, delta v1 §E.2)
165165 # Builds ui/c2pool-qt/ with C2POOL_QT_BUILD_TESTS=ON and runs the
166- # mount/destroy × 100 harness under xvfb, asserting no orphan
167- # QtWebEngineProcess helpers remain.
166+ # mount/destroy × 100 harness under xvfb.
168167 #
169- # DISABLED by default. QtWebEngine 6.4.2 (Ubuntu 24.04 apt package)
170- # segfaults inside Chromium's child-process init on GitHub's
171- # GPU-less runners regardless of software-GL / headless / sandbox
172- # flags — we tried LIBGL_ALWAYS_SOFTWARE, QT_OPENGL=software,
173- # --use-gl=swiftshader, --disable-gpu, --headless=new, xvfb-run
174- # with GLX, QTWEBENGINE_DISABLE_SANDBOX. All produced the same
175- # 2-second-after-banner SIGSEGV. This is an environment issue,
176- # not a harness bug — the lifecycle logic is code-verified against
177- # PageEmbedded::destroyView + Qt parent/child semantics. The
178- # harness compiles cleanly and is expected to pass on any
179- # non-Wayland dev box or a self-hosted CI runner with working
180- # QtWebEngine headless support.
168+ # PARTIAL COVERAGE. Configure + build are gating: API breakage in
169+ # PageEmbedded::destroyView or its Qt dependencies will fail compile
170+ # and block merge. That alone catches the most common class of
171+ # regression (a refactor renaming/removing a destroyView hook).
181172 #
182- # To re-enable, flip `if: false` → `if: true` (or remove the
183- # guard) once one of:
173+ # The runtime mount/destroy × 100 step is `continue-on-error: true`
174+ # because QtWebEngine 6.4.2 (Ubuntu 24.04 apt package) segfaults
175+ # inside Chromium's child-process init on GitHub's GPU-less runners
176+ # regardless of software-GL / headless / sandbox flags — tried
177+ # LIBGL_ALWAYS_SOFTWARE, QT_OPENGL=software, --use-gl=swiftshader,
178+ # --disable-gpu, --headless=new, xvfb-run with GLX,
179+ # QTWEBENGINE_DISABLE_SANDBOX. All produce the same 2-second-after-
180+ # banner SIGSEGV. The lifecycle logic is code-verified against
181+ # PageEmbedded::destroyView + Qt parent/child semantics; the harness
182+ # is expected to pass on any non-Wayland dev box or a self-hosted CI
183+ # runner with working QtWebEngine headless support.
184+ #
185+ # To flip the runtime step back to gating, remove `continue-on-error: true`
186+ # once one of:
184187 # - Ubuntu PPA ships QtWebEngine ≥ 6.6 with better headless
185188 # - Self-hosted runner with a working Qt6 WebEngine is available
186189 # - Alternative harness drops QWebEngineView mount (mocks the
187190 # Chromium init) while still exercising destroyView lifecycle
188191 # ════════════════════════════════════════════════════════════════════════════
189192 qt-webengine :
190193 name : Qt WebEngine leak gate
191- if : false
192194 runs-on : ubuntu-24.04
193195 steps :
194196 - uses : actions/checkout@v6
@@ -213,6 +215,7 @@ jobs:
213215 run : cmake --build build-qt --target c2pool-qt_test_embedded_leak -j$(nproc)
214216
215217 - name : Run leak harness under xvfb
218+ continue-on-error : true
216219 env :
217220 QTWEBENGINE_DISABLE_SANDBOX : ' 1'
218221 # Force software GL throughout — the GitHub Ubuntu runner
@@ -236,6 +239,78 @@ jobs:
236239 xvfb-run -a --server-args="-screen 0 1280x800x24 +extension GLX +render -noreset" \
237240 timeout 180 ./build-qt/c2pool-qt_test_embedded_leak
238241
242+ # ════════════════════════════════════════════════════════════════════════════
243+ # BTC embedded smoke (c2pool-btc target)
244+ #
245+ # Gated to runs where the btc-embedded branch is involved — pushes to
246+ # btc-embedded, or PRs whose head or base is btc-embedded. On master
247+ # itself the BTC sources don't yet exist (src/c2pool/main_btc.cpp,
248+ # src/impl/btc/) so this job is intentionally a no-op there; it
249+ # activates as soon as this workflow lands on btc-embedded via merge.
250+ #
251+ # Coverage: cmake --build --target c2pool-btc catches any link/compile
252+ # breakage in the embedded BTC SPV binary (main_btc.cpp + btc module +
253+ # btc_stratum + transitive ltc dependency). Until this CI job existed,
254+ # BTC had ZERO automated coverage on any commit.
255+ #
256+ # Deferred to a follow-up PR landing on btc-embedded directly:
257+ # - src/impl/btc/test/share_test.cpp: `add_subdirectory(test)` is
258+ # commented out in src/impl/btc/CMakeLists.txt because the test
259+ # still references LTC types. Revival is owned by the btc-heap-opt
260+ # arc.
261+ # - src/impl/btc/test/template_parity_test.cpp: standalone consensus
262+ # oracle harness; the file header claims it builds with a bare g++
263+ # invocation but its transitive includes pull in nlohmann_json,
264+ # leveldb_store, core/log — needs proper CMake target wiring to be
265+ # reliable in CI.
266+ # ════════════════════════════════════════════════════════════════════════════
267+ btc-linux :
268+ name : BTC embedded smoke (Linux x86_64)
269+ if : |
270+ github.ref == 'refs/heads/btc-embedded' ||
271+ github.head_ref == 'btc-embedded' ||
272+ github.base_ref == 'btc-embedded'
273+ runs-on : ubuntu-24.04
274+ steps :
275+ - uses : actions/checkout@v6
276+
277+ - name : Install system dependencies
278+ run : |
279+ sudo apt-get update -qq
280+ sudo apt-get install -y --no-install-recommends \
281+ g++ cmake make libleveldb-dev libsecp256k1-dev
282+
283+ - uses : actions/setup-python@v6
284+ with : { python-version: '3.12' }
285+
286+ - name : Install Conan 2
287+ run : pip install "conan>=2.0,<3.0"
288+
289+ - name : Detect Conan profile
290+ run : |
291+ conan profile detect --force
292+ sed -i 's/compiler.cppstd=.*/compiler.cppstd=20/' "$(conan profile path default)"
293+
294+ - name : Restore Conan cache
295+ uses : actions/cache@v5
296+ with :
297+ path : ~/.conan2
298+ key : conan2-ubuntu24-gcc13-${{ hashFiles('conanfile.txt') }}
299+
300+ - name : Conan install
301+ run : conan install . --build=missing --output-folder=build_btc --settings=build_type=Release
302+
303+ - name : Configure
304+ run : cmake -S . -B build_btc -DCMAKE_TOOLCHAIN_FILE=build_btc/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
305+
306+ - name : Build c2pool-btc
307+ run : cmake --build build_btc --target c2pool-btc -j$(nproc)
308+
309+ - name : Verify binary
310+ run : |
311+ file build_btc/src/c2pool/c2pool-btc
312+ build_btc/src/c2pool/c2pool-btc --help 2>&1 | head -3 || true
313+
239314 # ════════════════════════════════════════════════════════════════════════════
240315 # macOS (Apple Silicon arm64 — GitHub only provides ARM runners now)
241316 # Intel x86_64 macOS binary is built locally; see doc/build-macos.md
0 commit comments