revision 0.20.0

A serialization and deserialization implementation which allows for schema-evolution.
Documentation
name: Prepare release

run-name: "Prepare release v${{ inputs.version }}"

on:
  workflow_dispatch:
    inputs:
      version:
        description: 'Version to release (e.g. 0.10.0)'
        required: true
        type: string

permissions:
  contents: write
  pull-requests: write

jobs:
  prepare:
    name: Prepare release PR
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # stable
        with:
          toolchain: stable

      - name: Validate version format
        run: |
          VERSION="${{ inputs.version }}"
          if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
            echo "Error: Version must be in format X.Y.Z"
            exit 1
          fi

      - name: Install cargo-release
        run: cargo install cargo-release

      - name: Bump versions
        run: |
          cargo release version ${{ inputs.version }} --workspace --execute --no-confirm --allow-branch main

      - name: Check compatibility
        continue-on-error: true
        uses: obi1kenobi/cargo-semver-checks-action@6b69fcf40e9b5fb17adeb57e4b6ecd020649a239 # v2

      - name: Run tests
        run: cargo test --all-features

      - name: Create pull request
        uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: "chore(release): bump version to ${{ inputs.version }}"
          branch: release/v${{ inputs.version }}
          delete-branch: true
          labels: release
          title: "Release v${{ inputs.version }}"
          body: |
            Automated release preparation for version ${{ inputs.version }}

            This PR updates:
            - Version in Cargo.toml files
            - Cargo.lock

            After merging, the release workflow will automatically:
            - Create and push git tag v${{ inputs.version }}
            - Publish to crates.io
            - Create GitHub release