name: 'Create Pull Request'
description: 'Creates a pull request.'

inputs:
  branch-name:
    description: 'The name of the branch to create the PR from.'
    required: true
  pr-title:
    description: 'The title of the pull request.'
    required: true
  pr-body:
    description: 'The body of the pull request.'
    required: true
  base-branch:
    description: 'The branch to merge into.'
    required: true
    default: 'main'
  github-token:
    description: 'The GitHub token to use for creating the pull request.'
    required: true
  dry-run:
    description: 'Whether to run in dry-run mode.'
    required: false
    default: 'false'
  working-directory:
    description: 'The working directory to run the commands in.'
    required: false
    default: '.'

runs:
  using: 'composite'
  steps:
    - name: '📝 Print Inputs'
      shell: 'bash'
      env:
        JSON_INPUTS: '${{ toJSON(inputs) }}'
      run: 'echo "$JSON_INPUTS"'
    - name: 'Creates a Pull Request'
      if: "inputs.dry-run != 'true'"
      env:
        GH_TOKEN: '${{ inputs.github-token }}'
        INPUTS_BRANCH_NAME: '${{ inputs.branch-name }}'
        INPUTS_PR_TITLE: '${{ inputs.pr-title }}'
        INPUTS_PR_BODY: '${{ inputs.pr-body }}'
        INPUTS_BASE_BRANCH: '${{ inputs.base-branch }}'
      shell: 'bash'
      working-directory: '${{ inputs.working-directory }}'
      run: |
        set -e
        if ! git ls-remote --exit-code --heads origin "${INPUTS_BRANCH_NAME}"; then
          echo "::error::Branch '${INPUTS_BRANCH_NAME}' does not exist on the remote repository."
          exit 1
        fi
        PR_URL=$(gh pr create \
          --title "${INPUTS_PR_TITLE}" \
          --body "${INPUTS_PR_BODY}" \
          --base "${INPUTS_BASE_BRANCH}" \
          --head "${INPUTS_BRANCH_NAME}" \
          --fill)
        gh pr merge "$PR_URL" --auto
