name: "Semantic PR Title"

on:
  pull_request_target:
    types:
      - opened
      - edited
      - synchronize
      - reopened

permissions:
  pull-requests: write

jobs:
  main:
    name: check
    runs-on: ubuntu-latest
    if: ${{ github.event.pull_request.user.login != 'dependabot[bot]' }}
    steps:
      - name: Lint and verify PR title
        uses: amannn/action-semantic-pull-request@v5
        id: lint_pr_title
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          types: |
            build
            chore
            ci
            docs
            feat
            impr
            fix
            perf
            refactor
            revert
            style
            test
          requireScope: false
          subjectPattern:  ^.+ \(@[^ ,]+(, @[^ ,]+)*\)$
          subjectPatternError: |
            Title "{title}"
            didn't match the configured pattern. Please ensure that the title
            contains your name so that you can be credited in our changelog.
            A correct version would look something like: 
            
            feat: add new feature (@github-username)
            impr(quotes): add english quotes (@github-username)
            fix: resolve bug (@github-username)
            
      - uses: marocchino/sticky-pull-request-comment@v2
        # When the previous steps fails, the workflow would stop. By adding this
        # condition you can continue the execution with the populated error message.
        if: always() && (steps.lint_pr_title.outputs.error_message != null) 
        with:
          header: pr-title-lint-error
          message: |
            Hey there and thank you for opening this pull request! 👋🏼

            We require pull request titles to follow the [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/) and also include the author name at the end inside parenthesis. It looks like your proposed title needs to be adjusted.

            Details:

            ```
            ${{ steps.lint_pr_title.outputs.error_message }}
            ```
            A correct version would look something like: 

            feat: add new feature (@github-username)
            impr(quotes): add english quotes (@github-username)
            fix: resolve bug (@github-username)

      # Delete a previous comment when the issue has been resolved
      - if: ${{ steps.lint_pr_title.outputs.error_message == null }}
        uses: marocchino/sticky-pull-request-comment@v2
        with:
          header: pr-title-lint-error
          delete: true
