minigraf 1.2.1

Zero-config, single-file, embedded graph database with bi-temporal Datalog queries
Documentation
name: Release Cascade

on:
  push:
    tags:
      - 'v[0-9]*.[0-9]*.[0-9]*'
  workflow_dispatch:
    inputs:
      version:
        description: 'Version tag to cascade (e.g. v1.2.0)'
        required: true
        type: string

jobs:
  dispatch-bindings:
    name: Dispatch to binding repos
    runs-on: ubuntu-latest
    steps:
      - name: Resolve version
        id: ver
        run: |
          if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
            TAG="${{ github.event.inputs.version }}"
          else
            TAG="${GITHUB_REF_NAME}"
          fi
          echo "tag=$TAG" >> "$GITHUB_OUTPUT"
          echo "semver=${TAG#v}" >> "$GITHUB_OUTPUT"

      - name: Wait for minigraf to be indexed on crates.io
        run: |
          VERSION="${{ steps.ver.outputs.semver }}"
          echo "Waiting for minigraf@$VERSION on crates.io..."
          FOUND=0
          for i in $(seq 1 18); do
            STATUS=$(curl -s "https://crates.io/api/v1/crates/minigraf/$VERSION" \
              -H "User-Agent: minigraf-cascade/1.0" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('version',{}).get('num',''))" 2>/dev/null || echo "")
            if [ "$STATUS" = "$VERSION" ]; then
              echo "minigraf@$VERSION is live (attempt $i)"
              FOUND=1
              break
            fi
            echo "Attempt $i/18: not yet available, waiting 10s..."
            sleep 10
          done
          if [ "$FOUND" != "1" ]; then
            echo "ERROR: minigraf@$VERSION did not appear on crates.io within 3 minutes"
            exit 1
          fi

      - name: Dispatch to binding repos
        env:
          GH_TOKEN: ${{ secrets.MINIGRAF_RELEASE_TOKEN }}
        run: |
          VERSION="${{ steps.ver.outputs.tag }}"
          for REPO in minigraf-python minigraf-node minigraf-wasm \
                      minigraf-java minigraf-android minigraf-swift minigraf-c; do
            echo "Dispatching core-release to project-minigraf/$REPO @ $VERSION"
            gh api repos/project-minigraf/$REPO/dispatches \
              -f event_type=core-release \
              -f "client_payload[version]=$VERSION"
          done