jmespath_extensions 0.9.0

Extended functions for JMESPath queries - 400+ functions for strings, arrays, dates, hashing, encoding, geo, and more
Documentation
name: CI

on:
  push:
    branches: [main]
    paths-ignore:
      - "*.md"
      - "LICENSE-*"
  pull_request:
    branches: [main]
    paths-ignore:
      - "*.md"
      - "LICENSE-*"

env:
  CARGO_TERM_COLOR: always
  RUSTFLAGS: -Dwarnings

jobs:
  test:
    name: Test
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust: [stable, beta]
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
      - uses: Swatinem/rust-cache@v2
      - name: Run tests (all features)
        run: cargo test --all-features
      - name: Run tests (no default features)
        run: cargo test --no-default-features
      - name: Run tests (core features only)
        run: cargo test --no-default-features --features core

  features:
    name: Feature combinations
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        feature:
          # Core features (no external deps)
          - string
          - array
          - object
          - math
          - type
          - utility
          - validation
          - path
          - expression
          - text
          # Features with external deps
          - hash
          - encoding
          - regex
          - url
          - uuid
          - rand
          - datetime
          - fuzzy
          - phonetic
          - geo
          - semver
          - network
          - ids
          - duration
          - color
          - computing
          - jsonpatch
          - multi-match
          - format
          - language
          - discovery
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
        with:
          key: ${{ matrix.feature }}
      - name: Test ${{ matrix.feature }} feature
        run: cargo test --no-default-features --features ${{ matrix.feature }}

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - uses: Swatinem/rust-cache@v2
      - name: Clippy (all features)
        run: cargo clippy --all-features -- -D warnings
      - name: Clippy (no default features)
        run: cargo clippy --no-default-features -- -D warnings

  fmt:
    name: Formatting
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt
      - name: Check formatting
        run: cargo fmt -- --check

  docs:
    name: Documentation
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: Check documentation
        run: cargo doc --all-features --no-deps
        env:
          RUSTDOCFLAGS: -Dwarnings

  msrv:
    name: Minimum Supported Rust Version
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: "1.85"
      - uses: Swatinem/rust-cache@v2
      - name: Check MSRV
        # Edition 2024 requires 1.85
        run: cargo check --no-default-features

  bench:
    name: Benchmarks
    runs-on: ubuntu-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 --all-features --bench functions -- --noplot

  # Python bindings CI
  python-test:
    name: Python Tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - name: Create venv and install dependencies
        working-directory: python
        run: |
          python -m venv .venv
          source .venv/bin/activate
          pip install maturin pytest
      - name: Build and install
        working-directory: python
        run: |
          source .venv/bin/activate
          maturin develop
      - name: Run tests
        working-directory: python
        run: |
          source .venv/bin/activate
          pytest tests/ -v

  python-wheels:
    name: Python Wheels (${{ matrix.os }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - name: Install maturin
        run: pip install maturin
      - name: Build wheels
        working-directory: python
        run: maturin build --release
      - name: Upload wheels
        uses: actions/upload-artifact@v4
        with:
          name: wheels-${{ matrix.os }}
          path: python/target/wheels/*.whl