From 83f71f0828e706ee13a5b4ff231032055b48b8ee Mon Sep 17 00:00:00 2001 From: benthecarman Date: Fri, 5 Jun 2026 10:56:06 -0500 Subject: [PATCH 1/2] Add 60 minute timeout to CI jobs We ran out of our CI limit largely from ldk-node. We had a few jobs this week run for multiple hours because of a hanging test. Add 60 minute timeout to all our jobs to prevent this in the future. --- .github/workflows/audit.yml | 1 + .github/workflows/benchmarks.yml | 1 + .github/workflows/cln-integration.yml | 1 + .github/workflows/cron-weekly-rustfmt.yml | 1 + .github/workflows/eclair-integration.yml | 1 + .github/workflows/hrn-integration.yml | 3 ++- .github/workflows/kotlin.yml | 1 + .github/workflows/lnd-integration.yml | 1 + .github/workflows/python.yml | 1 + .github/workflows/rust.yml | 3 +++ .github/workflows/semver.yml | 1 + .github/workflows/swift.yml | 1 + .github/workflows/vss-integration.yml | 1 + .github/workflows/vss-no-auth-integration.yml | 1 + 14 files changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml index e2ae378dd7..5e5149ac5a 100644 --- a/.github/workflows/audit.yml +++ b/.github/workflows/audit.yml @@ -6,6 +6,7 @@ on: jobs: audit: + timeout-minutes: 60 permissions: issues: write checks: write diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml index cd3980b9af..32cd4782b9 100644 --- a/.github/workflows/benchmarks.yml +++ b/.github/workflows/benchmarks.yml @@ -8,6 +8,7 @@ concurrency: jobs: benchmark: + timeout-minutes: 60 runs-on: ubuntu-latest env: TOOLCHAIN: stable diff --git a/.github/workflows/cln-integration.yml b/.github/workflows/cln-integration.yml index 81eb822502..3c1a8f5809 100644 --- a/.github/workflows/cln-integration.yml +++ b/.github/workflows/cln-integration.yml @@ -8,6 +8,7 @@ concurrency: jobs: check-cln: + timeout-minutes: 60 runs-on: ubuntu-latest steps: - name: Checkout repository diff --git a/.github/workflows/cron-weekly-rustfmt.yml b/.github/workflows/cron-weekly-rustfmt.yml index 9e54ab9f32..7bb55a86d1 100644 --- a/.github/workflows/cron-weekly-rustfmt.yml +++ b/.github/workflows/cron-weekly-rustfmt.yml @@ -11,6 +11,7 @@ on: jobs: format: name: Nightly rustfmt + timeout-minutes: 60 runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/eclair-integration.yml b/.github/workflows/eclair-integration.yml index 56d51b77ee..daa4572ccd 100644 --- a/.github/workflows/eclair-integration.yml +++ b/.github/workflows/eclair-integration.yml @@ -8,6 +8,7 @@ concurrency: jobs: check-eclair: + timeout-minutes: 60 runs-on: ubuntu-latest steps: - name: Checkout repository diff --git a/.github/workflows/hrn-integration.yml b/.github/workflows/hrn-integration.yml index f7ded7bc56..767210f100 100644 --- a/.github/workflows/hrn-integration.yml +++ b/.github/workflows/hrn-integration.yml @@ -8,6 +8,7 @@ concurrency: jobs: build-and-test: + timeout-minutes: 60 runs-on: ubuntu-latest steps: @@ -42,4 +43,4 @@ jobs: - name: Run HRN Integration Tests run: | RUSTFLAGS="--cfg no_download --cfg hrn_tests $RUSTFLAGS" cargo test --test integration_tests_hrn - RUSTFLAGS="--cfg no_download --cfg hrn_tests $RUSTFLAGS" cargo test --test integration_tests_hrn --features uniffi \ No newline at end of file + RUSTFLAGS="--cfg no_download --cfg hrn_tests $RUSTFLAGS" cargo test --test integration_tests_hrn --features uniffi diff --git a/.github/workflows/kotlin.yml b/.github/workflows/kotlin.yml index f4d55e3bcc..f3066e4c7e 100644 --- a/.github/workflows/kotlin.yml +++ b/.github/workflows/kotlin.yml @@ -8,6 +8,7 @@ concurrency: jobs: check-kotlin: + timeout-minutes: 60 runs-on: ubuntu-latest env: diff --git a/.github/workflows/lnd-integration.yml b/.github/workflows/lnd-integration.yml index caefbdb6b2..6006ecf2ba 100644 --- a/.github/workflows/lnd-integration.yml +++ b/.github/workflows/lnd-integration.yml @@ -8,6 +8,7 @@ concurrency: jobs: check-lnd: + timeout-minutes: 60 runs-on: ubuntu-latest steps: - name: Checkout repository diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index e154faa7e9..be5bbeb25a 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -8,6 +8,7 @@ concurrency: jobs: check-python: + timeout-minutes: 60 runs-on: ubuntu-latest env: diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 16064fa45c..d8e0932b18 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -8,6 +8,7 @@ concurrency: jobs: build: + timeout-minutes: 60 strategy: matrix: platform: [ @@ -92,6 +93,7 @@ jobs: linting: name: Linting + timeout-minutes: 60 runs-on: ubuntu-latest steps: - name: Checkout source code @@ -107,6 +109,7 @@ jobs: doc: name: Documentation + timeout-minutes: 60 runs-on: ubuntu-latest env: RUSTDOCFLAGS: -Dwarnings diff --git a/.github/workflows/semver.yml b/.github/workflows/semver.yml index 0fdfbe2137..52c505b5b8 100644 --- a/.github/workflows/semver.yml +++ b/.github/workflows/semver.yml @@ -3,6 +3,7 @@ on: [push, pull_request] jobs: semver-checks: + timeout-minutes: 60 runs-on: ubuntu-latest steps: - name: Checkout source code diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index c1e385e2d3..2973892bf9 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -8,6 +8,7 @@ concurrency: jobs: check-swift: + timeout-minutes: 60 runs-on: macos-latest steps: diff --git a/.github/workflows/vss-integration.yml b/.github/workflows/vss-integration.yml index c67e9194e1..7ffea3dd67 100644 --- a/.github/workflows/vss-integration.yml +++ b/.github/workflows/vss-integration.yml @@ -8,6 +8,7 @@ concurrency: jobs: build-and-test: + timeout-minutes: 60 runs-on: ubuntu-latest services: diff --git a/.github/workflows/vss-no-auth-integration.yml b/.github/workflows/vss-no-auth-integration.yml index 35666df038..8ee2fe54b9 100644 --- a/.github/workflows/vss-no-auth-integration.yml +++ b/.github/workflows/vss-no-auth-integration.yml @@ -8,6 +8,7 @@ concurrency: jobs: build-and-test: + timeout-minutes: 60 runs-on: ubuntu-latest services: From c2ee8b061ac8c35fcf9d77a00da63e83c822c35d Mon Sep 17 00:00:00 2001 From: benthecarman Date: Fri, 5 Jun 2026 11:08:06 -0500 Subject: [PATCH 2/2] Split CI between self-hosted and GitHub runners Run the Rust build/test matrix, linting, docs, and benchmarks on the self-hosted runner, but keep jobs the runner cannot serve on GitHub's ubuntu-latest: - Docker-based integration tests (cln, eclair, lnd, python, kotlin) and the Postgres/VSS service-container jobs, since the self-hosted runner has no Docker installed. - Third-party node-action jobs (semver checks, security audit, nightly rustfmt), since the runner is too old to load actions that require the node24 runtime. For the jobs that stay self-hosted, adapt to the runner environment: - Pin actions/checkout to v4 and actions/cache to v4; their newer releases run on node24, which the self-hosted runner does not support. - Install the Rust toolchain in its own step so rustup and cargo land on PATH for the steps that follow; invoking them in the same step as the rustup install fails because PATH is not refreshed mid-step. Assisted by Claude Code. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/benchmarks.yml | 11 ++++++----- .github/workflows/cron-weekly-rustfmt.yml | 2 +- .github/workflows/hrn-integration.yml | 2 +- .github/workflows/rust.yml | 23 ++++++++++++----------- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml index 32cd4782b9..4a884ab2a6 100644 --- a/.github/workflows/benchmarks.yml +++ b/.github/workflows/benchmarks.yml @@ -9,25 +9,26 @@ concurrency: jobs: benchmark: timeout-minutes: 60 - runs-on: ubuntu-latest + runs-on: self-hosted env: TOOLCHAIN: stable steps: - name: Checkout source code - uses: actions/checkout@v6 + uses: actions/checkout@v4 - name: Install Rust toolchain run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal --default-toolchain stable - rustup override set stable + - name: Set Rust override + run: rustup override set stable - name: Enable caching for bitcoind id: cache-bitcoind - uses: actions/cache@v5 + uses: actions/cache@v4 with: path: bin/bitcoind-${{ runner.os }}-${{ runner.arch }} key: bitcoind-29.0-${{ runner.os }}-${{ runner.arch }} - name: Enable caching for electrs id: cache-electrs - uses: actions/cache@v5 + uses: actions/cache@v4 with: path: bin/electrs-${{ runner.os }}-${{ runner.arch }} key: electrs-${{ runner.os }}-${{ runner.arch }} diff --git a/.github/workflows/cron-weekly-rustfmt.yml b/.github/workflows/cron-weekly-rustfmt.yml index 7bb55a86d1..65ca21511e 100644 --- a/.github/workflows/cron-weekly-rustfmt.yml +++ b/.github/workflows/cron-weekly-rustfmt.yml @@ -12,7 +12,7 @@ jobs: format: name: Nightly rustfmt timeout-minutes: 60 - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: dtolnay/rust-toolchain@nightly diff --git a/.github/workflows/hrn-integration.yml b/.github/workflows/hrn-integration.yml index 767210f100..76a95f93de 100644 --- a/.github/workflows/hrn-integration.yml +++ b/.github/workflows/hrn-integration.yml @@ -9,7 +9,7 @@ concurrency: jobs: build-and-test: timeout-minutes: 60 - runs-on: ubuntu-latest + runs-on: self-hosted steps: - name: Checkout source code diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index d8e0932b18..106f2c4f95 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: platform: [ - ubuntu-latest, + self-hosted, macos-latest, windows-latest, ] @@ -25,7 +25,7 @@ jobs: - toolchain: stable check-fmt: true build-uniffi: true - platform: ubuntu-latest + platform: self-hosted - toolchain: stable platform: macos-latest - toolchain: stable @@ -35,7 +35,7 @@ jobs: runs-on: ${{ matrix.platform }} steps: - name: Checkout source code - uses: actions/checkout@v6 + uses: actions/checkout@v4 - name: Install Rust ${{ matrix.toolchain }} toolchain run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal --default-toolchain ${{ matrix.toolchain }} @@ -51,13 +51,13 @@ jobs: run: echo "RUSTFLAGS=-D warnings" >> "$GITHUB_ENV" - name: Enable caching for bitcoind id: cache-bitcoind - uses: actions/cache@v5 + uses: actions/cache@v4 with: path: bin/bitcoind-${{ runner.os }}-${{ runner.arch }} key: bitcoind-29.0-${{ runner.os }}-${{ runner.arch }} - name: Enable caching for electrs id: cache-electrs - uses: actions/cache@v5 + uses: actions/cache@v4 with: path: bin/electrs-${{ runner.os }}-${{ runner.arch }} key: electrs-${{ runner.os }}-${{ runner.arch }} @@ -94,14 +94,15 @@ jobs: linting: name: Linting timeout-minutes: 60 - runs-on: ubuntu-latest + runs-on: self-hosted steps: - name: Checkout source code - uses: actions/checkout@v6 - - name: Install Rust and clippy + uses: actions/checkout@v4 + - name: Install Rust stable toolchain run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal --default-toolchain stable - rustup component add clippy + - name: Add clippy component + run: rustup component add clippy - name: Ban `unwrap` in library code run: | cargo clippy --lib --verbose --color always -- -A warnings -D clippy::unwrap_used -A clippy::tabs_in_doc_comments @@ -110,11 +111,11 @@ jobs: doc: name: Documentation timeout-minutes: 60 - runs-on: ubuntu-latest + runs-on: self-hosted env: RUSTDOCFLAGS: -Dwarnings steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@nightly - uses: dtolnay/install@cargo-docs-rs - run: cargo docs-rs