fix(tests): stop leaked RabbitMQ test container on process exit #1544
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] | |
| paths-ignore: | |
| - 'docs/**' | |
| - 'skills/**' | |
| - '**/*.md' | |
| - '**/*.mdx' | |
| - '.cursor/**' | |
| pull_request: | |
| branches: [main] | |
| paths-ignore: | |
| - 'docs/**' | |
| - 'skills/**' | |
| - '**/*.md' | |
| - '**/*.mdx' | |
| - '.cursor/**' | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
| env: | |
| CARGO_TERM_COLOR: always | |
| III_TELEMETRY_ENABLED: "false" | |
| jobs: | |
| # ────────────────────────────────────────────────────────────── | |
| # Change detection (used to scope expensive jobs like coverage) | |
| # ────────────────────────────────────────────────────────────── | |
| changes: | |
| name: Detect changes | |
| runs-on: ubuntu-latest | |
| outputs: | |
| engine: ${{ steps.filter.outputs.engine }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dorny/paths-filter@v3 | |
| id: filter | |
| with: | |
| filters: | | |
| engine: | |
| - 'engine/**' | |
| - 'crates/**' | |
| - 'Cargo.toml' | |
| - 'Cargo.lock' | |
| - '.github/workflows/ci.yml' | |
| # ────────────────────────────────────────────────────────────── | |
| # Engine Build — critical path, produces iii binary for downstream | |
| # ────────────────────────────────────────────────────────────── | |
| engine-build: | |
| name: Engine Build (artifact) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: engine-build | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libcap-ng-dev | |
| - name: Build iii (debug, all-features) | |
| run: cargo build -p iii --all-features | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: iii-binary | |
| path: target/debug/iii | |
| retention-days: 1 | |
| # ────────────────────────────────────────────────────────────── | |
| # Engine Tests — parallel; does not gate downstream jobs. | |
| # ────────────────────────────────────────────────────────────── | |
| engine-test: | |
| name: Engine Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| # Free up disk space to avoid "No space left on device" during the | |
| # post-job rust-cache save step on ubuntu-latest runners. | |
| - name: Free disk space | |
| run: | | |
| sudo rm -rf /opt/hostedtoolcache/CodeQL | |
| sudo rm -rf /usr/share/dotnet | |
| sudo rm -rf /usr/local/lib/android | |
| sudo rm -rf /opt/ghc | |
| sudo rm -rf /opt/microsoft | |
| df -h / | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: engine-test | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libcap-ng-dev | |
| - name: Build and install iii-worker (needed by iii integration tests) | |
| run: | | |
| cargo build -p iii-worker | |
| mkdir -p ~/.local/bin | |
| cp target/debug/iii-worker ~/.local/bin/iii-worker | |
| chmod +x ~/.local/bin/iii-worker | |
| - name: Run crate tests | |
| run: | | |
| cargo test -p iii-worker | |
| cargo test -p iii-filesystem | |
| cargo test -p iii-network | |
| cargo test -p iii-init | |
| - name: Run engine tests | |
| run: cargo test -p iii --all-features | |
| # ────────────────────────────────────────────────────────────── | |
| # Engine Coverage — scoped: runs on push/dispatch, and on PRs | |
| # only when engine/crates/Cargo paths change. Parallel, does not | |
| # gate downstream. | |
| # ────────────────────────────────────────────────────────────── | |
| engine-coverage: | |
| name: Engine Coverage | |
| needs: changes | |
| if: >- | |
| github.event_name != 'pull_request' || | |
| needs.changes.outputs.engine == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: llvm-tools-preview | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: engine-coverage | |
| - uses: taiki-e/install-action@cargo-llvm-cov | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libcap-ng-dev | |
| - name: Build and install iii-worker (needed by iii integration tests) | |
| run: | | |
| cargo build -p iii-worker | |
| mkdir -p ~/.local/bin | |
| cp target/debug/iii-worker ~/.local/bin/iii-worker | |
| chmod +x ~/.local/bin/iii-worker | |
| - name: Run coverage | |
| run: | | |
| eval "$(cargo llvm-cov show-env --export-prefix)" | |
| cargo test -p iii --all-features | |
| cargo llvm-cov report \ | |
| --ignore-filename-regex \ | |
| "engine/src/main\.rs|(cron|pubsub|queue|state|stream)/adapters/(redis_adapter|bridge)\.rs|queue/adapters/rabbitmq/|^sdk/" | |
| # ────────────────────────────────────────────────────────────── | |
| # Engine Benches — compile-only check, parallel, does not gate. | |
| # ────────────────────────────────────────────────────────────── | |
| engine-benches: | |
| name: Engine Benches Compile | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: engine-benches | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libcap-ng-dev | |
| - name: Check benches compile | |
| run: cargo bench --benches --no-run | |
| # ────────────────────────────────────────────────────────────── | |
| # Engine Formatting — fast, parallel | |
| # ────────────────────────────────────────────────────────────── | |
| engine-fmt: | |
| name: Engine Formatting | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt | |
| - name: Check formatting | |
| run: cargo fmt --all -- --check | |
| # - name: Run clippy | |
| # run: cargo clippy -p iii -p function-macros -p iii-sdk --all-targets --all-features -- -D warnings | |
| # ────────────────────────────────────────────────────────────── | |
| # Engine RabbitMQ Integration Tests | |
| # ────────────────────────────────────────────────────────────── | |
| engine-rabbitmq-tests: | |
| name: Engine RabbitMQ Integration Tests | |
| runs-on: ubuntu-latest | |
| services: | |
| rabbitmq: | |
| image: rabbitmq:3-management-alpine | |
| ports: | |
| - 5672:5672 | |
| - 15672:15672 | |
| options: >- | |
| --health-cmd "rabbitmq-diagnostics check_running" | |
| --health-interval 10s | |
| --health-timeout 5s | |
| --health-retries 5 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Run RabbitMQ integration tests | |
| env: | |
| RABBITMQ_URL: amqp://localhost:5672 | |
| RUST_LOG: info | |
| run: cargo test -p iii --test rabbitmq_queue_integration -- --nocapture | |
| engine-build-matrix: | |
| name: Engine Build - ${{ matrix.target }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - target: x86_64-apple-darwin | |
| os: macos-latest | |
| - target: x86_64-pc-windows-msvc | |
| os: windows-latest | |
| - target: x86_64-unknown-linux-gnu | |
| os: ubuntu-latest | |
| - target: x86_64-unknown-linux-musl | |
| os: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: ${{ matrix.target }} | |
| - name: Install musl tools | |
| if: matrix.target == 'x86_64-unknown-linux-musl' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y musl-tools | |
| - name: Add target | |
| run: rustup target add ${{ matrix.target }} | |
| - name: Build for target | |
| run: cargo build -p iii --release --target ${{ matrix.target }} | |
| # ────────────────────────────────────────────────────────────── | |
| # Worker Build Matrix (matches release targets) | |
| # ────────────────────────────────────────────────────────────── | |
| worker-build-matrix: | |
| name: Worker Build - ${{ matrix.target }} | |
| runs-on: ${{ matrix.os }} | |
| env: | |
| CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc | |
| CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_PKG_CONFIG_ALLOW_CROSS: '1' | |
| PKG_CONFIG_SYSROOT_DIR_aarch64_unknown_linux_gnu: /usr/aarch64-linux-gnu | |
| PKG_CONFIG_PATH_aarch64_unknown_linux_gnu: /usr/lib/aarch64-linux-gnu/pkgconfig | |
| CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS: '-C link-arg=-L/usr/lib/aarch64-linux-gnu' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - target: aarch64-apple-darwin | |
| os: macos-latest | |
| - target: x86_64-unknown-linux-gnu | |
| os: ubuntu-latest | |
| - target: aarch64-unknown-linux-gnu | |
| os: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: worker-${{ matrix.target }} | |
| - name: Install system dependencies (x86_64 Linux) | |
| if: matrix.target == 'x86_64-unknown-linux-gnu' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libcap-ng-dev | |
| - name: Install cross-compilation tools (aarch64 Linux) | |
| if: matrix.target == 'aarch64-unknown-linux-gnu' | |
| run: | | |
| sudo dpkg --add-architecture arm64 | |
| sudo sed -i 's/^deb /deb [arch=amd64] /' /etc/apt/sources.list | |
| echo "deb [arch=arm64] http://ports.ubuntu.com/ $(lsb_release -cs) main restricted universe" | sudo tee /etc/apt/sources.list.d/arm64.list | |
| echo "deb [arch=arm64] http://ports.ubuntu.com/ $(lsb_release -cs)-updates main restricted universe" | sudo tee -a /etc/apt/sources.list.d/arm64.list | |
| sudo apt-get update | |
| sudo apt-get install -y gcc-aarch64-linux-gnu libc6-dev-arm64-cross libcap-ng-dev:arm64 | |
| - name: Add target | |
| run: rustup target add ${{ matrix.target }} | |
| - name: Build iii-worker for target | |
| run: cargo build -p iii-worker --target ${{ matrix.target }} | |
| # ────────────────────────────────────────────────────────────── | |
| # Worker Test Matrix (cross-platform integration tests) | |
| # ────────────────────────────────────────────────────────────── | |
| worker-test-matrix: | |
| name: Worker Tests - ${{ matrix.os }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| - os: macos-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: worker-test-${{ matrix.os }} | |
| - uses: taiki-e/install-action@cargo-nextest | |
| - name: Install system dependencies (Linux only) | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libcap-ng-dev | |
| - name: Run iii-worker tests | |
| run: cargo nextest run -p iii-worker --profile ci | |
| - uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: junit-worker-test-${{ matrix.os }} | |
| path: target/nextest/ci/junit.xml | |
| retention-days: 7 | |
| # ────────────────────────────────────────────────────────────── | |
| # Worker Feature-Gated Tests | |
| # ────────────────────────────────────────────────────────────── | |
| worker-test-vm-linux: | |
| name: Worker Tests (VM) - linux | |
| if: github.event_name == 'workflow_dispatch' | |
| runs-on: [self-hosted, linux, kvm] | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: worker-test-vm-linux | |
| - uses: taiki-e/install-action@cargo-nextest | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libcap-ng-dev | |
| - name: Run VM feature-gated tests | |
| run: cargo nextest run -p iii-worker --features integration-vm --profile ci | |
| - uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: junit-worker-test-vm-linux | |
| path: target/nextest/ci/junit.xml | |
| retention-days: 7 | |
| worker-test-vm-macos: | |
| name: Worker Tests (VM) - macos | |
| runs-on: macos-latest | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: worker-test-vm-macos | |
| - uses: taiki-e/install-action@cargo-nextest | |
| - name: Run VM feature-gated tests | |
| run: cargo nextest run -p iii-worker --features integration-vm --profile ci | |
| - uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: junit-worker-test-vm-macos | |
| path: target/nextest/ci/junit.xml | |
| retention-days: 7 | |
| worker-test-oci-linux: | |
| name: Worker Tests (OCI) - linux | |
| runs-on: ubuntu-latest | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: worker-test-oci-linux | |
| - uses: taiki-e/install-action@cargo-nextest | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libcap-ng-dev | |
| - name: Run OCI feature-gated tests | |
| run: cargo nextest run -p iii-worker --features integration-oci --profile ci | |
| - uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: junit-worker-test-oci-linux | |
| path: target/nextest/ci/junit.xml | |
| retention-days: 7 | |
| worker-test-oci-macos: | |
| name: Worker Tests (OCI) - macos | |
| runs-on: macos-latest | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: worker-test-oci-macos | |
| - uses: taiki-e/install-action@cargo-nextest | |
| - name: Run OCI feature-gated tests | |
| run: cargo nextest run -p iii-worker --features integration-oci --profile ci | |
| - uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: junit-worker-test-oci-macos | |
| path: target/nextest/ci/junit.xml | |
| retention-days: 7 | |
| # ────────────────────────────────────────────────────────────── | |
| # SDK Node | |
| # ────────────────────────────────────────────────────────────── | |
| sdk-node-ci: | |
| name: SDK Node Tests | |
| needs: engine-build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| run_install: false | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'pnpm' | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| #- name: Lint | |
| # run: npx @biomejs/biome check sdk/packages/node | |
| - name: Type check | |
| run: pnpm --filter iii-sdk exec tsc --noEmit | |
| - name: Build | |
| run: pnpm --filter iii-sdk build | |
| - name: Download III binary | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: iii-binary | |
| - name: Start III Engines | |
| run: | | |
| chmod +x ./iii | |
| bash scripts/start-iii.sh \ | |
| --config sdk/fixtures/config-test.yaml \ | |
| --port 49199 | |
| bash scripts/start-iii.sh \ | |
| --config sdk/fixtures/config-bridge-backend.yaml \ | |
| --port 49198 \ | |
| --pid-file /tmp/iii-backend.pid \ | |
| --log-file /tmp/iii-backend.log | |
| bash scripts/start-iii.sh \ | |
| --config sdk/fixtures/config-bridge.yaml \ | |
| --port 49197 \ | |
| --pid-file /tmp/iii-bridge.pid \ | |
| --log-file /tmp/iii-bridge.log | |
| - name: Run tests with coverage | |
| env: | |
| III_URL: ws://localhost:49199 | |
| III_HTTP_URL: http://localhost:3199 | |
| run: pnpm --filter iii-sdk test:coverage | |
| - name: Stop III Engines | |
| if: always() | |
| run: bash scripts/stop-iii.sh /tmp/iii-engine.pid /tmp/iii-backend.pid /tmp/iii-bridge.pid | |
| # ────────────────────────────────────────────────────────────── | |
| # SDK Node Browser | |
| # ────────────────────────────────────────────────────────────── | |
| sdk-node-browser-ci: | |
| name: SDK Browser Tests | |
| needs: engine-build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| run_install: false | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'pnpm' | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Type check | |
| run: pnpm --filter iii-browser-sdk exec tsc --noEmit | |
| - name: Build | |
| run: pnpm --filter iii-browser-sdk build | |
| - name: Run unit tests | |
| run: pnpm --filter iii-browser-sdk test | |
| - name: Download III binary | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: iii-binary | |
| - name: Start III Engine | |
| run: | | |
| chmod +x ./iii | |
| bash scripts/start-iii.sh \ | |
| --config sdk/fixtures/config-test.yaml \ | |
| --port 49199 | |
| - name: Run integration tests | |
| env: | |
| III_URL: ws://localhost:49199 | |
| III_HTTP_URL: http://localhost:3199 | |
| run: pnpm --filter iii-browser-sdk test:integration | |
| - name: Stop III Engine | |
| if: always() | |
| run: bash scripts/stop-iii.sh /tmp/iii-engine.pid | |
| # ────────────────────────────────────────────────────────────── | |
| # SDK Python | |
| # ────────────────────────────────────────────────────────────── | |
| sdk-python-ci: | |
| name: SDK Python (${{ matrix.python-version }}) | |
| needs: engine-build | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ['3.10', '3.11', '3.12'] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - uses: astral-sh/setup-uv@v5 | |
| with: | |
| enable-cache: true | |
| cache-dependency-glob: 'sdk/packages/python/iii/uv.lock' | |
| - name: Install dependencies | |
| working-directory: sdk/packages/python/iii | |
| run: uv sync --extra dev | |
| - name: Lint | |
| working-directory: sdk/packages/python/iii | |
| run: uv run ruff check src | |
| - name: Type check | |
| working-directory: sdk/packages/python/iii | |
| run: uv run mypy src | |
| - name: Download III binary | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: iii-binary | |
| - name: Start III Engine | |
| run: | | |
| chmod +x ./iii | |
| bash scripts/start-iii.sh \ | |
| --config sdk/fixtures/config-test.yaml \ | |
| --port 49199 | |
| - name: Run tests with coverage | |
| working-directory: sdk/packages/python/iii | |
| env: | |
| III_URL: ws://localhost:49199 | |
| III_HTTP_URL: http://localhost:3199 | |
| run: uv run pytest -q | |
| - name: Stop III Engine | |
| if: always() | |
| run: bash scripts/stop-iii.sh /tmp/iii-engine.pid | |
| # ────────────────────────────────────────────────────────────── | |
| # SDK Rust | |
| # ────────────────────────────────────────────────────────────── | |
| sdk-rust-ci: | |
| name: SDK Rust Tests | |
| needs: engine-build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt, clippy | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Check formatting | |
| run: cargo fmt -p iii-sdk -- --check | |
| - name: Run clippy | |
| run: cargo clippy -p iii-sdk --all-targets --all-features -- -D warnings | |
| - name: Download III binary | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: iii-binary | |
| - name: Start III Engine | |
| run: | | |
| chmod +x ./iii | |
| bash scripts/start-iii.sh \ | |
| --config sdk/fixtures/config-test.yaml \ | |
| --port 49199 | |
| - name: Run tests | |
| env: | |
| III_URL: ws://localhost:49199 | |
| III_HTTP_URL: http://localhost:3199 | |
| run: cargo test -p iii-sdk --all-features | |
| - name: Stop III Engine | |
| if: always() | |
| run: bash scripts/stop-iii.sh /tmp/iii-engine.pid | |
| # ────────────────────────────────────────────────────────────── | |
| # Console | |
| # ────────────────────────────────────────────────────────────── | |
| console-ci: | |
| name: Console Build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| run_install: false | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22' | |
| cache: 'pnpm' | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Lint frontend | |
| run: pnpm --filter console-frontend lint | |
| - name: Build frontend | |
| run: pnpm --filter console-frontend build | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Build console binary | |
| run: cargo build -p iii-console --release |