feat: implement wallet sagas #6344
Workflow file for this run
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 | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: | |
| - main | |
| - "v[0-9]*.[0-9]*.x" # Match version branches like v0.13.x, v1.0.x, etc. | |
| release: | |
| types: [created] | |
| # Cancel previous runs on same PR | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| pre-commit-checks: | |
| name: "Cargo fmt, typos" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| installCommand: nix profile install nixpkgs#cachix | |
| continue-on-error: true | |
| - name: Cargo fmt | |
| run: nix develop -i -L .#stable --command cargo fmt --check | |
| - name: typos | |
| run: nix develop -i -L .#stable --command typos | |
| # Discover example checks from flake - single source of truth | |
| discover-examples: | |
| name: "Discover examples" | |
| runs-on: self-hosted | |
| timeout-minutes: 5 | |
| outputs: | |
| examples: ${{ steps.examples.outputs.examples }} | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: Get example check names | |
| id: examples | |
| run: | | |
| # Get all example check names (prefixed with "example-") | |
| examples=$(nix eval .#checks.x86_64-linux --apply 'attrs: builtins.filter (n: builtins.substring 0 8 n == "example-") (builtins.attrNames attrs)' --json) | |
| echo "examples=$examples" >> $GITHUB_OUTPUT | |
| echo "Found examples: $examples" | |
| examples: | |
| name: "Example: ${{ matrix.example }}" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| needs: [pre-commit-checks, discover-examples] | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| example: ${{ fromJson(needs.discover-examples.outputs.examples) }} | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| continue-on-error: true | |
| - name: Build example | |
| run: nix build -L .#${{ matrix.example }} | |
| - name: Run example | |
| run: | | |
| # Extract binary name by removing "example-" prefix | |
| BINARY_NAME="${{ matrix.example }}" | |
| BINARY_NAME="${BINARY_NAME#example-}" | |
| ./result/bin/$BINARY_NAME | |
| # Discover clippy + test checks from flake - single source of truth | |
| discover-checks: | |
| name: "Discover checks" | |
| runs-on: self-hosted | |
| timeout-minutes: 5 | |
| outputs: | |
| checks: ${{ steps.checks.outputs.checks }} | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: Get check names | |
| id: checks | |
| run: | | |
| # Get all check names except pre-commit-check, example-*, msrv-*, wasm-*, doc-tests, strict-docs, ffi-tests | |
| # Those have their own dedicated CI jobs | |
| checks=$(nix eval .#checks.x86_64-linux --apply 'attrs: builtins.filter (n: n != "pre-commit-check" && n != "doc-tests" && n != "strict-docs" && n != "ffi-tests" && builtins.substring 0 8 n != "example-" && builtins.substring 0 5 n != "msrv-" && builtins.substring 0 5 n != "wasm-") (builtins.attrNames attrs)' --json) | |
| echo "checks=$checks" >> $GITHUB_OUTPUT | |
| echo "Found checks: $checks" | |
| # Dynamic clippy + test matrix - uses cached deps from Cachix | |
| # Each check runs both clippy and unit tests for that crate/feature combination | |
| clippy-and-test: | |
| name: "Check: ${{ matrix.check }}" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| needs: [pre-commit-checks, discover-checks] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| check: ${{ fromJson(needs.discover-checks.outputs.checks) }} | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| continue-on-error: true | |
| - name: Run clippy and tests | |
| run: nix build -L .#checks.x86_64-linux.${{ matrix.check }} | |
| # Tests that require a running PostgreSQL instance | |
| postgres-tests: | |
| name: "PostgreSQL Tests" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| needs: pre-commit-checks | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| continue-on-error: true | |
| - name: Run clippy and tests for cdk-postgres | |
| run: nix develop -i -L .#stable --command bash -c "start-postgres && cargo clippy -p cdk-postgres -- -D warnings && cargo test -p cdk-postgres" | |
| regtest-itest: | |
| name: "Integration regtest tests" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| needs: pre-commit-checks | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| database: [SQLITE, POSTGRES] | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| continue-on-error: true | |
| - name: Test | |
| run: nix develop -i -L .#stable --command just itest ${{ matrix.database }} | |
| fake-mint-itest: | |
| name: "Integration fake mint tests" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| needs: pre-commit-checks | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| build-args: [-p cdk-integration-tests] | |
| database: [SQLITE, POSTGRES] | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| continue-on-error: true | |
| - name: Test fake mint | |
| run: nix develop -i -L .#stable --command just fake-mint-itest ${{ matrix.database }} | |
| pure-itest: | |
| name: "Integration fake wallet tests" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| needs: pre-commit-checks | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| database: [memory, sqlite, redb] | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| continue-on-error: true | |
| - name: Test fake mint | |
| run: nix develop -i -L .#stable --command just test-pure ${{ matrix.database }} | |
| - name: Test mint with PostgreSQL | |
| run: nix develop -i -L .#stable --command bash -c "start-postgres && just test" | |
| payment-processor-itests: | |
| name: "Payment processor tests" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| needs: pre-commit-checks | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| ln: [FAKEWALLET, CLN, LND] | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| continue-on-error: true | |
| - name: Test | |
| run: nix develop -i -L .#stable --command just itest-payment-processor ${{matrix.ln}} | |
| # Discover MSRV checks from flake - single source of truth | |
| discover-msrv-checks: | |
| name: "Discover MSRV checks" | |
| runs-on: self-hosted | |
| timeout-minutes: 5 | |
| outputs: | |
| checks: ${{ steps.checks.outputs.checks }} | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: Get MSRV check names | |
| id: checks | |
| run: | | |
| # Get all MSRV check names (prefixed with "msrv-") | |
| checks=$(nix eval .#checks.x86_64-linux --apply 'attrs: builtins.filter (n: builtins.substring 0 5 n == "msrv-") (builtins.attrNames attrs)' --json) | |
| echo "checks=$checks" >> $GITHUB_OUTPUT | |
| echo "Found MSRV checks: $checks" | |
| msrv-build: | |
| name: "MSRV: ${{ matrix.check }}" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| needs: [pre-commit-checks, discover-msrv-checks] | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| check: ${{ fromJson(needs.discover-msrv-checks.outputs.checks) }} | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| continue-on-error: true | |
| - name: Build | |
| run: nix build -L .#checks.x86_64-linux.${{ matrix.check }} | |
| # Discover WASM checks from flake - single source of truth | |
| discover-wasm-checks: | |
| name: "Discover WASM checks" | |
| runs-on: self-hosted | |
| timeout-minutes: 5 | |
| outputs: | |
| checks: ${{ steps.checks.outputs.checks }} | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: Get WASM check names | |
| id: checks | |
| run: | | |
| # Get all WASM check names (prefixed with "wasm-") | |
| checks=$(nix eval .#checks.x86_64-linux --apply 'attrs: builtins.filter (n: builtins.substring 0 5 n == "wasm-") (builtins.attrNames attrs)' --json) | |
| echo "checks=$checks" >> $GITHUB_OUTPUT | |
| echo "Found WASM checks: $checks" | |
| check-wasm: | |
| name: "WASM: ${{ matrix.check }}" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| needs: [pre-commit-checks, discover-wasm-checks] | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| check: ${{ fromJson(needs.discover-wasm-checks.outputs.checks) }} | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| continue-on-error: true | |
| - name: Build WASM | |
| run: nix build -L .#checks.x86_64-linux.${{ matrix.check }} | |
| fake-mint-auth-itest: | |
| name: "Integration fake mint auth tests" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| needs: pre-commit-checks | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| database: [SQLITE] | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| continue-on-error: true | |
| - name: Start Keycloak with Backup | |
| run: | | |
| docker compose -f misc/keycloak/docker-compose-recover.yml up -d | |
| until docker logs $(docker ps -q --filter "ancestor=quay.io/keycloak/keycloak:25.0.6") | grep "Keycloak 25.0.6 on JVM (powered by Quarkus 3.8.5) started"; do sleep 1; done | |
| - name: Verify Keycloak Import | |
| run: | | |
| # Wait a bit more for import to complete | |
| sleep 5 | |
| # Check if the realm endpoint is accessible (better verification than log grep) | |
| curl -f -s http://127.0.0.1:8080/realms/cdk-test-realm/.well-known/openid-configuration > /dev/null && echo "Keycloak realm successfully imported" || (docker logs $(docker ps -q --filter "ancestor=quay.io/keycloak/keycloak:25.0.6") && exit 1) | |
| - name: Test fake auth mint | |
| run: nix develop -i -L .#stable --command just fake-auth-mint-itest ${{ matrix.database }} http://127.0.0.1:8080/realms/cdk-test-realm/.well-known/openid-configuration | |
| - name: Stop and clean up Docker Compose | |
| run: | | |
| docker compose -f misc/keycloak/docker-compose-recover.yml down | |
| docs: | |
| name: "Documentation tests" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| needs: pre-commit-checks | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| continue-on-error: true | |
| - name: Run doc tests | |
| run: nix build -L .#checks.x86_64-linux.doc-tests | |
| strict-docs: | |
| name: "Strict Documentation Check" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| needs: docs | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| continue-on-error: true | |
| - name: Check docs with strict warnings | |
| run: nix build -L .#checks.x86_64-linux.strict-docs | |
| ffi-tests: | |
| name: "FFI Python tests" | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| needs: pre-commit-checks | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - uses: cachix/cachix-action@v16 | |
| with: | |
| name: cashudevkit | |
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | |
| useDaemon: false | |
| continue-on-error: true | |
| - name: Run FFI tests | |
| run: nix build -L .#checks.x86_64-linux.ffi-tests |