feat(test): add interop test harness for CLN, LND, Eclair #204
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI Checks - CLN Integration Tests | |
| on: [push, pull_request] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| check-cln: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Create temporary directory for CLN data | |
| run: echo "CLN_DATA_DIR=$(mktemp -d)" >> $GITHUB_ENV | |
| - name: Start bitcoind, electrs, and lightningd | |
| run: docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml up -d | |
| - name: Wait for bitcoind to be healthy | |
| run: | | |
| for i in $(seq 1 30); do | |
| if docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec bitcoin bitcoin-cli -regtest -rpcuser=user -rpcpassword=pass getblockchaininfo > /dev/null 2>&1; then | |
| echo "bitcoind is ready" | |
| exit 0 | |
| fi | |
| echo "Waiting for bitcoind... ($i/30)" | |
| sleep 2 | |
| done | |
| echo "ERROR: bitcoind not ready" | |
| exit 1 | |
| - name: Mine initial block for CLN | |
| run: | | |
| docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec bitcoin bitcoin-cli -regtest -rpcuser=user -rpcpassword=pass createwallet miner | |
| ADDR=$(docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec bitcoin bitcoin-cli -regtest -rpcuser=user -rpcpassword=pass -rpcwallet=miner getnewaddress) | |
| docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec bitcoin bitcoin-cli -regtest -rpcuser=user -rpcpassword=pass generatetoaddress 1 "$ADDR" | |
| docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec bitcoin bitcoin-cli -regtest -rpcuser=user -rpcpassword=pass unloadwallet miner | |
| - name: Start lightningd | |
| run: docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml up -d cln | |
| env: | |
| CLN_DATA_DIR: ${{ env.CLN_DATA_DIR }} | |
| - name: Wait for CLN to be ready | |
| run: | | |
| for i in $(seq 1 30); do | |
| if docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec cln test -S /root/.lightning/regtest/lightning-rpc 2>/dev/null; then | |
| echo "CLN RPC socket found" | |
| break | |
| fi | |
| echo "Waiting for CLN RPC socket... ($i/30)" | |
| sleep 2 | |
| done | |
| docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec cln test -S /root/.lightning/regtest/lightning-rpc || { | |
| echo "ERROR: CLN RPC socket not found after 60 seconds" | |
| docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml logs cln | |
| exit 1 | |
| } | |
| - name: Set permissions for CLN data directory | |
| run: | | |
| sudo chown -R $(id -u):$(id -g) $CLN_DATA_DIR | |
| sudo chmod -R u+rwX,go+rX $CLN_DATA_DIR | |
| env: | |
| CLN_DATA_DIR: ${{ env.CLN_DATA_DIR }} | |
| - name: Run CLN integration tests | |
| run: CLN_SOCKET_PATH=$CLN_DATA_DIR/regtest/lightning-rpc | |
| RUSTFLAGS="--cfg cln_test" cargo test --test integration_tests_cln -- --show-output --test-threads=1 | |
| env: | |
| CLN_DATA_DIR: ${{ env.CLN_DATA_DIR }} |