name: Bump version

on:
  workflow_dispatch:
    inputs:
      bump_rule:
        type: choice
        description: How to bump the project's version (see https://python-poetry.org/docs/cli/#version)
        options:
          - patch
          - minor
          - major
          - prepatch
          - preminor
          - premajor
          - prerelease
        required: true

jobs:
  bump_version:
    name: "Bump version and create changelog"
    if: "!startsWith(github.event.head_commit.message, 'bump:')"
    runs-on: ubuntu-latest
    env:
      CI_COMMIT_EMAIL: "ci-runner@unfccc-ghg-data.invalid"
    steps:
      - name: Check out repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
          token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}"

      # towncrier imports the package as part of building so we have to
      # install the pacakage (to keep things slim, we only install the main
      # dependencies, which also means that we get a test that we can import
      # the package with only the compulsory dependencies installed for free)
      - uses: ./.github/actions/setup
        with:
          python-version: "3.11"
          venv-id: "bump"
          poetry-dependency-install-flags: "--only main"

      - name: Install towncrier
        run: |
          poetry run pip install towncrier

      - name: Create bump and changelog

        run: |
          git config --global user.name "$GITHUB_ACTOR"
          git config --global user.email "$CI_COMMIT_EMAIL"

          # Bump
          BASE_VERSION=`poetry version -s`
          NEW_VERSION=`poetry version -s ${{ github.event.inputs.bump_rule }}`
          echo "Bumping version $BASE_VERSION > $NEW_VERSION"
          poetry run towncrier build --yes --version v$NEW_VERSION
          git commit -a -m "bump: version $BASE_VERSION -> $NEW_VERSION"
          git tag v$NEW_VERSION

          # Bump to alpha (so that future commits do not have the same
          # version as the tagged commit)
          BASE_VERSION=`poetry version -s`
          NEW_VERSION=`poetry version -s prerelease`
          echo "Bumping version $BASE_VERSION > $NEW_VERSION"
          git commit -a -m "bump(pre-release): version $BASE_VERSION > $NEW_VERSION"
          git push && git push --tags
