jwk-simple 0.4.0

JWK/JWKS for Rust and WASM (RFC 7517, 7518, 7638, 8037, 9864) with jwt-simple integration
Documentation
name: CI

on:
  push:
    branches: [main]
  pull_request:

permissions:
  contents: read

jobs:
  audit:
    name: Audit
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

      - name: Set up Rust
        uses: ./.github/actions/rust/

      - name: Install cargo-audit
        run: cargo install cargo-audit --locked

      - name: Run cargo audit
        run: cargo audit

  build:
    name: Build (${{ matrix.name }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: native
            target: x86_64-unknown-linux-gnu
            features: http,jwt-simple,jwt-simple/pure-rust,moka
          - name: wasm
            target: wasm32-unknown-unknown
            features: cloudflare,http,jwt-simple,jwt-simple/pure-rust,web-crypto

    env:
      CARGO_BUILD_TARGET: ${{ matrix.target }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

      - name: Set up Rust
        uses: ./.github/actions/rust/

      - name: Install wasm target
        if: matrix.name == 'wasm'
        run: rustup target add wasm32-unknown-unknown

      - name: Build
        run: cargo build --features "${{ matrix.features }}"

  test:
    name: Test (${{ matrix.name }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: native
            target: x86_64-unknown-linux-gnu
            features: http,jwt-simple,jwt-simple/pure-rust,moka
          - name: wasm
            target: wasm32-unknown-unknown
            features: cloudflare,http,jwt-simple,jwt-simple/pure-rust,web-crypto

    steps:
      - name: Checkout repository
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

      - name: Set up Rust
        uses: ./.github/actions/rust/

      - name: Install wasm target
        if: matrix.name == 'wasm'
        run: rustup target add wasm32-unknown-unknown

      # TODO: pinned for now to make CI green
      # needs some automation
      - name: Install wasm-bindgen test runner
        if: matrix.name == 'wasm'
        run: cargo install -f wasm-bindgen-cli --version 0.2.122

      - name: Test
        run: cargo test --features "${{ matrix.features }}"
        env:
          CARGO_BUILD_TARGET: ${{ matrix.target }}

  lint:
    name: Lint (${{ matrix.name }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: native
            target: x86_64-unknown-linux-gnu
            features: http,jwt-simple,jwt-simple/pure-rust,moka
          - name: wasm
            target: wasm32-unknown-unknown
            features: cloudflare,http,jwt-simple,jwt-simple/pure-rust,web-crypto

    env:
      CARGO_BUILD_TARGET: ${{ matrix.target }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

      - name: Set up Rust
        uses: ./.github/actions/rust/

      - name: Install wasm target
        if: matrix.name == 'wasm'
        run: rustup target add wasm32-unknown-unknown

      - name: fmt
        if: matrix.name == 'native'
        run: cargo fmt -- --check

      - name: Clippy
        run: cargo clippy --features "${{ matrix.features }}" -- -D warnings

      - name: Doc
        if: matrix.name == 'native'
        env:
          RUSTDOCFLAGS: "-D warnings"
        run: cargo doc --no-deps --features "${{ matrix.features }}"

  examples:
    name: Examples (${{ matrix.name }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: native
            target: x86_64-unknown-linux-gnu
            features: http,jwt-simple,jwt-simple/pure-rust
          - name: wasm
            target: wasm32-unknown-unknown
            features: http,jwt-simple,jwt-simple/pure-rust,web-crypto

    env:
      CARGO_BUILD_TARGET: ${{ matrix.target }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

      - name: Set up Rust
        uses: ./.github/actions/rust/

      - name: Install wasm target
        if: matrix.name == 'wasm'
        run: rustup target add wasm32-unknown-unknown

      - name: Check examples
        run: cargo check --examples --features "${{ matrix.features }}"

      - name: Run examples
        if: matrix.name == 'native'
        run: |
          cargo run --example basic_usage --features "${{ matrix.features }}"
          cargo run --example jwt_verify --features "${{ matrix.features }}"
          cargo run --example http_fetch --features "${{ matrix.features }}"