name: Release

on:
  release:
    types: [published]

jobs:
  release:
    name: Release cmd/protoc-gen-go-grpc
    runs-on: ubuntu-latest
    if: startsWith(github.event.release.tag_name, 'cmd/protoc-gen-go-grpc/')
    strategy:
      matrix:
        goos: [linux, darwin, windows]
        goarch: [386, amd64]
        exclude:
          - goos: darwin
            goarch: 386

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

      - name: Set up Go
        uses: actions/setup-go@v2

      - name: Download dependencies
        run: |
          cd cmd/protoc-gen-go-grpc
          go mod download

      - name: Prepare build directory
        run: |
          mkdir -p build/
          cp README.md build/
          cp LICENSE build/

      - name: Build
        env:
          GOOS: ${{ matrix.goos }}
          GOARCH: ${{ matrix.goarch }}
        run: |
          cd cmd/protoc-gen-go-grpc
          go build -trimpath -o $GITHUB_WORKSPACE/build

      - name: Create package
        id: package
        run: |
          PACKAGE_NAME=protoc-gen-go-grpc.${GITHUB_REF#refs/tags/cmd/protoc-gen-go-grpc/}.${{ matrix.goos }}.${{ matrix.goarch }}.tar.gz
          tar -czvf $PACKAGE_NAME -C build .
          echo ::set-output name=name::${PACKAGE_NAME}

      - name: Upload asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ github.event.release.upload_url }}
          asset_path: ./${{ steps.package.outputs.name }}
          asset_name: ${{ steps.package.outputs.name }}
          asset_content_type: application/gzip
