gitas 0.0.7

GitHub Account Switch — manage multiple git identities
name: Release

permissions:
  contents: write

on:
  push:
    tags:
      - "v*"
  workflow_dispatch:
    inputs:
      tag_name:
        description: "Tag name to release (e.g. v0.1.0)"
        required: true

jobs:
  build-and-upload:
    name: Build ${{ matrix.target }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: ubuntu-latest
            target: x86_64-unknown-linux-musl
            artifact_name: gitas
            asset_suffix: linux-x64.tar.gz
          - os: windows-latest
            target: x86_64-pc-windows-msvc
            artifact_name: gitas.exe
            asset_suffix: windows-x64.zip
          - os: macos-latest # Intel via Rosetta/Cross
            target: x86_64-apple-darwin
            artifact_name: gitas
            asset_suffix: macos-x64.tar.gz
          - os: macos-latest # Apple Silicon (M1)
            target: aarch64-apple-darwin
            artifact_name: gitas
            asset_suffix: macos-arm64.tar.gz
          - os: ubuntu-latest
            target: aarch64-unknown-linux-musl
            artifact_name: gitas
            asset_suffix: linux-arm64.tar.gz
          - os: windows-latest
            target: aarch64-pc-windows-msvc
            artifact_name: gitas.exe
            asset_suffix: windows-arm64.zip

    steps:
      - uses: actions/checkout@v4

      - name: Get Version
        shell: bash
        run: |
          if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
            echo "VERSION=${{ github.event.inputs.tag_name }}" >> $GITHUB_ENV
          else
            echo "VERSION=${{ github.ref_name }}" >> $GITHUB_ENV
          fi

      - name: Install dependencies (Linux)
        if: runner.os == 'Linux'
        run: |
          sudo apt-get update
          sudo apt-get install -y libdbus-1-dev pkg-config musl-tools

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}

      - name: Setup cross-toolchain (Linux ARM64)
        if: matrix.target == 'aarch64-unknown-linux-musl'
        uses: taiki-e/setup-cross-toolchain-action@v1
        with:
          target: ${{ matrix.target }}

      - name: Build
        run: cargo build --release --target ${{ matrix.target }}

      - name: Archive (Unix)
        if: runner.os != 'Windows'
        run: |
          cd target/${{ matrix.target }}/release
          tar -czf ../../../gitas-${{ env.VERSION }}-${{ matrix.asset_suffix }} ${{ matrix.artifact_name }}

      - name: Archive (Windows)
        if: runner.os == 'Windows'
        run: |
          cd target/${{ matrix.target }}/release
          7z a ../../../gitas-${{ env.VERSION }}-${{ matrix.asset_suffix }} ${{ matrix.artifact_name }}

      - name: Upload Binaries
        uses: actions/upload-artifact@v4
        with:
          name: gitas-${{ env.VERSION }}-${{ matrix.asset_suffix }}
          path: gitas-${{ env.VERSION }}-${{ matrix.asset_suffix }}

  create-release:
    name: Create Release
    runs-on: ubuntu-latest
    needs: build-and-upload
    if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
    steps:
      - name: Download Artifacts
        uses: actions/download-artifact@v4
        with:
          path: assets
          merge-multiple: true

      - name: Create Release
        uses: softprops/action-gh-release@v1
        with:
          files: assets/*
          tag_name: ${{ github.event.inputs.tag_name || github.ref_name }}
          generate_release_notes: true