mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-29 23:58:06 +01:00
09eca3cc60
* Improve auto changelog script The auto changelog script was creating empty or invalid entries in a number of different cases, such as when the body of a commit spanned multiple lines. This has been fixed, and the following additional improvements have been made: - Error handling (it will now crash upon encountering an error) - Commits without a PR number in the subject are listed without the PR prefix - Invalid shellcheck warnings ignored - Only the first line of the commit body is shown - Carriage returns are stripped (some commits contain them) This script should be more reliable for helping to manually update the changelog. It's still not sufficiently robust to use as part of an automated process - I don't think that's feasible without maintaining stricter control over commit messages conventions and/or merge strategies.
61 lines
1.8 KiB
Bash
Executable File
61 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
set -u
|
|
set -o pipefail
|
|
|
|
readonly URL='https://github.com/MetaMask/metamask-extension'
|
|
|
|
git fetch --tags
|
|
|
|
most_recent_tag="$(git describe --tags "$(git rev-list --tags --max-count=1)")"
|
|
|
|
git rev-list "${most_recent_tag}"..HEAD | while read commit
|
|
do
|
|
subject="$(git show -s --format="%s" "$commit")"
|
|
|
|
# Squash & Merge: the commit subject is parsed as `<description> (#<PR ID>)`
|
|
if grep -E -q '\(#[[:digit:]]+\)' <<< "$subject"
|
|
then
|
|
pr="$(awk '{print $NF}' <<< "$subject" | tr -d '()')"
|
|
prefix="[$pr]($URL/pull/${pr###}): "
|
|
description="$(awk '{NF--; print $0}' <<< "$subject")"
|
|
|
|
# Merge: the PR ID is parsed from the git subject (which is of the form `Merge pull request
|
|
# #<PR ID> from <branch>`, and the description is assumed to be the first line of the body.
|
|
# If no body is found, the description is set to the commit subject
|
|
elif grep -E -q '#[[:digit:]]+\sfrom' <<< "$subject"
|
|
then
|
|
pr="$(awk '{print $4}' <<< "$subject")"
|
|
prefix="[$pr]($URL/pull/${pr###}): "
|
|
|
|
first_line_of_body="$(git show -s --format="%b" "$commit" | head -n 1 | tr -d '\r')"
|
|
if [[ -z "$first_line_of_body" ]]
|
|
then
|
|
description="$subject"
|
|
else
|
|
description="$first_line_of_body"
|
|
fi
|
|
|
|
# Normal commits: The commit subject is the description, and the PR ID is omitted.
|
|
else
|
|
pr=''
|
|
prefix=''
|
|
description="$subject"
|
|
fi
|
|
|
|
# add entry to CHANGELOG
|
|
if [[ "$OSTYPE" == "linux-gnu" ]]
|
|
then
|
|
# shellcheck disable=SC1004
|
|
sed -i'' '/## Current Develop Branch/a\
|
|
- '"$prefix$description"''$'\n' CHANGELOG.md
|
|
else
|
|
# shellcheck disable=SC1004
|
|
sed -i '' '/## Current Develop Branch/a\
|
|
- '"$prefix$description"''$'\n' CHANGELOG.md
|
|
fi
|
|
done
|
|
|
|
echo 'CHANGELOG updated'
|