clync 0.4.1

Encrypted sync for Claude Code across machines
name: Release

on:
  workflow_dispatch:

jobs:
  release:
    name: Create release
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - name: Generate token
        id: app-token
        uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1
        with:
          app-id: ${{ secrets.SATURATE_CI_APP_ID }}
          private-key: ${{ secrets.SATURATE_CI_PRIVATE_KEY }}

      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
        with:
          fetch-depth: 0
          token: ${{ steps.app-token.outputs.token }}

      - uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable

      - name: Install cargo-changeset
        run: cargo install cargo-changeset --version 0.1.7

      - name: Configure git
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"

      - name: Check for pending changesets
        run: |
          status=$(cargo changeset status 2>&1)
          if echo "$status" | grep -q "No pending changesets"; then
            echo "No changesets to release"
            exit 1
          fi
          echo "$status"

      - name: Get current version
        id: before
        run: |
          version=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
          echo "version=$version" >> $GITHUB_OUTPUT

      - name: Release
        id: release
        env:
          OLD_VERSION: ${{ steps.before.outputs.version }}
        run: |
          cargo changeset release --no-tags
          version=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
          if [ -z "$version" ]; then
            echo "Failed to extract version from Cargo.toml" >&2
            exit 1
          fi
          if [ "$version" = "$OLD_VERSION" ]; then
            echo "Version unchanged ($version) - only none-bump changesets. Nothing to release."
            exit 1
          fi
          echo "version=$version" >> $GITHUB_OUTPUT

      - name: Tag and push
        env:
          RELEASE_VERSION: ${{ steps.release.outputs.version }}
        run: |
          git tag "v${RELEASE_VERSION}"
          git push origin main --tags

  publish:
    name: Publish to crates.io
    needs: release
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
        with:
          ref: main
      - uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable
      - run: cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }}