postgrest-parser 0.2.0

PostgREST URL-to-SQL parser for Rust and WASM
Documentation
name: Release

on:
  push:
    branches: [main]
  workflow_dispatch:

permissions:
  contents: write
  id-token: write

jobs:
  check-version:
    name: Check version change
    runs-on: ubuntu-22.04
    outputs:
      version: ${{ steps.version.outputs.current }}
      changed: ${{ steps.version.outputs.changed }}
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          fetch-depth: 2
      - name: Get current version
        id: version
        run: |
          CURRENT=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)"/\1/')
          PREVIOUS=$(git show HEAD~1:Cargo.toml | grep '^version' | head -1 | sed 's/.*"\(.*\)"/\1/')
          echo "current=$CURRENT" >> "$GITHUB_OUTPUT"
          if [ "$CURRENT" != "$PREVIOUS" ]; then
            echo "changed=true" >> "$GITHUB_OUTPUT"
          else
            echo "changed=false" >> "$GITHUB_OUTPUT"
          fi

  create-release:
    name: Create GitHub Release
    needs: check-version
    if: needs.check-version.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - run: |
          if gh release view "v${{ needs.check-version.outputs.version }}" > /dev/null 2>&1; then
            echo "Release v${{ needs.check-version.outputs.version }} already exists, skipping"
          else
            gh release create "v${{ needs.check-version.outputs.version }}" --generate-notes
          fi
        env:
          GH_TOKEN: ${{ github.token }}

  publish-crates:
    name: Publish to crates.io
    needs: [check-version, create-release]
    if: always() && !failure() && !cancelled() && (needs.check-version.outputs.changed == 'true' || github.event_name == 'workflow_dispatch')
    runs-on: ubuntu-22.04
    environment: release
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - uses: dtolnay/rust-toolchain@a54c7afa936fefeb4456b2dd8068152669aa8203 # stable
        with:
          toolchain: stable
      - uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2.7.8
      - run: cargo test
      - run: cargo publish --token "$CARGO_REGISTRY_TOKEN"
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

  publish-npm:
    name: Publish to npm
    needs: [check-version, create-release]
    if: always() && !failure() && !cancelled() && (needs.check-version.outputs.changed == 'true' || github.event_name == 'workflow_dispatch')
    runs-on: ubuntu-22.04
    environment: release
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - uses: dtolnay/rust-toolchain@a54c7afa936fefeb4456b2dd8068152669aa8203 # stable
        with:
          toolchain: stable
          targets: wasm32-unknown-unknown
      - uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2.7.8
      - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
        with:
          node-version: '20'
          registry-url: 'https://registry.npmjs.org'
      - run: cargo install wasm-pack
      - run: wasm-pack build --target web --out-dir pkg -- --features wasm
      - run: npm publish --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}