match_opt 0.1.3

A macro for turning a partial match into a full match returning an option.
Documentation
name: Publish to crates.io
on:
  push:
    tags: ['v*']  # Triggers when pushing tags starting with 'v'
jobs:
  publish:
    runs-on: ubuntu-latest
    environment: release  # Optional: for enhanced security
    permissions:
      id-token: write     # Required for OIDC token exchange
    steps:
      - uses: actions/checkout@v4
      
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y jq coreutils
        
      - name: Check if version already exists
        id: check
        run: |
          set +e
          ./scripts/is_version_already_uploaded.sh match_opt
          EXIT_CODE="$?"
          set -e
          if [[ "$EXIT_CODE" == "7" ]]; then
            echo "is_new_version=no" >> $GITHUB_OUTPUT
          elif [[ "$EXIT_CODE" == "0" ]]; then
            echo "is_new_version=yes" >> $GITHUB_OUTPUT
          elif [[ "$EXIT_CODE" == "4" ]]; then
            # Crate doesn't exist or API error - treat as new version
            echo "is_new_version=yes" >> $GITHUB_OUTPUT
          else
            # Unexpected outcome, indicates a bug.
            exit "$EXIT_CODE"
          fi
          
      - name: Run tests
        if: steps.check.outputs.is_new_version == 'yes'
        run: cargo test
        
      - name: Check formatting
        if: steps.check.outputs.is_new_version == 'yes'
        run: cargo fmt --check
        
      - name: Run clippy
        if: steps.check.outputs.is_new_version == 'yes'
        run: cargo clippy -- -D warnings
        
      - name: Verify package
        if: steps.check.outputs.is_new_version == 'yes'
        run: cargo package --list
        
      - name: Get OIDC token for publishing
        if: steps.check.outputs.is_new_version == 'yes'
        uses: rust-lang/crates-io-auth-action@v1
        id: auth
        
      - name: Publish to crates.io
        if: steps.check.outputs.is_new_version == 'yes'
        run: cargo publish
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}