stackure 1.0.0

Official Stackure authentication SDK for Rust
Documentation
name: Release on VERSION bump

on:
  push:
    branches: [main]

permissions:
  contents: write
  id-token: write
  attestations: write

concurrency:
  group: release
  cancel-in-progress: false

env:
  CARGO_TERM_COLOR: always

jobs:
  check:
    runs-on: ubuntu-latest
    outputs:
      skip: ${{ steps.gate.outputs.skip }}
      version: ${{ steps.v.outputs.version }}
      tag: ${{ steps.v.outputs.tag }}
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - name: Read version
        id: v
        run: |
          version=$(grep -E '^version = ' Cargo.toml | head -1 | sed -E 's/version = "(.*)"/\1/')
          echo "version=$version" >> "$GITHUB_OUTPUT"
          echo "tag=v$version" >> "$GITHUB_OUTPUT"
      - name: Should release?
        id: gate
        run: |
          if git rev-parse --verify "refs/tags/${{ steps.v.outputs.tag }}" >/dev/null 2>&1; then
            echo "Tag ${{ steps.v.outputs.tag }} already exists. Skipping."
            echo "skip=true" >> "$GITHUB_OUTPUT"
          else
            echo "skip=false" >> "$GITHUB_OUTPUT"
          fi

  release:
    needs: check
    if: needs.check.outputs.skip == 'false'
    runs-on: ubuntu-latest
    permissions:
      contents: write
      id-token: write
      attestations: write
    steps:
      - uses: actions/checkout@v6
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo check --all-features
      - name: Publish to crates.io
        run: cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
      - name: Create + push tag
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
          git tag "${{ needs.check.outputs.tag }}"
          git push origin "${{ needs.check.outputs.tag }}"
      - name: Source archive
        run: git archive --format=tar.gz -o "sdk-rust-${{ needs.check.outputs.tag }}.tar.gz" HEAD
      - name: Attest provenance
        uses: actions/attest-build-provenance@v4
        with:
          subject-path: "sdk-rust-${{ needs.check.outputs.tag }}.tar.gz"
      - name: Install cosign
        uses: sigstore/cosign-installer@v4.1.1
      - name: Sign archive
        run: |
          cosign sign-blob --yes \
            --bundle "sdk-rust-${{ needs.check.outputs.tag }}.tar.gz.sigstore" \
            "sdk-rust-${{ needs.check.outputs.tag }}.tar.gz"
      - name: GitHub Release
        uses: softprops/action-gh-release@v3
        with:
          tag_name: ${{ needs.check.outputs.tag }}
          files: |
            sdk-rust-${{ needs.check.outputs.tag }}.tar.gz
            sdk-rust-${{ needs.check.outputs.tag }}.tar.gz.sigstore
          generate_release_notes: true