beamdb 0.9.0

BEAM — distributed graph database syncing over WebSocket, WebRTC, and multicast. Successor to rod.
Documentation
name: CI

on:
  push:
    branches: [master]
    tags: ["v*.*.*"]
  pull_request:
    branches: [master]

env:
  CARGO_TERM_COLOR: always
  CARGO_ENCODED_RUSTFLAGS: "-Dwarnings"

jobs:
  check:
    name: Check + Clippy + Format + Docs
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy, rustfmt
      - uses: Swatinem/rust-cache@v2
      - name: Check Cargo.lock
        run: cargo fetch --locked
      - name: Check compilation
        run: cargo check --all-targets --all-features
      - name: Clippy lints
        run: cargo clippy --all-targets --all-features -- -D warnings
      - name: Formatting
        run: cargo fmt --all -- --check
      - name: Docs
        run: RUSTDOCFLAGS='-Dwarnings' cargo doc --workspace --all-features --no-deps

  test:
    name: Test Suite
    needs: check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: Unit + doc tests
        run: cargo test --workspace --lib && cargo test --workspace --doc
      - name: Integration tests
        run: cargo test --workspace --test '*' -- --test-threads=1

  security:
    name: Security Audit
    needs: check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: Install cargo-audit
        uses: taiki-e/install-action@cargo-audit
      - name: Install cargo-deny
        uses: taiki-e/install-action@cargo-deny
      - name: Run cargo audit
        run: cargo audit
      - name: Run cargo deny
        run: cargo deny check

  docker:
    name: Docker Build
    needs: check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: ghcr.io/${{ github.repository_owner }}/beam
          tags: |
            type=ref,event=branch
            type=semver,pattern={{version}}
            type=semver,pattern={{major}}.{{minor}}
            type=semver,pattern={{major}}
            type=sha
      - uses: docker/setup-qemu-action@v3
      - uses: docker/setup-buildx-action@v3
      - uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - uses: docker/build-push-action@v5
        with:
          context: .
          push: ${{ github.event_name != 'pull_request' }}
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  wire-mirror:
    name: Gun.js Wire Mirror Tests
    needs: check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
      - name: Install Gun.js
        working-directory: tests/wire-mirror
        run: npm ci
      - name: Run mirror tests
        working-directory: tests/wire-mirror
        run: node mirror_test.js

  wire-live:
    name: Gun.js Live Integration
    needs: check
    runs-on: ubuntu-latest
    continue-on-error: true
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
      - name: Install Gun.js
        working-directory: tests/wire-live
        run: npm ci
      - name: Run live integration tests
        run: cargo test --test wire_live -- --ignored