name: "Auto Release"

# Only a single job with this concurrency can run at any given time
concurrency: release

on:
  # This runs on a schedule by default:
  schedule:
    # https://crontab.guru/#6_17_*_*_2
    # Every Tuesday at 5:06pm UTC & 9:06am US West Coast.
    # GitHub Actions defaults to UTC:
    - cron: '6 17 * * 2'
    # There is high load on GitHub Actions at the top of the hour:
    #
    #     Note: The schedule event can be delayed during periods of high loads of
    #     GitHub Actions workflow runs. High load times include the start of every
    #     hour. To decrease the chance of delay, schedule your workflow to run at a
    #     different time of the hour.
    #
    # So we run these at a special time, 9:06. Ask @gerhard about it.

  # And it also supports manual triggering:
  # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onworkflow_dispatchinputs
  workflow_dispatch:
    inputs:
      release_type:
        description: 'major|minor|patch|release|prerel'
        default: 'patch'
        required: true
      release_version:
        description: 'Optional release version, e.g. 0.2.0'
        required: false

jobs:
  bump_version-tag-release:
    # ⚠️ If this changes, remember to update the running-workflow-name property
    name: "Bump version, tag & release"
    runs-on: ubuntu-latest
    steps:
      - name: "Check out"
        uses: actions/checkout@v2
        with:
          fetch-depth: 0

      - name: "Ensure that all other checks have succeeded"
        # https://github.com/lewagon/wait-on-check-action
        uses: lewagon/wait-on-check-action@v1.0.0
        with:
          ref: ${{ github.ref }}
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          wait-interval: 10 # polls the GitHub API every 10 every seconds
          running-workflow-name: "Bump version, tag & release"
          allowed-conclusions: success

      - name: "Create next release tag"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SEMVER_BUMP: ${{ github.event.inputs.release_type }}
        run: |
          if [[ -n "${{ github.event.inputs.release_version }}" ]]
          then
            next_release_version="v${{ github.event.inputs.release_version }}"
          else
            previous_release_version="$(gh api /repos/:owner/:repo/releases --jq '.[0].tag_name')"
            echo "PREVIOUS RELEASE VERSION: $previous_release_version"
            # Rather than installing it on every run, we commit it locally so that we have everything we need locally
            # wget https://raw.githubusercontent.com/fsaintjacques/semver-tool/3.3.0/src/semver
            # https://github.com/fsaintjacques/semver-tool
            next_release_version="v$(./semver bump ${SEMVER_BUMP:=patch}  $previous_release_version)"
          fi
          echo "NEXT RELEASE VERSION: $next_release_version"
          gh api -X POST /repos/:owner/:repo/git/refs \
            --field ref="refs/tags/$next_release_version" \
            --field sha="$GITHUB_SHA"

      - name: "Fetch new tag"
        uses: actions/checkout@v2
        with:
          fetch-depth: 0

      - name: "Install Go"
        uses: actions/setup-go@v2
        with:
          go-version: 1.16

      - name: "Release"
        uses: goreleaser/goreleaser-action@v2
        with:
          args: release --rm-dist --debug
        env:
          GITHUB_TOKEN: ${{ secrets.DAGGERCI_TOKEN }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: us-east-1
