gwp 0.2.1

A standalone, pure Rust gRPC wire protocol for GQL (ISO/IEC 39075)
Documentation
name: CI

on:
  push:
    branches: [main]
  pull_request:

concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: true

jobs:
  rust:
    name: Rust
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: arduino/setup-protoc@v3

      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy

      - uses: Swatinem/rust-cache@v2

      - name: Format
        run: cargo fmt --all -- --check

      - name: Clippy
        run: cargo clippy --all-targets --all-features -- -D warnings

      - name: Test
        run: cargo test

      - name: Build test server
        run: cargo build --bin gwp-test-server --release

      - name: Upload test server
        uses: actions/upload-artifact@v4
        with:
          name: gwp-test-server
          path: target/release/gwp-test-server
          retention-days: 1

  python:
    name: Python
    runs-on: ubuntu-latest
    needs: rust
    defaults:
      run:
        working-directory: python
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
          cache: pip
          cache-dependency-path: python/pyproject.toml

      - name: Install
        run: pip install -e ".[dev]"

      - name: Ruff check
        run: ruff check .

      - name: Ruff format
        run: ruff format --check .

      - name: Download test server
        uses: actions/download-artifact@v4
        with:
          name: gwp-test-server
          path: target/release

      - name: Make test server executable
        run: chmod +x ../target/release/gwp-test-server

      - name: Test
        run: pytest tests/ -v

  js:
    name: JS/TS
    runs-on: ubuntu-latest
    needs: rust
    defaults:
      run:
        working-directory: js
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
          cache-dependency-path: js/package.json

      - name: Install
        run: npm install

      - name: Download test server
        uses: actions/download-artifact@v4
        with:
          name: gwp-test-server
          path: target/release

      - name: Make test server executable
        run: chmod +x ../target/release/gwp-test-server

      - name: Test
        run: npx vitest run

  go:
    name: Go
    runs-on: ubuntu-latest
    needs: rust
    defaults:
      run:
        working-directory: go
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-go@v5
        with:
          go-version-file: go/go.mod

      - name: Download test server
        uses: actions/download-artifact@v4
        with:
          name: gwp-test-server
          path: target/release

      - name: Make test server executable
        run: chmod +x ../target/release/gwp-test-server

      - name: Test
        run: go test -v ./...

  java:
    name: Java
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 17
          cache: maven
          cache-dependency-path: java/pom.xml

      - name: Test
        run: mvn -B test
        working-directory: java