# Based on https://github.com/best-of-lists/best-of-update-action/blob/v0.8.5/workflows/update-best-of-list.yml
name: update-best-of-list

on:
  workflow_dispatch:
    inputs:
      version:
        description: "Version to use for this update"
        required: false
  schedule:
    - cron: "0 14 * * 4" # Every thursday at 2pm

env:
  BRANCH_PREFIX: "update/"
  DEFAULT_BRANCH: "main"

jobs:
  update-best-of-list:
    runs-on: ubuntu-latest
    steps:
      - if: ${{ github.event.inputs != null  &&  github.event.inputs.version != null }}
        name: set-version-from-input
        run: echo "VERSION=${{ github.event.inputs.version }}" >> $GITHUB_ENV
      - if: ${{ ! (env.VERSION != null && env.VERSION != '') }}
        name: set-version-via-date
        run: echo "VERSION=$(date '+%Y.%m.%d')" >> $GITHUB_ENV
      - uses: actions/checkout@v2
      - name: check-version-tag
        shell: bash
        run: |
          git fetch --tags --force
          git show-ref --tags --verify --quiet -- "refs/tags/${{ env.VERSION }}" && echo "VERSION=$(date '+%Y.%m.%d-%H.%M')" >> $GITHUB_ENV || exit 0
      - name: create-update-branch
        uses: peterjgrainger/action-create-branch@v2.0.1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          branch: "${{ env.BRANCH_PREFIX }}${{ env.VERSION }}"
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
          ref: ${{ env.BRANCH_PREFIX }}${{ env.VERSION }}
          token: ${{ secrets.GITHUB_TOKEN }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: update-best-of-list
        uses: best-of-lists/best-of-update-action@v0.8.5
        with:
          libraries_key: ${{ secrets.LIBRARIES_KEY }}
          github_key: ${{ secrets.GITHUB_TOKEN }}
      - name: push-update
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          branch: ${{ env.BRANCH_PREFIX }}${{ env.VERSION  }}
          commit_user_name: best-of update
          commit_user_email: actions@github.com
          commit_message: Update best-of list for version ${{ env.VERSION  }}
          tagging_message: ${{ env.VERSION  }}
          skip_dirty_check: true
          commit_options: "--allow-empty"
      - name: create-pull-request
        shell: bash
        run: |
          # Stops script execution if a command has an error
          set -e
          curl -fsSL https://github.com/github/hub/raw/master/script/get | bash -s 2.14.2
          bin/hub pull-request -b ${{ env.DEFAULT_BRANCH }} -h ${{ env.BRANCH_PREFIX }}${{ env.VERSION  }} --no-edit -m "Best-of update: ${{ env.VERSION  }}" -m "To finish this update: Select <code>Merge pull request</code> below and <code>Confirm merge</code>. Also, make sure to publish the created draft release in the [releases section](../releases) as well." || true
          rm bin/hub
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: create-release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ env.VERSION  }}
          release_name: "Update: ${{ env.VERSION  }}"
          body_path: "latest-changes.md"
          draft: true
          prerelease: false
