Skip to content

Instantly share code, notes, and snippets.

@Najki
Last active January 8, 2025 20:46
Show Gist options
  • Save Najki/c1b34c3dbed8baaeda83986471d54c6a to your computer and use it in GitHub Desktop.
Save Najki/c1b34c3dbed8baaeda83986471d54c6a to your computer and use it in GitHub Desktop.
Automated pull request creation
#!/bin/bash
# Example:
# jira_issue_number=$(extract_jira_issue_number_from_string "nikodem/ABC-123-test")
# ABC-123
extract_jira_issue_number_from_string() {
local input="$1"
local issue_number=$(rg -o '\b[A-Za-z]{2,5}-\d+\b' <<< "$input")
if [ -z "$issue_number" ]; then
echo ""
else
issue_number=$(echo "$issue_number" | tr '[:lower:]' '[:upper:]')
echo "$issue_number"
fi
}
#!/bin/bash
set -euo pipefail
. $(dirname "$0")/_jira.sh
if [ $# -ne 2 ]; then
echo "Usage: $0 TARGET_BRANCH PULL_REQUEST_TITLE"
exit 1
fi
target_branch=$1
pull_request_title=$2
current_branch=$(git rev-parse --abbrev-ref HEAD)
jira_issue_number=$(extract_jira_issue_number_from_string "$current_branch")
if [ -z "$jira_issue_number" ]; then
read -p "Could not find Jira issue number in branch name. Please enter the Jira issue number: " jira_issue_number
fi
commits=$(git --no-pager log --oneline --no-merges --no-decorate $target_branch..$current_branch | sed -E 's/^([0-9a-z]+) (.+)/* \2 \1/g' | tac)
jira_issue_url="https://fitatu.atlassian.net/browse/$jira_issue_number"
# DO CREATE PULL REQUEST
gh pr create --title "$jira_issue_number $pull_request_title" --body "$commits
$jira_issue_url" --base $target_branch --head "$current_branch" --draft --assignee @me
@amadeuszw-fitatu
Copy link

_jira.sh without need to install rg:

#!/bin/bash

# Example:
# jira_issue_number=$(extract_jira_issue_number_from_string "feature/ABC-123-test")
# ABC-123
extract_jira_issue_number_from_string() {
  local input="$1"
  local issue_number=$(echo "$input" | grep -o '\b[A-Za-z]\{2,\}-[0-9]\+\b')

  if [ -z "$issue_number" ]; then
    echo ""
  else
    issue_number=$(echo "$issue_number" | tr '[:lower:]' '[:upper:]')

    echo "$issue_number"
  fi
}

git-pull-request.sh version with self-assignment to PR and no commits in the description:

#!/bin/bash

set -euo pipefail

# Check if git command exists
if ! command -v git &> /dev/null; then
  echo "Error: git command not found. Please install Git."
  exit 1
fi

# Check if gh command exists
if ! command -v gh &> /dev/null; then
  echo "Error: gh command not found. Please install GitHub CLI."
  exit 1
fi

. $(dirname "$0")/_jira.sh

if [ $# -ne 2 ]; then
  echo "Usage: $0 TARGET_BRANCH PULL_REQUEST_TITLE"
  exit 1
fi

TARGET_BRANCH=$1
PULL_REQUEST_TITLE=$2

CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
JIRA_ISSUE_NUMBER=$(extract_jira_issue_number_from_string "${CURRENT_BRANCH}")

if [ -z "${JIRA_ISSUE_NUMBER}" ]; then
  read -p "Could not find Jira issue number in branch name. Please enter the Jira issue number: " JIRA_ISSUE_NUMBER
fi

JIRA_ISSUE_URL="https://fitatu.atlassian.net/browse/${JIRA_ISSUE_NUMBER}"

# Create pull request
gh pr create --title "${JIRA_ISSUE_NUMBER} ${PULL_REQUEST_TITLE}" --body "## Opis:
_TODO_

## Jira:
${JIRA_ISSUE_URL}" --base $TARGET_BRANCH --head "${CURRENT_BRANCH}" --draft --assignee @me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment