Merge pull request #5394 from mloiseleur/feat/release-emojis-title

chore(ci): improve release script
This commit is contained in:
Kubernetes Prow Robot 2025-05-14 03:07:24 -07:00 committed by GitHub
commit 7e9f14848e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,43 +1,72 @@
#!/bin/bash
set -e
current_tag="${GITHUB_REF#refs/tags/}"
start_ref="HEAD"
function generate_changelog {
# Find the previous release on the same branch, skipping prereleases if the
# current tag is a full release
previous_tag=""
while [[ -z $previous_tag || ( $previous_tag == *-* && $current_tag != *-* ) ]]; do
previous_tag="$(git describe --tags "$start_ref"^ --abbrev=0 --match "v*")"
start_ref="$previous_tag"
done
MERGED_PRS="$1"
git log "$previous_tag".. --reverse --merges --oneline --grep='Merge pull request #' | \
while read -r sha title; do
pr_num="$(grep -o '#[[:digit:]]\+' <<<"$title")"
pr_desc="$(git show -s --format=%b "$sha" | sed -n '1,/^$/p' | tr $'\n' ' ')"
pr_author="$(gh pr view "$pr_num" | grep "author:" | awk '{ print $2 }' | tr $'\n' ' ')"
printf "* %s (%s) @%s\n\n" "$pr_desc" "$pr_num" "$pr_author"
done
echo
echo "## :rocket: Features"
echo
cat "${MERGED_PRS}" | grep feat
git log "$previous_tag".. --reverse --oneline --grep='(#' | \
while read -r sha title; do
pr_num="$(grep -o '#[[:digit:]]\+' <<<"$title")"
pr_desc="$(git show -s --format=%s "$sha")"
pr_author="$(gh pr view "$pr_num" | grep "author:" | awk '{ print $2 }' | tr $'\n' ' ')"
printf "* %s (%s) @%s\n\n" "$pr_desc" "$pr_num" "$pr_author"
done
echo
echo "## :bug: Bug fixes"
echo
cat "${MERGED_PRS}" | grep fix
echo
echo "## :memo: Documentation"
echo
cat "${MERGED_PRS}" | grep doc
echo
echo "## :package: Others"
echo
cat "${MERGED_PRS}" | grep -v feat | grep -v fix | grep -v doc
}
function create_release {
generate_changelog | sort | gh release create "$1" -t "$1" -F -
generate_changelog | sort # | gh release create "$1" -t "$1" -F -
}
function latest_release {
gh release list -L 10 --json name,isLatest --jq '.[] | select(.isLatest)|.name'
}
function latest_release_date {
gh release list -L 10 --json name,isLatest,publishedAt --jq '.[] | select(.isLatest)|.publishedAt'
}
function latest_release_ts {
gh release list -L 10 --json name,isLatest,publishedAt --jq '.[] | select(.isLatest)|.publishedAt | fromdateiso8601'
}
if [ $# -ne 1 ]; then
echo "$0: usage: releaser [release number]"
echo "example: ./releaser.sh v0.7.5"
exit 1
echo "** DRY RUN **"
fi
create_release "$1"
printf "Latest release: %s (%s)\n" $(latest_release) $(latest_release_date)
TIMESTAMP=$(latest_release_ts)
MERGED_PRS=$(mktemp)
gh pr list \
--state merged \
--json author,number,mergeCommit,mergedAt,url,title \
--limit 999 \
--jq ".[] |
select (.mergedAt | fromdateiso8601 > ${TIMESTAMP}) | \
\"- \(.title) by @\(.author.login) in #\(.number)\"
" | sort > "${MERGED_PRS}"
if [ $# -ne 1 ]; then
generate_changelog "${MERGED_PRS}"
echo "** DRY RUN **"
echo
echo "To create a release: ./releaser.sh v0.17.0"
else
generate_changelog "${MERGED_PRS}" | gh release create "$1" -t "$1" -F -
fi
rm -f "${MERGED_PRS}"