name: Release

on:
  push:
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+'

jobs:
  publish:
    name: Publishing for ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [macos-latest, ubuntu-latest, windows-latest]
        rust: [stable]
        include:
          - os: macos-latest
            artifact_prefix: macos
            target: x86_64-apple-darwin
            binary_postfix: ""
          - os: ubuntu-latest
            artifact_prefix: linux
            target: x86_64-unknown-linux-gnu
            binary_postfix: ""
          - os: windows-latest
            artifact_prefix: windows
            target: x86_64-pc-windows-msvc
            binary_postfix: ".exe"

    steps:
      - name: Checkout sources
        uses: actions/checkout@v2

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

      - name: Cache cargo registry, index and build directory
        uses: actions/cache@v2
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            ./target
          key: release-${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

      - name: Cargo build
        uses: actions-rs/cargo@v1
        with:
          command: build
          toolchain: ${{ matrix.rust }}
          args: --release --target ${{ matrix.target }}

      - name: Packaging final binary
        shell: bash
        run: |
          cd target/${{ matrix.target }}/release
          strip hoc${{ matrix.binary_postfix }}
          tar czvf hoc-${{ matrix.artifact_prefix }}.tar.gz hoc${{ matrix.binary_postfix }}

          if [[ ${{ runner.os }} == 'Windows' ]]; then
            certutil -hashfile hoc-${{ matrix.artifact_prefix }}.tar.gz sha256 | grep -E [A-Fa-f0-9]{64} > hoc-${{ matrix.artifact_prefix }}.sha256
          else
            shasum -a 256 hoc-${{ matrix.artifact_prefix }}.tar.gz > hoc-${{ matrix.artifact_prefix }}.sha256
          fi

      - name: Releasing assets
        uses: softprops/action-gh-release@v1
        with:
          files: |
            target/${{ matrix.target }}/release/hoc-${{ matrix.artifact_prefix }}.tar.gz
            target/${{ matrix.target }}/release/hoc-${{ matrix.artifact_prefix }}.sha256
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}