# yamllint disable rule:line-length
name: Pushing CHANGELOG.md triggers tag, release, and Galaxy publish
on:  # yamllint disable-line rule:truthy
  push:
    branches:
      - main
      - master
    paths:
      - CHANGELOG.md
env:
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}  # This token is provided by Actions, you do not need to create your own token
jobs:
  tag_release_publish:
    runs-on: ubuntu-latest
    steps:
      - name: checkout PR
        uses: actions/checkout@v2
      - name: Get tag and message from the latest CHANGELOG.md commit
        id: tag
        run: |
          set -euxo pipefail
          print=false
          while read -r line; do
              if [[ "$line" =~ ^\[([0-9]+\.[0-9]+\.[0-9]+)\]\ -\ [0-9-]+ ]]; then
                  if [ "$print" = false ]; then
                      _tagname="${BASH_REMATCH[1]}"
                      echo "$line"
                      print=true
                  else
                      break
                  fi
              elif [ "$print" = true ]; then
                  echo "$line"
              fi
          done < CHANGELOG.md > ./.tagmsg.txt
          git fetch --all --tags
          for t in $( git tag -l ); do
              if [ "$t" = "$_tagname" ]; then
                  echo INFO: tag "$t" already exists
                  exit 1
              fi
          done
          # Get name of the branch that the change was pushed to
          _branch="${GITHUB_REF_NAME:-}"
          if [ "$_branch" = master ] || [ "$_branch" = main ]; then
              echo Using branch name ["$_branch"] as push branch
          else
              echo WARNING: GITHUB_REF_NAME ["$_branch"] is not main or master
              _branch=$( git branch -r | grep -o 'origin/HEAD -> origin/.*$' | \
                         awk -F'/' '{print $3}' || : )
          fi
          if [ -z "$_branch" ]; then
              _branch=$( git branch --points-at HEAD --no-color --format='%(refname:short)' )
          fi
          if [ -z "$_branch" ]; then
              echo ERROR: unable to determine push branch
              git branch -a
              exit 1
          fi
          echo ::set-output name=tagname::"$_tagname"
          echo ::set-output name=branch::"$_branch"
      - name: Create tag
        uses: mathieudutour/github-tag-action@v6.0
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          custom_tag: ${{ steps.tag.outputs.tagname }}
          tag_prefix: ''
      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        with:
          tag_name: ${{ steps.tag.outputs.tagname }}
          release_name: Version ${{ steps.tag.outputs.tagname }}
          body_path: ./.tagmsg.txt
          draft: false
          prerelease: false
      - name: Publish role to Galaxy
        uses: robertdebock/galaxy-action@1.2.0
        with:
          galaxy_api_key: ${{ secrets.galaxy_api_key }}
          git_branch: ${{ steps.tag.outputs.branch }}
