name: hydrun CI

on:
  push:
  pull_request:
  schedule:
    - cron: "0 0 * * 0"

jobs:
  build-linux:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target:
          - id: test
            src: .
            os: golang:bullseye
            flags: ""
            cmd: GOFLAGS="-short" ./Hydrunfile test
            dst: out/*
          - id: go
            src: .
            os: golang:bullseye
            flags: ""
            cmd: ./Hydrunfile go protoc-gen-polyglot-ts
            dst: out/*

    steps:
      - name: Maximize build space
        run: |
          sudo rm -rf /usr/share/dotnet
          sudo rm -rf /usr/local/lib/android
          sudo rm -rf /opt/ghc
      - name: Checkout
        uses: actions/checkout@v2
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Set up hydrun
        run: |
          curl -L -o /tmp/hydrun "https://github.com/pojntfx/hydrun/releases/latest/download/hydrun.linux-$(uname -m)"
          sudo install /tmp/hydrun /usr/local/bin
      - name: Build with hydrun
        working-directory: ${{ matrix.target.src }}
        run: hydrun -o ${{ matrix.target.os }} ${{ matrix.target.flags }} "${{ matrix.target.cmd }}"
      - name: Fix permissions for output
        run: sudo chown -R $USER .
      - name: Upload output
        uses: actions/upload-artifact@v2
        with:
          name: ${{ matrix.target.id }}
          path: ${{ matrix.target.dst }}
  publish-linux:
    runs-on: ubuntu-latest
    needs: build-linux

    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Download output
        uses: actions/download-artifact@v2
        with:
          path: /tmp/out
      - name: Publish pre-release to GitHub releases
        if: ${{ github.ref == 'refs/heads/staging' }}
        uses: marvinpinto/action-automatic-releases@latest
        with:
          repo_token: "${{ secrets.GITHUB_TOKEN }}"
          automatic_release_tag: unstable
          prerelease: true
          files: |
            /tmp/out/*/*
      - name: Publish release to GitHub releases
        if: startsWith(github.ref, 'refs/tags/v')
        uses: marvinpinto/action-automatic-releases@latest
        with:
          repo_token: "${{ secrets.GITHUB_TOKEN }}"
          prerelease: false
          files: |
            /tmp/out/*/*
