datastar 0.4.0

Datastar SDK for Rust
Documentation
name: CI

env:
  CARGO_TERM_COLOR: always
  RUST_TOOLCHAIN: stable
  RUST_TOOLCHAIN_MSRV: 1.89.0

on:
  push:
    branches:
      - main
  pull_request: {}

jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{env.RUST_TOOLCHAIN}}
          components: clippy, rustfmt
      - uses: Swatinem/rust-cache@v2
      - name: check
        run: |
          make check
      - name: clippy
        run: |
          make clippy
      - name: rustfmt
        run: |
          make fmt-check
      - name: docs
        run: |
          make doc

  msrv:
    needs: [check]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{env.RUST_TOOLCHAIN_MSRV}}
      - uses: Swatinem/rust-cache@v2
      - name: Check minimum supported Rust version
        run: cargo check --all-targets --all-features

  test:
    needs: [check]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{env.RUST_TOOLCHAIN}}
      - uses: Swatinem/rust-cache@v2
      - name: Run tests
        run: make test

  test-macos:
    needs: [check]
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v7
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{env.RUST_TOOLCHAIN}}
      - uses: Swatinem/rust-cache@v2
      - name: Run tests
        run: make test

  cargo-hack:
    needs: [check]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{env.RUST_TOOLCHAIN}}
      - name: install cargo-hack
        uses: taiki-e/install-action@cargo-hack
      - name: cargo hack check
        run: make hack

  sdk-tests:
    needs: [check]
    strategy:
      fail-fast: false
      matrix:
        include:
          - framework: axum
            example: axum-test-suite
            features: axum,tracing
          - framework: warp
            example: warp-test-suite
            features: warp,tracing
          - framework: rocket
            example: rocket-test-suite
            features: rocket
    name: sdk-tests (${{matrix.framework}})
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{env.RUST_TOOLCHAIN}}
      - uses: Swatinem/rust-cache@v2
      - uses: actions/setup-go@v7
        with:
          go-version: 1.25.0
          cache: false
      - name: Run official Datastar SDK tests
        env:
          DATASTAR_TEST_EXAMPLE: ${{matrix.example}}
          DATASTAR_TEST_FEATURES: ${{matrix.features}}
        run: |
          set -euo pipefail

          server_log="$(mktemp)"
          cargo build \
            --example "$DATASTAR_TEST_EXAMPLE" \
            --features "$DATASTAR_TEST_FEATURES"
          server_path="target/debug/examples/$DATASTAR_TEST_EXAMPLE"
          "$server_path" >"$server_log" 2>&1 &
          server_pid=$!
          trap 'kill "$server_pid" 2>/dev/null || true; wait "$server_pid" 2>/dev/null || true' EXIT

          server_ready=false
          for server_attempt in {1..60}; do
            if curl --silent --output /dev/null http://127.0.0.1:9200/test; then
              server_ready=true
              break
            fi
            if ! kill -0 "$server_pid" 2>/dev/null; then
              cat "$server_log"
              exit 1
            fi
            sleep 1
          done

          if [[ "$server_ready" != true ]]; then
            echo "Server did not start after $server_attempt attempts"
            cat "$server_log"
            exit 1
          fi

          if ! go run \
            github.com/starfederation/datastar/sdk/tests/cmd/datastar-sdk-tests@latest \
            -v \
            -server http://127.0.0.1:9200; then
            cat "$server_log"
            exit 1
          fi

  dependencies-are-sorted:
    needs: [check]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{env.RUST_TOOLCHAIN}}
      - uses: Swatinem/rust-cache@v2
      - name: Install cargo-sort
        run: |
          cargo install cargo-sort
      - name: Check dependency tables
        working-directory: .
        run: |
          make sort-check

  semver-checks:
    needs: [check]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - name: Check semver
        uses: obi1kenobi/cargo-semver-checks-action@v2
        with:
          rust-toolchain: ${{env.RUST_TOOLCHAIN}}

  dependency-policy:
    needs: [check]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{env.RUST_TOOLCHAIN}}
      - uses: taiki-e/install-action@cargo-deny
      - name: Check advisories, licenses, bans, and sources
        run: cargo deny check

  package:
    needs: [check]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{env.RUST_TOOLCHAIN}}
      - uses: Swatinem/rust-cache@v2
      - name: Verify release package
        run: cargo package --locked