webp-anim 0.1.1

Sequential, bounded-memory animated WebP processing for Rust
Documentation
name: Release

on:
  push:
    tags:
      - "v*"

permissions:
  contents: read

jobs:
  verify:
    name: Verify release (Rust ${{ matrix.toolchain }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        toolchain:
          - "1.85.0"
          - stable

    steps:
      - name: Check out tagged commit
        uses: actions/checkout@v4

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}
          components: rustfmt, clippy

      - name: Cache Rust dependencies
        uses: Swatinem/rust-cache@v2

      - name: Verify tag matches package version
        shell: bash
        run: |
          package_version="$(
            cargo metadata --no-deps --format-version 1 |
              python3 -c 'import json, sys; print(json.load(sys.stdin)["packages"][0]["version"])'
          )"
          expected_tag="v${package_version}"
          if [[ "${GITHUB_REF_NAME}" != "${expected_tag}" ]]; then
            echo "::error::tag ${GITHUB_REF_NAME} does not match package version ${package_version}"
            exit 1
          fi

      - name: Check formatting
        if: matrix.toolchain == 'stable'
        run: cargo fmt --all -- --check

      - name: Check compilation
        run: cargo check --all-targets --locked

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

      - name: Check public Rustdoc
        if: matrix.toolchain == 'stable'
        run: cargo rustdoc --lib --locked -- -D missing_docs

      - name: Run tests
        run: cargo test --locked

      - name: Check publish package
        if: matrix.toolchain == 'stable'
        run: cargo publish --dry-run --locked

  publish:
    name: Publish to crates.io
    needs: verify
    runs-on: ubuntu-latest

    steps:
      - name: Check out tagged commit
        uses: actions/checkout@v4

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

      - name: Publish package
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
        run: cargo publish --locked