-
Notifications
You must be signed in to change notification settings - Fork 113
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
update the github action for release notes to use the release note la…
…bels to automate release note generation
- Loading branch information
1 parent
22b8221
commit d7409dd
Showing
2 changed files
with
62 additions
and
4 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,54 @@ | ||
#! /bin/sh | ||
|
||
# this script assumes the GITHUB_TOKEN and PREVIOUS_TAG environment variables have been set; | ||
# it produces a 'Changes.md' file as its final output; | ||
# the file 'last-300-prs-with-release-note.txt' that is produces is intermediate data; it is not | ||
# pruned for now to assist development of the release notes process (we are still curating all this) | ||
|
||
sudo apt-get -y install jq | ||
sudo apt-get -y install wget | ||
curl -L https://github.com/github/hub/releases/download/v2.14.2/hub-linux-amd64-2.14.2.tgz | tar xzf - | ||
PWD=`pwd` | ||
export PATH=$PWD/hub-linux-amd64-2.14.2/bin:$PATH | ||
git fetch --all --tags --prune --force | ||
echo -e "# Insert Title\n" > Changes.md | ||
echo -e "## Features\n\n## Fixes\n\n## Backwards incompatible changes\n\n## Docs\n\n## Misc\n\n## Thanks" >> Changes.md - name: Draft Release | ||
# this effectively gets the commit associated with github.event.inputs.tags | ||
COMMON_ANCESTOR=$(git merge-base $PREVIOUS_TAG HEAD) | ||
# in theory the new tag has not been created yet; do we want another input that specifies the existing | ||
# commit desired for drafting the release? for now, we are using HEAD in the above git merge-base call | ||
# and PR cross referencing below | ||
|
||
# use of 'hub', which is an extension of the 'git' CLI, allows for pulling of PRs, though we can't search based on commits | ||
# associated with those PRs, so we grab a super big number, 300, which should guarantee grabbing all the PRs back to | ||
# github.events.inputs.tags; we use grep -v to filter out release-note-none and release-note-action-required | ||
hub pr list --state merged -L 300 -f "%sm;%au;%i;%t;%L%n" | egrep ", release-note|release-note," | grep -v release-note-none | grep -v release-note-action-required > last-300-prs-with-release-note.txt | ||
# now we cylce through last-300-prs-with-release-note.txt, filtering out stuff that is too old or other anomalies, | ||
# and update Changes.md with the release note. | ||
while IFS= read -r pr; do | ||
SHA=$(echo $pr | cut -d';' -f1) | ||
# skip the common ancestor, which in essences is the commit associated with the tag github.event.inputs.tags | ||
if [ "$SHA" == "$COMMON_ANCESTOR" ]; then | ||
continue | ||
fi | ||
|
||
# styllistic clarification, purposefully avoiding slicker / cleverer / more compact scripting conventions | ||
|
||
# this makes sure that this PR has merged | ||
git merge-base --is-ancestor $SHA HEAD | ||
rc=$? | ||
if [ ${rc} -eq 1 ]; then | ||
continue | ||
fi | ||
# otherwise, if the current commit from the last 300 PRs is not an ancestor of github.event.inputs.tags, we have gone too far, so skip | ||
git merge-base --is-ancestor $COMMON_ANCESTOR $SHA | ||
rc=$? | ||
if [ ${rc} -eq 1 ]; then | ||
continue | ||
fi | ||
# if we are at this point, we have a PR with a release note to add | ||
AUTHOR=$(echo $pr | cut -d';' -f2) | ||
PR_NUM=$(echo $pr | cut -d';' -f3) | ||
PR_RELEASE_NOTE=$(wget -q -O- https://api.github.com/repos/shipwright-io/build/issues/${PR_NUM:1} | jq .body -r | grep -oPz '(?s)(?<=```release-note..)(.+?)(?=```)' | grep -avP '\W*(Your release note here|action required: your release note here|NONE)\W*') | ||
echo -e "$PR_NUM by $AUTHOR: $PR_RELEASE_NOTE" >> Changes.md | ||
done < last-300-prs-with-release-note.txt |
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