external-dns/scripts/releaser.sh
2025-06-26 04:58:29 -07:00

78 lines
1.7 KiB
Bash
Executable File

#!/bin/bash
set -e
function generate_changelog {
MERGED_PRS="$1"
echo
echo "## :warning: Breaking Changes"
echo
cat "${MERGED_PRS}" | grep "\!"
echo
echo "## :rocket: Features"
echo
cat "${MERGED_PRS}" | grep feat[:\(]
echo
echo "## :bug: Bug fixes"
echo
cat "${MERGED_PRS}" | grep fix[:\(]
echo
echo "## :memo: Documentation"
echo
cat "${MERGED_PRS}" | grep docs[:\(]
echo
echo "## :package: Others"
echo
cat "${MERGED_PRS}" | grep -v "\!" | grep -v feat[:\(] | grep -v fix[:\(] | grep -v docs[:\(]
}
function create_release {
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 "** DRY RUN **"
fi
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" -p -F -
fi
rm -f "${MERGED_PRS}"