diff options
| author | Jay Kwak <82421531+jkwak-work@users.noreply.github.com> | 2024-08-27 18:13:52 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-27 18:13:52 -0700 |
| commit | 5645ecfc9d487a5fe612f17d970332a93ed40c47 (patch) | |
| tree | 1b673fb79f95e1c37beaa9d6b952a104c225c469 /docs/scripts/release-note.sh | |
| parent | 6bb32aa976494466bd6303f8ae6e348b297edb44 (diff) | |
Script for generating a release note (#4776)
* Script for generating a release note
Related to #4718
* Adding a comment about how to run
---------
Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'docs/scripts/release-note.sh')
| -rw-r--r-- | docs/scripts/release-note.sh | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/docs/scripts/release-note.sh b/docs/scripts/release-note.sh new file mode 100644 index 000000000..f1a93137a --- /dev/null +++ b/docs/scripts/release-note.sh @@ -0,0 +1,106 @@ +#!/bin/bash +# This script generates a release note. +# It prints information about breaking-changes first and the rest. +# The content is mostly based on `git log --oneline --since 202X-YY-ZZ`. + +# Usage: the script takes one command-line argument that will be used on '-since' option of git command. +# As an example, you can run a script with a following command, and it will print commit titles between today and 2024-07-01. +# ``` +# docs/scripts/release-note.sh 2024-07-01 +# ``` + +# This script is supposed to work on all Windows based shell systems including WSL and git-bash. +# If you make any modifications, please test them, because CI doesn't test this script. + +verbose=true +$verbose && echo "Reminder: PLEASE make sure your local repo is up-to-date before running the script." >&2 + +gh="" +for candidate in "$(which gh.exe)" "/mnt/c/Program Files/GitHub CLI/gh.exe" "/c/Program Files/GitHub CLI/gh.exe" +do + if [ -x "$candidate" ] + then + gh="$candidate" + break + fi +done +if [ "x$gh" = "x" ] || ! [ -x "$gh" ] +then + echo "File not found: gh.exe" + echo "gh.exe can be downloaded from https://cli.github.com" + exit 1 +fi +$verbose && echo "gh.exe is found from: $gh" >&2 + +if [ "x$1" = "x" ] +then + echo "This script requires 'since' information for git-log command." + echo "Usage: $0 2024-07-30" + exit 1 +fi +since="$1" + +commits="$(git log --oneline --since $since)" +commitsCount="$(echo "$commits" | wc -l)" + +echo "=== Breaking changes ===" +breakingChanges="" +for i in $(seq $commitsCount) +do + line="$(echo "$commits" | head -$i | tail -1)" + + # Get PR number from the git commit title + pr="$(echo "$line" | grep '#[1-9][0-9][0-9][0-9][0-9]*' | sed 's|.* (\#\([1-9][0-9][0-9][0-9][0-9]*\))|\1|')" + [ "x$pr" = "x" ] && break + + # Check if the PR is marked as a breaking change + if "$gh" issue view $pr --json labels | grep -q 'pr: breaking change' + then + breakingChanges+="$line" + fi +done +if [ "x$breakingChanges" = "x" ] +then + echo "No breaking changes" +else + echo "$breakingChanges" +fi +echo "" + +echo "=== All changes for this release ===" +for i in $(seq $commitsCount) +do + line="$(echo "$commits" | head -$i | tail -1)" + + result="$line" + for dummy in 1 + do + # Get PR number from the git commit title + pr="$(echo "$line" | grep '#[1-9][0-9][0-9][0-9][0-9]*' | sed 's|.* (\#\([1-9][0-9][0-9][0-9][0-9]*\))|\1|')" + [ "x$pr" = "x" ] && break + + # Mark breaking changes with "[BREAKING]" + if "$gh" issue view $pr --json labels | grep -q 'pr: breaking change' + then + result="[BREAKING] $line" + fi + + # Get the issue number for the PR + body="$("$gh" issue view $pr --json body)" + [ "x$body" = "x" ] && break + issue="$(echo "$body" | grep '#[1-9][0-9][0-9][0-9][0-9]*' | sed 's|.*\#\([1-9][0-9][0-9][0-9][0-9]*\).*|\1|')" + [ "x$issue" = "x" ] && break + + # Get the labels of the issue + label="$("$gh" issue view $issue --json labels)" + [ "x$label" = "x" ] && break + + # Get the goal type from the labels + goal="$(echo "$label" | grep '"goal:' | sed 's|.*"goal:\([^"]*\)".*|\1|')" + [ "x$goal" = "x" ] && break + + result+=" (#$issue:$goal)" + done + echo "$result" +done + |
