Skip to content

Commit

Permalink
Added tool to cherrypick issues
Browse files Browse the repository at this point in the history
  • Loading branch information
mnaser committed Jun 1, 2024
1 parent 8661577 commit bd398ea
Showing 1 changed file with 88 additions and 0 deletions.
88 changes: 88 additions & 0 deletions build/cherrypicker.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
#!/bin/bash

# SPDX-License-Identifier: Apache-2.0

# Check if the correct number of arguments are provided
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <issue_number>"
exit 1
fi

# Variables
REPO="vexxhost/atmosphere"
ISSUE_NUMBER=$1
LOCAL_REPO_PATH=$(mktemp -d -t repo-XXXXXXXXXX)

# Function to clean up the local repository path
cleanup() {
echo "Cleaning up..."
rm -rf "$LOCAL_REPO_PATH"
}
trap cleanup EXIT

# Clone the repo into a dynamically generated path
git clone "https://github.com/$REPO.git" "$LOCAL_REPO_PATH"

cd "$LOCAL_REPO_PATH" || exit

# Fetch the latest changes
git fetch origin

# Get the issue details
ISSUE_DETAILS=$(gh issue view $ISSUE_NUMBER --json title,body --jq '{title: .title, body: .body}')
ISSUE_TITLE=$(echo "$ISSUE_DETAILS" | jq -r .title)
ISSUE_BODY=$(echo "$ISSUE_DETAILS" | jq -r .body)

# Extract the target branch from the issue title
TARGET_BRANCH=$(echo "$ISSUE_TITLE" | grep -oP '(?<=\[).+?(?=\])')

if [ -z "$TARGET_BRANCH" ]; then
echo "Failed to extract the target branch from the issue title."
exit 1
fi

# Extract the PR number from the issue body
PR_NUMBER=$(echo "$ISSUE_BODY" | grep -oP '(?<=#)\d+')

if [ -z "$PR_NUMBER" ]; then
echo "Failed to extract the PR number from the issue body."
exit 1
fi

echo "Extracted PR number: $PR_NUMBER"
echo "Extracted target branch: $TARGET_BRANCH"

# Get the merged commit ID
MERGED_COMMIT_ID=$(gh pr view $PR_NUMBER --json mergeCommit --jq .mergeCommit.oid)

# Check if the commit ID was retrieved
if [ -z "$MERGED_COMMIT_ID" ]; then
echo "Failed to get the merged commit ID."
exit 1
fi

# Checkout the target branch
git checkout $TARGET_BRANCH
git pull origin $TARGET_BRANCH

# Cherry-pick the merged commit
if ! git cherry-pick $MERGED_COMMIT_ID; then
echo "Error during cherry-pick"
exit 1
fi

# Create a new branch
NEW_BRANCH_NAME="cherry-pick-$MERGED_COMMIT_ID-$TARGET_BRANCH"
git checkout -b $NEW_BRANCH_NAME
git push origin $NEW_BRANCH_NAME

# Get the original PR title and body
PR_TITLE=$(gh pr view $PR_NUMBER --json title --jq .title)
PR_BODY=$(gh pr view $PR_NUMBER --json body --jq .body)

# Create a new PR with the same title, prefixed with the target branch name
NEW_PR_TITLE="[$TARGET_BRANCH] $PR_TITLE"
NEW_PR_BODY="${PR_BODY}\n\nCloses #$ISSUE_NUMBER"
gh pr create --title "$NEW_PR_TITLE" --body "$NEW_PR_BODY" --head "$NEW_BRANCH_NAME" --base "$TARGET_BRANCH"

echo "New pull request created."

0 comments on commit bd398ea

Please sign in to comment.