ruststream 0.4.0

Async messaging framework for Rust: broker-agnostic traits, router, codecs, and a conformance harness for broker authors.
Documentation
name: Deploy docs

on:
  push:
    branches: [main]
    # Deliberately narrower than docs.yml: examples / snippet sources / Cargo.toml feed the
    # rendered site but must not trigger a deploy on their own, or a code-only merge after a
    # version bump would publish stale docs under the new version. A snippet-only change is
    # deployed by the next docs change or manually via workflow_dispatch.
    paths:
      - docs/**
      - mkdocs.yml
      - overrides/**
  workflow_dispatch:

permissions:
  contents: write

concurrency:
  group: docs-deploy
  cancel-in-progress: false

jobs:
  deploy:
    name: Deploy versioned docs
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"

      - name: Install docs toolchain
        run: pip install -r docs/requirements.txt

      - name: Configure git
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"

      - name: Deploy with mike
        run: |
          version="$(sed -nE 's/^version = "([0-9]+)\.([0-9]+).*/\1.\2/p' Cargo.toml | head -1)"
          mike deploy --push --update-aliases "$version" latest
          mike set-default --push latest