CI #6382
Workflow file for this run
This file contains 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 | |
on: | |
pull_request: | |
merge_group: | |
env: | |
CARGO_INCREMENTAL: 0 | |
CARGO_TERM_COLOR: always | |
FLUTTER_VERSION: "3.22.1" | |
jobs: | |
formatting-dprint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@nightly | |
with: | |
components: rustfmt | |
- uses: dprint/[email protected] | |
generate-ffi: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: extractions/setup-just@v1 | |
- name: Setup rust toolchain | |
run: rustup show | |
- uses: Swatinem/[email protected] | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
channel: "stable" | |
cache: true | |
cache-key: flutter-${{ env.FLUTTER_VERSION }} | |
cache-path: ${{ runner.tool_cache }}/flutter | |
- name: Install FFI bindings | |
run: just deps-gen | |
- name: Generate FFI bindings | |
run: just gen | |
- name: Upload Rust bridge_generated directory | |
uses: actions/upload-artifact@v2 | |
with: | |
name: rust_bridge_generated | |
path: mobile/native/src/bridge_generated/ | |
- name: Upload Dart bridge_generated directory | |
uses: actions/upload-artifact@v2 | |
with: | |
name: dart_bridge_generated | |
path: mobile/lib/bridge_generated/ | |
- name: Upload Dart mocks directory | |
uses: actions/upload-artifact@v2 | |
with: | |
name: dart_mocks_generated | |
path: mobile/test/*.mocks.dart | |
lint-commits: | |
runs-on: ubuntu-latest | |
if: github.event.ref != 'refs/heads/main' | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Get all commits on current main | |
run: git fetch origin main | |
- name: Log all commits we will analyse | |
run: git log --pretty=format:%s origin/main..HEAD | |
- name: Disallow fixup! commits | |
run: git log --pretty=format:%s origin/main..HEAD | grep -zv fixup! | |
- name: Disallow squash! commits | |
run: git log --pretty=format:%s origin/main..HEAD | grep -zv squash! | |
clippy: | |
runs-on: ubuntu-latest | |
needs: generate-ffi | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: extractions/setup-just@v1 | |
- name: Setup rust toolchain | |
run: rustup show | |
- uses: Swatinem/[email protected] | |
- name: Download RUST FFI bindings | |
uses: actions/download-artifact@v2 | |
with: | |
name: rust_bridge_generated | |
path: mobile/native/src/bridge_generated | |
- run: cargo clippy --all-targets --all-features -- -D warnings | |
flutter-format-and-lint: | |
runs-on: ubuntu-latest | |
needs: generate-ffi | |
name: "Format and lint Flutter code" | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: extractions/setup-just@v1 | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
channel: "stable" | |
cache: true | |
cache-key: flutter-${{ env.FLUTTER_VERSION }} | |
cache-path: ${{ runner.tool_cache }}/flutter | |
- name: Download Dart mocks directory | |
uses: actions/download-artifact@v2 | |
with: | |
name: dart_mocks_generated | |
path: mobile/test | |
- name: Download Dart bridge_generated directory | |
uses: actions/download-artifact@v2 | |
with: | |
name: dart_bridge_generated | |
path: mobile/lib/bridge_generated | |
- name: Verify flutter formatting | |
# Mocks are actually ignored by the linter because they include `// ignore_for_file: type=lint`, but `dart format` reports changes on them nonetheless. | |
# The solution using a `find` command is from here: https://github.com/dart-lang/dart_style/issues/864 | |
run: dart format --output=none --set-exit-if-changed --line-length 100 $(find . -name "*.dart" -not \( -name "*.*freezed.dart" -o -name "*.mocks.dart" \) ) | |
- name: Analyse flutter code | |
run: just lint-flutter | |
unit-tests: | |
runs-on: ubuntu-latest | |
needs: [generate-ffi, clippy] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: extractions/setup-just@v1 | |
- name: Setup rust toolchain | |
run: rustup show | |
- uses: Swatinem/[email protected] | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
channel: "stable" | |
cache: true | |
cache-key: flutter-${{ env.FLUTTER_VERSION }} | |
cache-path: ${{ runner.tool_cache }}/flutter | |
- name: Download Rust generated FFI flutter bindings | |
uses: actions/download-artifact@v2 | |
with: | |
name: rust_bridge_generated | |
path: mobile/native/src/bridge_generated | |
- name: Running cargo tests | |
run: RUST_BACKTRACE=1 cargo test | |
# Flutter tests run `build_runner`, so no need to download mocks | |
- name: Download Dart bridge_generated directory | |
uses: actions/download-artifact@v2 | |
with: | |
name: dart_bridge_generated | |
path: mobile/lib/bridge_generated | |
- name: Running flutter tests | |
run: just flutter-test | |
xxi-node-tests: | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
name: "10101 node tests" | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: extractions/setup-just@v1 | |
- name: Setup rust toolchain | |
run: rustup show | |
- uses: Swatinem/[email protected] | |
- uses: ndeloof/[email protected] | |
- name: Start containers | |
run: | | |
just docker | |
sleep 10 # We need to give docker a bit of time to startup | |
- name: Test containers are up | |
run: | | |
curl http://localhost:8080/bitcoin -d '{"jsonrpc": "1.0", "method": "sendtoaddress", "params": ["bcrt1qylgu6ffkp3p0m8tw8kp4tt2dmdh755f4r5dq7s", 0.1]}' | |
- name: Run node tests | |
run: RUST_BACKTRACE=1 cargo test -p xxi-node -- --ignored --nocapture --test-threads=1 | |
- name: bitcoin logs on e2e tests error | |
if: failure() | |
run: docker logs bitcoin | |
- name: faucet logs on e2e tests error | |
if: failure() | |
run: docker logs faucet | |
- name: electrs logs on e2e tests error | |
if: failure() | |
run: docker logs electrs | |
- name: esplora logs on e2e tests error | |
if: failure() | |
run: docker logs esplora | |
- name: show disk space after tests | |
if: always() | |
run: df -h | |
e2e_tests_prepare: | |
needs: generate-ffi | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- name: Free Disk Space (Ubuntu) | |
uses: jlumbroso/free-disk-space@main | |
with: | |
# this might remove tools that are actually needed, | |
# when set to "true" but frees about 6 GB | |
tool-cache: false | |
large-packages: false | |
- uses: actions/checkout@v3 | |
- uses: extractions/setup-just@v1 | |
- name: Setup rust toolchain | |
run: rustup show | |
- uses: actions/cache@v4 | |
env: | |
cache-name: test-cache | |
with: | |
path: | | |
target/debug/deps | |
target/debug/coordinator | |
key: test-cache-${{ github.run_id }}-${{ github.run_number }} | |
- name: Download RUST FFI bindings | |
uses: actions/download-artifact@v2 | |
with: | |
name: rust_bridge_generated | |
path: mobile/native/src/bridge_generated | |
- name: build e2e tests only | |
run: cargo test -p tests-e2e --no-run | |
- name: build coordinator | |
run: cargo build --bin coordinator | |
- name: set-matrix | |
id: set-matrix | |
run: echo "matrix=$(scripts/get_test_list.sh)}" >> $GITHUB_OUTPUT | |
e2e_tests: | |
name: e2e-tests | |
needs: e2e_tests_prepare | |
runs-on: ubuntu-latest | |
continue-on-error: true | |
strategy: | |
matrix: | |
tests: ${{ fromJson(needs.e2e_tests_prepare.outputs.matrix) }} | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/cache@v4 | |
env: | |
cache-name: test-cache | |
with: | |
path: | | |
target/debug/deps | |
target/debug/coordinator | |
key: test-cache-${{ github.run_id }}-${{ github.run_number }} | |
- uses: extractions/setup-just@v1 | |
- uses: ndeloof/[email protected] | |
- name: Start containers | |
run: | | |
just docker | |
sleep 10 # We need to give docker a bit of time to startup | |
- name: show disk space before tests | |
run: df -h | |
- name: Test containers are up | |
run: | | |
curl http://localhost:8080/bitcoin -d '{"jsonrpc": "1.0", "method": "sendtoaddress", "params": ["bcrt1qylgu6ffkp3p0m8tw8kp4tt2dmdh755f4r5dq7s", 0.1]}' | |
- name: Run coordinator | |
run: | | |
#!/usr/bin/env bash | |
set -euxo pipefail | |
just wait-for-electrs-to-be-ready | |
settings_target_path="data/coordinator/regtest/coordinator-settings.toml" | |
cp coordinator/example-settings/test-coordinator-settings.toml "$settings_target_path" | |
echo "Copied test settings to $settings_target_path" | |
echo "Starting coordinator" | |
ls -lah ./target/debug/ | |
./target/debug/coordinator &> ./data/coordinator/regtest.log & | |
just wait-for-coordinator-to-be-ready | |
echo "Coordinator successfully started." | |
echo "Starting coordinator postgrest server" | |
just postgrest-coordinator | |
echo "Started coordinator postgrest server" | |
- name: Run maker | |
run: | | |
just run-maker-detached | |
echo "Maker successfully started." | |
- name: Run lnd-mock | |
run: | | |
just run-lnd-mock-detached | |
echo "Lnd mock successfully started." | |
- name: Run e2e tests | |
run: RUST_BACKTRACE=1 ${{ matrix.tests }} --nocapture --ignored | |
- name: Print maker logs on e2e tests error | |
if: failure() | |
run: cat data/maker/regtest.log | |
- name: Print coordinator logs on e2e tests error | |
if: failure() | |
run: cat data/coordinator/regtest.log | |
- name: bitcoin logs on e2e tests error | |
if: failure() | |
run: docker logs bitcoin | |
- name: faucet logs on e2e tests error | |
if: failure() | |
run: docker logs faucet | |
- name: electrs logs on e2e tests error | |
if: failure() | |
run: docker logs electrs | |
- name: esplora logs on e2e tests error | |
if: failure() | |
run: docker logs esplora | |
- name: database logs on e2e tests error | |
if: failure() | |
run: docker logs db | |
- name: show disk space after tests | |
if: always() | |
run: df -h | |
e2e_tests_check: | |
needs: e2e_tests | |
runs-on: ubuntu-latest | |
steps: | |
- run: echo "success" | |
payout-curve: | |
runs-on: ubuntu-latest | |
needs: generate-ffi | |
timeout-minutes: 30 | |
steps: | |
- name: Free Disk Space (Ubuntu) | |
uses: jlumbroso/free-disk-space@main | |
with: | |
# this might remove tools that are actually needed, | |
# when set to "true" but frees about 6 GB | |
tool-cache: false | |
large-packages: false | |
- uses: actions/checkout@v3 | |
- uses: extractions/setup-just@v1 | |
- name: Setup rust toolchain | |
run: rustup show | |
- uses: Swatinem/[email protected] | |
- name: Download RUST FFI bindings | |
uses: actions/download-artifact@v2 | |
with: | |
name: rust_bridge_generated | |
path: mobile/native/src/bridge_generated | |
- name: Run payout curve example tests | |
run: cargo run -p payout_curve --example payout_curve_csv |