Skip to content

ci(build): full self-hosted switch — Linux-905 (32c) + macOS M4/Intel + Windows-217, fork-gated - #439

Merged
frstrtr merged 10 commits into
masterfrom
ci-steward/self-hosted-runners
Jun 26, 2026
Merged

ci(build): full self-hosted switch — Linux-905 (32c) + macOS M4/Intel + Windows-217, fork-gated#439
frstrtr merged 10 commits into
masterfrom
ci-steward/self-hosted-runners

Conversation

@frstrtr

@frstrtr frstrtr commented Jun 24, 2026

Copy link
Copy Markdown
Owner

Wires the Windows leg of the self-hosted build fleet.

  • Windows job runs-on now resolves to the self-hosted runner (VM217, labels self-hosted/Windows/X64/c2pool-build) for internal-branch PRs and pushes; fork PRs fall back to GitHub-hosted windows-2022 via in-workflow gate (github.event.pull_request.head.repo.full_name == github.repository), so untrusted code never executes on the self-hosted box.
  • Conan cache retained (no behavioral change to build steps).

Fleet status:

Merge-gated: do NOT merge until verified green on the self-hosted runner + fork-fallback confirmed + before/after timing, per integrator. github-hosted stays the fallback.

frstrtr added a commit that referenced this pull request Jun 24, 2026
… + ccache

Apply the #439 fork-gate to every ubuntu-24.04 job: push/internal-branch
PRs run on [self-hosted, Linux, X64, c2pool-build] (VM905, 32 cores);
fork PRs fall back to GitHub-hosted ubuntu-24.04. Build stays -j$(nproc)
(=32 on the box). Wire ccache as the C/C++ compiler launcher on the six
C++ build lanes (linux, linux-asan, coin-bch, coin-bch-asan, qt, dgb-auxdoge)
and add the ccache package to their apt lists so the binary is present on
both self-hosted and fork-fallback runners. Completes the all-lane
self-hosted switch (Linux+macOS+Windows).
@frstrtr frstrtr changed the title ci(build): Windows lane on self-hosted c2pool-windows-217 (internal/fork gate) ci(build): full self-hosted switch — Linux-905 (32c) + macOS M4/Intel + Windows-217, fork-gated Jun 24, 2026
frstrtr added a commit that referenced this pull request Jun 24, 2026
… + ccache

Apply the #439 fork-gate to every ubuntu-24.04 job: push/internal-branch
PRs run on [self-hosted, Linux, X64, c2pool-build] (VM905, 32 cores);
fork PRs fall back to GitHub-hosted ubuntu-24.04. Build stays -j$(nproc)
(=32 on the box). Wire ccache as the C/C++ compiler launcher on the six
C++ build lanes (linux, linux-asan, coin-bch, coin-bch-asan, qt, dgb-auxdoge)
and add the ccache package to their apt lists so the binary is present on
both self-hosted and fork-fallback runners. Completes the all-lane
self-hosted switch (Linux+macOS+Windows).
@frstrtr
frstrtr force-pushed the ci-steward/self-hosted-runners branch from 36fb6b5 to 13d55e4 Compare June 24, 2026 19:24
frstrtr added a commit that referenced this pull request Jun 24, 2026
… + ccache

Apply the #439 fork-gate to every ubuntu-24.04 job: push/internal-branch
PRs run on [self-hosted, Linux, X64, c2pool-build] (VM905, 32 cores);
fork PRs fall back to GitHub-hosted ubuntu-24.04. Build stays -j$(nproc)
(=32 on the box). Wire ccache as the C/C++ compiler launcher on the six
C++ build lanes (linux, linux-asan, coin-bch, coin-bch-asan, qt, dgb-auxdoge)
and add the ccache package to their apt lists so the binary is present on
both self-hosted and fork-fallback runners. Completes the all-lane
self-hosted switch (Linux+macOS+Windows).
@frstrtr
frstrtr force-pushed the ci-steward/self-hosted-runners branch from 13d55e4 to e285cb8 Compare June 24, 2026 21:07
frstrtr added a commit that referenced this pull request Jun 24, 2026
…romium

Two self-hosted-environment gaps on the #439 switch (not code):

- Linux x86_64 + ASan twin: reused workspace left a stale build_ci/
  build_asan, so ctest re-included empty gtest_discover_tests POST_BUILD
  files -> Unknown CMake command gtest_discover_tests_impl, exit 8. Add a
  self-hosted-only clean of each Linux build dir before configure
  (ccache keeps recompiles fast). Applied to all five Linux C++ lanes.

- Web-static verify: VM905 only ships snap chromium, which will not launch
  under the runner systemd cgroup (not a snap cgroup). Provision a real
  Chrome-for-Testing via @puppeteer/browsers on self-hosted; keep apt path
  for github-hosted. Harness already passes --no-sandbox.
frstrtr added a commit that referenced this pull request Jun 25, 2026
… + ccache

Apply the #439 fork-gate to every ubuntu-24.04 job: push/internal-branch
PRs run on [self-hosted, Linux, X64, c2pool-build] (VM905, 32 cores);
fork PRs fall back to GitHub-hosted ubuntu-24.04. Build stays -j$(nproc)
(=32 on the box). Wire ccache as the C/C++ compiler launcher on the six
C++ build lanes (linux, linux-asan, coin-bch, coin-bch-asan, qt, dgb-auxdoge)
and add the ccache package to their apt lists so the binary is present on
both self-hosted and fork-fallback runners. Completes the all-lane
self-hosted switch (Linux+macOS+Windows).
frstrtr added a commit that referenced this pull request Jun 25, 2026
…romium

Two self-hosted-environment gaps on the #439 switch (not code):

- Linux x86_64 + ASan twin: reused workspace left a stale build_ci/
  build_asan, so ctest re-included empty gtest_discover_tests POST_BUILD
  files -> Unknown CMake command gtest_discover_tests_impl, exit 8. Add a
  self-hosted-only clean of each Linux build dir before configure
  (ccache keeps recompiles fast). Applied to all five Linux C++ lanes.

- Web-static verify: VM905 only ships snap chromium, which will not launch
  under the runner systemd cgroup (not a snap cgroup). Provision a real
  Chrome-for-Testing via @puppeteer/browsers on self-hosted; keep apt path
  for github-hosted. Harness already passes --no-sandbox.
@frstrtr
frstrtr force-pushed the ci-steward/self-hosted-runners branch from 8d05ef2 to bcee602 Compare June 25, 2026 04:40
frstrtr added a commit that referenced this pull request Jun 25, 2026
… + ccache

Apply the #439 fork-gate to every ubuntu-24.04 job: push/internal-branch
PRs run on [self-hosted, Linux, X64, c2pool-build] (VM905, 32 cores);
fork PRs fall back to GitHub-hosted ubuntu-24.04. Build stays -j$(nproc)
(=32 on the box). Wire ccache as the C/C++ compiler launcher on the six
C++ build lanes (linux, linux-asan, coin-bch, coin-bch-asan, qt, dgb-auxdoge)
and add the ccache package to their apt lists so the binary is present on
both self-hosted and fork-fallback runners. Completes the all-lane
self-hosted switch (Linux+macOS+Windows).
@frstrtr
frstrtr force-pushed the ci-steward/self-hosted-runners branch from bcee602 to 12af779 Compare June 25, 2026 21:46
frstrtr added a commit that referenced this pull request Jun 25, 2026
…romium

Two self-hosted-environment gaps on the #439 switch (not code):

- Linux x86_64 + ASan twin: reused workspace left a stale build_ci/
  build_asan, so ctest re-included empty gtest_discover_tests POST_BUILD
  files -> Unknown CMake command gtest_discover_tests_impl, exit 8. Add a
  self-hosted-only clean of each Linux build dir before configure
  (ccache keeps recompiles fast). Applied to all five Linux C++ lanes.

- Web-static verify: VM905 only ships snap chromium, which will not launch
  under the runner systemd cgroup (not a snap cgroup). Provision a real
  Chrome-for-Testing via @puppeteer/browsers on self-hosted; keep apt path
  for github-hosted. Harness already passes --no-sandbox.
frstrtr added a commit that referenced this pull request Jun 26, 2026
…ad hang)

Self-hosted runner provisions a fresh Chrome-for-Testing build via
@puppeteer/browsers; under it page.goto(waitUntil:load) never fires the
load event within 15s because a non-essential subresource (favicon)
stays pending, failing Web-static verify on #439 only. The four dashboard
scripts are synchronous head scripts (executed by DOMContentLoaded) and
#defrag-canvas is gated by the explicit waitForSelector, so switching to
domcontentloaded is render-correct and cannot regress the GitHub-hosted
apt-chrome run on master.
frstrtr added 10 commits June 26, 2026 14:23
…rk fallback

Point the Windows job at the self-hosted runner (VM217,
labels self-hosted/Windows/X64/c2pool-build) for internal-branch
PRs and pushes; fork PRs fall back to GitHub-hosted windows-2022 so
untrusted code never executes on the self-hosted box. Completes the
self-hosted build fleet (Linux pending VM905 runner registration;
macOS x86_64 already self-hosted via #100). Conan cache retained.
…) + sccache

Repoint the macOS arm64 matrix lane to the self-hosted M4 Mac mini
(label c2pool-mac-arm) on push and internal-branch PRs, with a
GitHub-hosted fork fallback to macos-14 — same fork-gate shape as the
Windows lane in this branch. Add sccache compiler launcher (persists
across self-hosted runs; no-op-safe on the hosted fallback).

Linux (VM905) leg held separately until that runner is registered.
… + ccache

Apply the #439 fork-gate to every ubuntu-24.04 job: push/internal-branch
PRs run on [self-hosted, Linux, X64, c2pool-build] (VM905, 32 cores);
fork PRs fall back to GitHub-hosted ubuntu-24.04. Build stays -j$(nproc)
(=32 on the box). Wire ccache as the C/C++ compiler launcher on the six
C++ build lanes (linux, linux-asan, coin-bch, coin-bch-asan, qt, dgb-auxdoge)
and add the ccache package to their apt lists so the binary is present on
both self-hosted and fork-fallback runners. Completes the all-lane
self-hosted switch (Linux+macOS+Windows).
VM217 (c2pool-windows-217) is a bare self-hosted runner with no build
toolchain — no cmake, no MSVC/VS 2022, no SDK — so the Windows lane fails
at configure. GitHub-hosted windows-2022 ships all of it.

Keep Linux (8 lanes -> VM905) and macOS (M4/Intel) on the self-hosted
fleet with the fork-gate; only the Windows job falls back to
github-hosted. Follow-up PR will flip Windows back to the fork-gated
self-hosted expr once VM217 has the VS 2022 Build Tools C++ workload +
cmake + deps installed and builds c2pool clean.
VM905 now hosts 4 parallel self-hosted runners sharing one ccache. Cap
per-job cmake/ctest parallelism at -j8 so 4 concurrent Linux jobs total
32 threads on the 32-core box instead of 4x nproc(32)=128 = thrash.
macOS (sysctl hw.ncpu) and Windows (NUMBER_OF_PROCESSORS) lanes
unchanged; ccache retained for cross-job warm hits.
VM905 runs 4 parallel self-hosted runners; concurrent apt-get install
collided on /var/lib/dpkg/lock-frontend (exit 100), failing 6/7 Linux
lanes. Core build deps are pre-provisioned by vm-fleet, so gate the 5
Install system dependencies steps to runner.environment == github-hosted
(skip on self-hosted, still run on fork fallback). Chromium and Qt6 are
not in the provisioned set, so keep their apt but flock-serialize across
the 4 runners via /tmp/c2pool-apt.lock.
…romium

Two self-hosted-environment gaps on the #439 switch (not code):

- Linux x86_64 + ASan twin: reused workspace left a stale build_ci/
  build_asan, so ctest re-included empty gtest_discover_tests POST_BUILD
  files -> Unknown CMake command gtest_discover_tests_impl, exit 8. Add a
  self-hosted-only clean of each Linux build dir before configure
  (ccache keeps recompiles fast). Applied to all five Linux C++ lanes.

- Web-static verify: VM905 only ships snap chromium, which will not launch
  under the runner systemd cgroup (not a snap cgroup). Provision a real
  Chrome-for-Testing via @puppeteer/browsers on self-hosted; keep apt path
  for github-hosted. Harness already passes --no-sandbox.
… (PRE_TEST exit-8 fix)

The plain Linux x86_64 and AsAN+UBSan lanes failed at ctest with exit 8:
  CMake Error at build_*/test/test_dgb_subsidy[1]_include.cmake:6
  Unknown CMake command "gtest_discover_tests_impl".
preceded by "include() given empty file name (ignored)".

include(GoogleTest) sets _GOOGLETEST_DISCOVER_TESTS_SCRIPT (the path to
GoogleTestAddTests.cmake). It was at line ~176, AFTER the first three
gtest_discover_tests() calls (test_dgb_subsidy/coinbase_value/utxo, all
DISCOVERY_MODE PRE_TEST). In PRE_TEST the generated <tgt>[1]_include.cmake
includes that script at ctest time to define gtest_discover_tests_impl; with
the var unset the include path was empty and ctest aborted.

The clean-build-dir step (8d05ef2) removed the cached _tests.cmake that had
masked the broken else-branch, surfacing it on the first PRE_TEST target.
Fix: hoist include(GoogleTest) to the top of the BUILD_TESTING block.
…ad hang)

Self-hosted runner provisions a fresh Chrome-for-Testing build via
@puppeteer/browsers; under it page.goto(waitUntil:load) never fires the
load event within 15s because a non-essential subresource (favicon)
stays pending, failing Web-static verify on #439 only. The four dashboard
scripts are synchronous head scripts (executed by DOMContentLoaded) and
#defrag-canvas is gated by the explicit waitForSelector, so switching to
domcontentloaded is render-correct and cannot regress the GitHub-hosted
apt-chrome run on master.
The self-hosted switch routed the sub-minute Web-static verify job onto the
c2pool-build Linux runner along with the heavy C++ lanes. The puppeteer
pixel-regression harness cannot complete page navigation there: page.goto
times out at 15s under both load and domcontentloaded waitUntil, because the
self-hosted runner environment never fires the navigation-complete event for
dashboard.html. The job is green on ubuntu-24.04 and gains nothing from the
32-core box, so pin it back to GitHub-hosted. Dashboard-owned web-static
assets and the visual harness are unchanged and not the cause.
frstrtr added a commit that referenced this pull request Jul 3, 2026
VM217 (c2pool-windows-217) toolchain probe run 28679257030 is green across
Python 3.12, Conan 2, CMake, Git and MSVC/VS 2022 C++ build tools. Route
internal PRs/pushes to the self-hosted runner via the #439 fork-gate expr;
fork PRs keep GitHub-hosted windows-2022. setup-python gated to github-hosted
so VM217 uses its pre-provisioned interpreter. Last GitHub-hosted C++ lane.
frstrtr added a commit that referenced this pull request Jul 13, 2026
ci(release): repoint macOS/Windows/checksums to self-hosted runners (finish #439)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant