spf 0.9.0

.spf (Simple Pixel Font) file parser
Documentation
name: Publish to crates.io

on:
  push:
    tags: ["v*"]

jobs:
  verify-snippets:
    runs-on: ubuntu-latest
    steps:
      - name: checkout spf.rs
        uses: actions/checkout@v4
        with:
          path: spf.rs

      - name: checkout Specification
        uses: actions/checkout@v4
        with:
          repository: SimplePixelFont/Specification
          path: Specification

      - name: setup node
        uses: actions/setup-node@v4
        with:
          node-version: "20"

      - name: install Specification tooling
        working-directory: Specification
        run: npm ci

      - name: regenerate rust-linked snippets
        working-directory: Specification
        run: |
          npm run snippet:collapse
          npx tsx scripts/snippet-tool.ts expand-rust-links --output "$GITHUB_WORKSPACE/regenerated-snippets"

      - name: diff against vendored copy
        run: |
          if ! diff -r spf.rs/res/snippets regenerated-snippets; then
            echo "::error::spf.rs/res/snippets is out of sync with Specification. Refusing to publish stale docs."
            exit 1
          fi

  publish:
    needs: verify-snippets
    runs-on: ubuntu-latest
    environment: release
    permissions:
      id-token: write
    steps:
      - uses: actions/checkout@v4
      - uses: rust-lang/crates-io-auth-action@v1
        id: auth
      - run: cargo publish
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}