agent-sync 0.6.0

Safely synchronize coding-agent sessions and memories over SSH
name: Release

on:
  push:
    tags: ['v*']
  workflow_dispatch:

jobs:
  build:
    permissions:
      contents: read
    strategy:
      matrix:
        include:
          - os: macos-15
            target: aarch64-apple-darwin
          - os: macos-15-intel
            target: x86_64-apple-darwin
          - os: ubuntu-24.04
            target: x86_64-unknown-linux-musl
          - os: ubuntu-24.04-arm
            target: aarch64-unknown-linux-musl
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v7
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}
      - name: Install musl tools
        if: contains(matrix.target, 'linux-musl')
        run: sudo apt-get update && sudo apt-get install -y musl-tools
      - run: cargo build --release --locked --target ${{ matrix.target }}
      - name: Package
        shell: bash
        run: |
          name="agent-sync-${GITHUB_REF_NAME}-${{ matrix.target }}"
          mkdir "$name"
          cp "target/${{ matrix.target }}/release/agent-sync" README.md LICENSE "$name/"
          tar -czf "$name.tar.gz" "$name"
          shasum -a 256 "$name.tar.gz" > "$name.tar.gz.sha256"
      - uses: actions/upload-artifact@v7
        with:
          name: agent-sync-${{ matrix.target }}
          path: agent-sync-*.tar.gz*

  publish:
    if: startsWith(github.ref, 'refs/tags/v')
    needs: build
    runs-on: ubuntu-24.04
    permissions:
      contents: write
    steps:
      - uses: actions/download-artifact@v8
        with:
          pattern: agent-sync-*
          merge-multiple: true
      - name: Publish GitHub release
        env:
          GH_TOKEN: ${{ github.token }}
        run: >-
          gh release create "$GITHUB_REF_NAME" agent-sync-*.tar.gz*
          --repo "$GITHUB_REPOSITORY"
          --title "$GITHUB_REF_NAME"
          --generate-notes

  publish-crate:
    if: startsWith(github.ref, 'refs/tags/v')
    needs: publish
    runs-on: ubuntu-24.04
    permissions:
      contents: read
      id-token: write
    steps:
      - uses: actions/checkout@v7
      - uses: dtolnay/rust-toolchain@stable
      - name: Verify tag matches Cargo version
        shell: bash
        run: |
          version="$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')"
          test "$GITHUB_REF_NAME" = "v$version"
      - name: Authenticate with crates.io
        id: crates-io-auth
        uses: rust-lang/crates-io-auth-action@v1
      - name: Publish crate
        run: cargo publish --locked
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.crates-io-auth.outputs.token }}