git-statuses 0.8.0

A tool to display git repository statuses in a table format
name: release
on:
  push:
    tags:
      - "*.*.*"
jobs:
  create-windows-binaries:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v4
        with:
          lfs: true

      - name: Install stable
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true

      - name: Build git-statuses
        run: |
          cargo build --release

      - name: Get the version
        shell: bash
        id: tagName
        run: |
          VERSION=$(cargo pkgid | cut -d# -f2 | cut -d: -f2)
          echo "::set-output name=tag::$VERSION"

      - name: Build package
        id: package
        shell: bash
        run: |
          ARCHIVE_TARGET="x86_64-pc-windows-msvc"
          ARCHIVE_NAME="git-statuses-${{ steps.tagName.outputs.tag }}-$ARCHIVE_TARGET"
          ARCHIVE_FILE="${ARCHIVE_NAME}.zip"
          7z a ${ARCHIVE_FILE} ./target/release/git-statuses.exe
          echo "::set-output name=file::${ARCHIVE_FILE}"
          echo "::set-output name=name::${ARCHIVE_NAME}.zip"

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: ${{ steps.package.outputs.name }}
          path: ${{ steps.package.outputs.file }}

  create-unix-binaries:
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
        include:
          - os: ubuntu-latest
            target: x86_64-unknown-linux-musl
          - os: macos-latest
            target: x86_64-apple-darwin

    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v4
        with:
          lfs: true

      - name: Install Rust
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          target: ${{ matrix.target }}
          override: true

      - name: Install musl-tools and musl OpenSSL
        if: matrix.os == 'ubuntu-latest'
        run: |
          sudo apt-get update
          sudo apt-get install -y musl-tools curl pkg-config libssl-dev
          echo "Enable musl OpenSSL"
          echo "PKG_CONFIG_ALLOW_CROSS=1" >> $GITHUB_ENV
          rustup target add x86_64-unknown-linux-musl

      - name: Install OpenSSL on macOS
        if: matrix.os == 'macos-latest'
        run: |
          brew install openssl
          echo "OPENSSL_DIR=$(brew --prefix openssl@3)" >> $GITHUB_ENV

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

      - name: Strip binary
        run: |
          strip target/${{ matrix.target }}/release/git-statuses

      - name: Get the version
        id: tagName
        run: |
          VERSION=$(cargo pkgid | cut -d# -f2 | cut -d: -f2)
          echo "::set-output name=tag::$VERSION"

      - name: Build package
        id: package
        run: |
          TAR_FILE=git-statuses-${{ steps.tagName.outputs.tag }}-${{ matrix.target }}
          cd target/${{ matrix.target }}/release
          tar -czvf $GITHUB_WORKSPACE/$TAR_FILE.tar.gz git-statuses
          echo ::set-output "name=name::${TAR_FILE}"
          echo ::set-output "name=file::${TAR_FILE}.tar.gz "

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: ${{ steps.package.outputs.name }}
          path: ${{ steps.package.outputs.file }}

  deploy:
    needs: [create-windows-binaries, create-unix-binaries]

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
        with:
          lfs: true

      - name: Install Rust stable
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true

      - name: Create Cargo.lock
        run: |
          cargo update

      - name: Get version
        id: tagName
        run: |
          VERSION=$(cargo pkgid | cut -d# -f2 | cut -d: -f2)
          echo "::set-output name=tag::$VERSION"

      - name: Download artifacts
        uses: actions/download-artifact@v4
        with:
          path: ./binaries

      - name: Create a release
        uses: softprops/action-gh-release@v2
        with:
          name: v${{ steps.tagName.outputs.tag }}
          files: |
            ./binaries/**/*.zip
            ./binaries/**/*.tar.gz
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}