on:
  push:
    tags:
      - "v**"

permissions: # Same as deploy2.yml
  contents: "write"
  pages: "write"
  id-token: "write"

jobs:

  update-versions:
    runs-on: "ubuntu-latest"
    steps:
      - uses: "actions/checkout@v4"
        with: # Ensure we are not in a detached HEAD state
          ref: "master"
      # Check that the tag commit is the latest master commit
      - run: |
          git fetch --tags
          tag_commit=$(git rev-parse ${{ github.ref }})
          master_commit=$(git rev-parse master)
          if [ "$tag_commit" != "$master_commit" ]; then
              echo "The tag commit ($tag_commit) is not the latest master commit ($master_commit)"
              exit 1
          fi
      - run: "echo 'CLEAN_VERSION=${{ github.ref }}' | sed 's,refs/tags/v,,g' >> $GITHUB_ENV"
      # Write the new version to package.json
      - uses: "actions/setup-node@v4"
      - run: "yarn version --new-version $CLEAN_VERSION --no-git-tag-version"
      # Write the new version to pyproject.toml
      - run: "pipx install poetry"
      - uses: "actions/setup-python@v5"
        with:
          python-version: "3.12"
          cache: "poetry"
      - run: "poetry version $CLEAN_VERSION"
      # Commit the changes and move the tag!
      - run: |
          git config --global user.email "yeicor@users.noreply.github.com"
          git config --global user.name "Yeicor"
          if git commit -am "Automatically update version to $CLEAN_VERSION"; then
            git push
            # Move the tag to the new commit
            git tag -f -a "v$CLEAN_VERSION" -m "v$CLEAN_VERSION"
            git push -f --tags # Force push the tag to GitHub
            # The tag move will NOT trigger a new workflow
          else
            echo "No source change detected on version update (did you repeat a release tag??)"
            exit 1
          fi

  deploy: # Makes sure all artifacts are updated and use the new version for the next deployment steps
    needs: "update-versions"
    uses: "./.github/workflows/deploy2.yml"
    secrets: "inherit" # Inherit the secrets from the parent workflow
    with:
      ref: "master"  # Ensure we are cloning the latest version of the repository
