name: CI on: push: branches: [main] pull_request: permissions: contents: read # A new push to the same branch supersedes the run in flight. concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: build: # Linux only for now: the rewrite targets Linux/macOS first and Windows # is explicitly deferred (no daemonize/attach equivalent yet). macOS is # meant to follow once Phase 0 is proven here, not day one. name: build & smoke test (ubuntu) runs-on: ubuntu-latest timeout-minutes: 15 steps: - uses: actions/checkout@v7 # libtorrent-rasterbar, ftxui, curl, nlohmann-json, and doctest all ship # dev packages (+ CMake config files, where they need one) directly in # Debian/Ubuntu, so no vcpkg bootstrap is needed. - name: Install toolchain and libraries run: | sudo apt-get update sudo apt-get install -y --no-install-recommends \ cmake build-essential pkgconf \ libtorrent-rasterbar-dev libftxui-dev \ libboost-system-dev libssl-dev \ libcurl4-openssl-dev nlohmann-json3-dev doctest-dev - name: Configure run: cmake -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo - name: Build run: cmake --build build -j"$(nproc)" - name: Run test suite working-directory: build run: ctest --output-on-failure # Phase 0 smoke tests: prove the toolchain actually runs, not just links. # libtorrent_hello needs no network guarantee to pass (peers may or may # not be reachable from a CI runner) — it only has to start, poll # alerts, and shut down cleanly within the timeout. - name: Smoke test libtorrent hello-world run: timeout 20 ./build/phase0/libtorrent_hello # No real TTY in CI, so ftxui_hello self-exits via this env var instead # of waiting on a keypress. - name: Smoke test FTXUI hello-world run: TORLINK_PHASE0_AUTOEXIT=1 timeout 10 ./build/phase0/ftxui_hello < /dev/null