-
Notifications
You must be signed in to change notification settings - Fork 192
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add helper script for creating patch releases from a list of commits (#…
…6602) The script helps with creating a patch release. It takes a list of commits, cherry-picks them, appends the original commit hash to the cherry-picked commit message and outputs a short summary of all commits for the changelog.
- Loading branch information
1 parent
846c11f
commit ec8a055
Showing
1 changed file
with
56 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
#!/bin/bash | ||
|
||
# Script: patch-release.sh | ||
# Description: | ||
# Cherry-picks a list of commits, amends each with the original commit hash for tracking, | ||
# and generates a summary from the short github commit messages with links to each commit. | ||
# | ||
# Usage: | ||
# ./patch-release.sh <commit1> <commit2> ... | ||
# | ||
# Example: | ||
# ./patch-release.sh abc1234 def5678 | ||
|
||
set -e | ||
|
||
# Check if at least two arguments are provided (repo and at least one commit) | ||
if [ "$#" -lt 1 ]; then | ||
echo "Usage: $0 <commit1> <commit2> ..." | ||
echo "Example: $0 abc1234 def5678" | ||
exit 1 | ||
fi | ||
|
||
GITHUB_REPO="aiidateam/aiida-core" | ||
|
||
# Create an array to store commit summaries | ||
declare -a commit_summaries=() | ||
|
||
# Loop through each commit hash | ||
for commit in "$@"; do | ||
# Cherry-pick the commit | ||
if git cherry-pick "$commit"; then | ||
# If cherry-pick succeeds, get the short message and short hash | ||
commit_message=$(git log -1 --pretty=format:"%B" HEAD) | ||
original_short_hash=$(git log -1 --pretty=format:"%h" "$commit") | ||
original_long_hash=$(git rev-parse $original_short_hash) | ||
|
||
# Amend the cherry-picked commit to include the original commit ID for tracking | ||
git commit --amend -m "$commit_message" -m "Cherry-pick: $original_long_hash" | ||
|
||
# Format the output as a Markdown list item and add to the array | ||
short_commit_message=$(git log -1 --pretty=format:"%s" HEAD) | ||
cherry_picked_hash=$(git log -1 --pretty=format:"%h" HEAD) | ||
commit_summaries+=("- $short_commit_message [[${commit}]](https://github.com/$GITHUB_REPO/commit/${original_long_hash})") | ||
else | ||
echo "Failed to cherry-pick commit $commit" | ||
# Abort the cherry-pick in case of conflict | ||
git cherry-pick --abort | ||
exit 1 | ||
fi | ||
done | ||
|
||
# Print the summary | ||
echo -e "\n### Cherry-Picked Commits Summary:\n" | ||
for summary in "${commit_summaries[@]}"; do | ||
echo "$summary" | ||
done |