beachcomber 0.1.0

A centralized daemon that caches shell state (git, battery, hostname, etc.) so every consumer reads from one fast cache instead of independently forking shells
Documentation
name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

env:
  CARGO_TERM_COLOR: always

jobs:
  check:
    name: Check
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy, rustfmt
      - uses: Swatinem/rust-cache@v2
      - name: Check
        run: cargo check --all-targets
      - name: Clippy
        run: cargo clippy --all-targets -- -D warnings
      - name: Format
        run: cargo fmt -- --check

  test:
    name: Test
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: Run tests
        run: cargo test -- --skip watcher_ --skip uptime_provider_executes

  bench:
    name: Benchmark
    runs-on: macos-latest
    if: github.event_name == 'push' && github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: Run benchmarks
        run: cargo bench -- --output-format=bencher 2>/dev/null | tee bench-results.txt
      - name: Upload benchmark results
        uses: actions/upload-artifact@v4
        with:
          name: bench-results
          path: bench-results.txt

  test-python:
    name: Test Python SDK
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: sdks/python
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.12'
      - name: Install dependencies
        run: pip install pytest
      - name: Run tests
        run: pytest -v

  test-node:
    name: Test Node.js SDK
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: sdks/node
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
      - name: Install dependencies
        run: npm ci
      - name: Build
        run: npm run build
      - name: Run tests
        run: npm test

  test-go:
    name: Test Go SDK
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: sdks/go
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-go@v5
        with:
          go-version: '1.21'
      - name: Run tests
        run: go test -v ./...

  test-ruby:
    name: Test Ruby SDK
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: sdks/ruby
    steps:
      - uses: actions/checkout@v4
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.3'
      - name: Run tests
        run: rake test

  test-lua:
    name: Test Lua SDK
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: sdks/lua
    steps:
      - uses: actions/checkout@v4
      - uses: leafo/gh-actions-lua@v10
        with:
          luaVersion: '5.4'
      - uses: leafo/gh-actions-luarocks@v4
      - name: Install luasocket
        run: luarocks install luasocket
      - name: Run tests
        run: lua test/test_runner.lua

  test-c:
    name: Test C SDK
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: sdks/c
    steps:
      - uses: actions/checkout@v4
      - name: Build and test
        run: make test