docs: def attempt_squash_merge(pr: PullRequestDetails
                           ) -> Union[bool, CannotAutomergeError]:
      """
      References:
          https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button
      """
      url = ("https://api.github.com/repos/{}/{}/pulls/{}/merge"
             "?access_token={}".format(pr.repo.organization,
                                       pr.repo.name,
                                       pr.pull_id,
                                       pr.repo.access_token))
      data = {
          'commit_title': '{} (#{})'.format(pr.title, pr.pull_id),
          'commit_message': pr.body,
          'sha': pr.branch_sha,
          'merge_method': 'squash'
      }
      response = requests.put(url, json=data)
  
      if response.status_code == 200:
          # Merge succeeded.
          log('Merged PR#{} ({!r}):\n{}\n'.format(
              pr.pull_id,
              pr.title,
              indent(pr.body)))
          return True
  
      if response.status_code == 405:
          return CannotAutomergeError("Pull Request is not mergeable.")
  
      if response.status_code == 409:
          # Need to sync.
          return False
  
      raise RuntimeError('Merge failed. Code: {}. Content: {}.'.format(
          response.status_code, response.content))