mirror of
https://github.com/argoproj/argo-cd.git
synced 2026-02-20 01:28:45 +01:00
* chore: verbose release notes Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix duplication Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * typo Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix duplication Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * updates from comments Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * exclude bot commits Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
136 lines
4.1 KiB
Bash
Executable File
136 lines
4.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
if [ "$1" == "" ] || [ "$2" == "" ] || [ "$3" == "" ]; then
|
|
cat <<-EOM
|
|
USAGE:
|
|
|
|
generate-release-notes.sh NEW_REF OLD_REF NEW_VERSION
|
|
|
|
EXAMPLES:
|
|
|
|
# For releasing a new minor version:
|
|
generate-release-notes.sh release-2.5 release-2.4 v2.5.0-rc1 > /tmp/release.md
|
|
|
|
# For a patch release:
|
|
generate-release-notes.sh release-2.4 v2.4.13 v2.4.14 > /tmp/release.md
|
|
EOM
|
|
exit 1
|
|
fi
|
|
|
|
function to_list_items() {
|
|
sed 's/^/- /'
|
|
}
|
|
|
|
function strip_last_word() {
|
|
sed 's/ [^ ]*$//'
|
|
}
|
|
|
|
function nonempty_line_count() {
|
|
sed '/^\s*$/d' | wc -l | tr -d ' \n'
|
|
}
|
|
|
|
function only_last_word() {
|
|
awk 'NF>1{print $NF}'
|
|
}
|
|
|
|
new_ref=$1
|
|
old_ref=$2
|
|
version=$3
|
|
|
|
cat <<-EOM
|
|
## Quick Start
|
|
|
|
### Non-HA:
|
|
|
|
\`\`\`shell
|
|
kubectl create namespace argocd
|
|
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/$version/manifests/install.yaml
|
|
\`\`\`
|
|
|
|
### HA:
|
|
|
|
\`\`\`shell
|
|
kubectl create namespace argocd
|
|
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/$version/manifests/ha/install.yaml
|
|
\`\`\`
|
|
|
|
## Release signatures
|
|
|
|
All Argo CD container images and CLI binaries are signed by cosign. See the [documentation](https://argo-cd.readthedocs.io/en/stable/operator-manual/signed-release-assets/) on how to verify the signatures.
|
|
\`\`\`shell
|
|
-----BEGIN PUBLIC KEY-----
|
|
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEesHEB7vX5Y2RxXypjMy1nI1z7iRG
|
|
JI9/gt/sYqzpsa65aaNP4npM43DDxoIy/MQBo9s/mxGxmA+8UXeDpVC9vw==
|
|
-----END PUBLIC KEY-----
|
|
\`\`\`
|
|
|
|
## Upgrading
|
|
|
|
If upgrading from a different minor version, be sure to read the [upgrading](https://argo-cd.readthedocs.io/en/stable/operator-manual/upgrading/overview/) documentation.
|
|
|
|
EOM
|
|
|
|
# Adapted from https://stackoverflow.com/a/67029088/684776
|
|
less_log=$(git log --pretty="format:%s %ae" --cherry-pick --left-only --no-merges "$new_ref...$old_ref")
|
|
more_log=$(git log --pretty="format:%s %ae" "$new_ref..$old_ref")
|
|
|
|
new_commits=$(diff --new-line-format="" --unchanged-line-format="" <(echo "$less_log") <(echo "$more_log") | grep -v "Merge pull request from GHSA")
|
|
new_commits_no_email=$(echo "$new_commits" | strip_last_word)
|
|
features=$(echo "$new_commits_no_email" | grep '^feat' | to_list_items)
|
|
fixes=$(echo "$new_commits_no_email" | grep '^fix' | to_list_items)
|
|
docs=$(echo "$new_commits_no_email" | grep '^docs' | to_list_items)
|
|
other=$(echo "$new_commits_no_email" | grep -v -e '^feat' -e '^fix' -e '^docs' -e '^\[Bot\]' | to_list_items)
|
|
|
|
contributors_num=$(echo "$new_commits" | only_last_word | sort -u | nonempty_line_count)
|
|
|
|
new_commits_num=$(echo "$new_commits" | nonempty_line_count)
|
|
features_num=$(echo "$features" | nonempty_line_count)
|
|
fixes_num=$(echo "$fixes" | nonempty_line_count)
|
|
docs_num=$(echo "$docs" | nonempty_line_count)
|
|
other_num=$(echo "$other" | nonempty_line_count)
|
|
|
|
previous_contributors=$(git log --pretty="format:%an %ae" "$old_ref" | sort -uf)
|
|
all_contributors=$(git log --pretty="format:%an %ae" "$new_ref" | sort -uf)
|
|
new_contributors=$(diff --new-line-format="" --unchanged-line-format="" <(echo "$all_contributors") <(echo "$previous_contributors"))
|
|
new_contributors_num=$(echo "$new_contributors" | only_last_word | nonempty_line_count) # Count contributors by email
|
|
new_contributors_names=$(echo "$new_contributors" | strip_last_word | to_list_items)
|
|
|
|
new_contributors_message=""
|
|
if [ "$new_contributors_num" -gt 0 ]; then
|
|
new_contributors_message=" ($new_contributors_num of them new)"
|
|
fi
|
|
|
|
echo "## Changes"
|
|
echo
|
|
echo "This release includes $new_commits_num contributions from $contributors_num contributors$new_contributors_message with $features_num features and $fixes_num bug fixes."
|
|
echo
|
|
if [ "$new_contributors_num" -lt 20 ] && [ "$new_contributors_num" -gt 0 ]; then
|
|
echo "A special thanks goes to the $new_contributors_num new contributors:"
|
|
echo "$new_contributors_names"
|
|
echo
|
|
fi
|
|
if [ "$features_num" -gt 0 ]; then
|
|
echo "### Features ($features_num)"
|
|
echo
|
|
echo "$features"
|
|
echo
|
|
fi
|
|
if [ "$fixes_num" -gt 0 ]; then
|
|
echo "### Bug fixes ($fixes_num)"
|
|
echo
|
|
echo "$fixes"
|
|
echo
|
|
fi
|
|
if [ "$docs_num" -gt 0 ]; then
|
|
echo "### Documentation ($docs_num)"
|
|
echo
|
|
echo "$docs"
|
|
echo
|
|
fi
|
|
if [ "$other_num" -gt 0 ]; then
|
|
echo "### Other ($other_num)"
|
|
echo
|
|
echo "$other"
|
|
echo
|
|
fi
|