skyzen 0.1.1

A fast, ergonomic HTTP framework that works everywhere
name: Test

on:
  workflow_call:

env:
  CARGO_TERM_COLOR: always

jobs:
  native:
    name: Native (${{ matrix.name }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
          # All features on all platforms
          - name: Linux
            os: ubuntu-latest
            features: "--all-features"
            targets: "--all-targets"

          - name: macOS
            os: macos-latest
            features: "--all-features"
            targets: "--all-targets"

          - name: Windows
            os: windows-latest
            features: "--all-features"
            targets: "--all-targets"
    steps:
      - uses: actions/checkout@v4

      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
          # The CLI scaffold test cross-checks generated Cloudflare templates for wasm.
          targets: wasm32-unknown-unknown

      - uses: Swatinem/rust-cache@v2
        with:
          shared-key: ci-${{ matrix.os }}

      - name: Run clippy
        run: cargo clippy --workspace ${{ matrix.targets }} ${{ matrix.features }} -- -D warnings

      - name: Run tests
        run: cargo test --workspace ${{ matrix.targets }} ${{ matrix.features }}

  wasm-build:
    name: WASM Build Check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: wasm32-unknown-unknown

      - uses: Swatinem/rust-cache@v2
        with:
          shared-key: ci-wasm

      - name: Check WASM build (minimal)
        run: cargo check -p skyzen --target wasm32-unknown-unknown --no-default-features --features json

      - name: Check WASM build (with ws)
        run: cargo check -p skyzen --target wasm32-unknown-unknown --no-default-features --features json,ws

  wasm-workerd:
    name: WASM (workerd)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: wasm32-unknown-unknown

      - uses: Swatinem/rust-cache@v2
        with:
          shared-key: ci-wasm

      - name: Install wasm-bindgen CLI
        run: |
          WASM_BINDGEN_VERSION="$(cargo tree -p skyzen --target wasm32-unknown-unknown --no-default-features --features json,form \
            | grep -m1 "wasm-bindgen v" \
            | sed -E 's/.*wasm-bindgen v([0-9.]+).*/\1/')"
          echo "Installing wasm-bindgen-cli ${WASM_BINDGEN_VERSION}"
          cargo install wasm-bindgen-cli --version "${WASM_BINDGEN_VERSION}"

      - name: Build worker example
        run: cargo build --example worker --release --target wasm32-unknown-unknown --no-default-features --features json,form

      - name: Generate bindings
        run: |
          wasm-bindgen --target web --out-dir target/workerd target/wasm32-unknown-unknown/release/examples/worker.wasm
          cp ci/workerd/worker.mjs target/workerd/worker.mjs
          cp ci/workerd/wrangler.toml target/workerd/wrangler.toml

      - name: Install Wrangler
        run: npm install -g wrangler

      - name: Launch wrangler dev
        run: |
          cd target/workerd
          mkdir -p .home .wrangler/logs .wrangler-config
          HOME=$PWD/.home \
          WRANGLER_LOG_DIR=$PWD/.wrangler/logs \
          XDG_CONFIG_HOME=$PWD/.wrangler-config \
          wrangler dev --local --ip 127.0.0.1 --port 8787 --inspector-port 0 --config wrangler.toml > wrangler.log 2>&1 &
          echo $! > ../../wrangler.pid
          sleep 5

      - name: Exercise worker
        run: |
          curl --retry 5 --retry-connrefused --retry-delay 1 -sSf http://127.0.0.1:8787/health | grep OK
          curl --retry 5 --retry-connrefused --retry-delay 1 -sSf http://127.0.0.1:8787/hello/Skyzen | grep "Hello, Skyzen!"

      - name: Shutdown wrangler
        if: always()
        run: |
          if [ -f wrangler.pid ]; then
            kill $(cat wrangler.pid) || true
          fi
          if [ -f target/workerd/wrangler.log ]; then
            echo "--- wrangler log ---"
            tail -n 100 target/workerd/wrangler.log
          fi