81 lines
2.0 KiB
Bash
Executable File
81 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Generate a Markdown-formatted changelog from merge commits.
|
|
#
|
|
|
|
set -o errexit
|
|
|
|
#
|
|
# Regex to match the standard pull request commit message. Creates capture
|
|
# groups for pull request number, GitHub username, and commit message body.
|
|
#
|
|
MERGE_RE=Merge\ pull\ request\ #\([0-9]+\)\ from\ \([^/]+\)\/[^\ ]+\ \(.*\)
|
|
|
|
#
|
|
# Regex to match the squash commit message. Creates capture groups for git
|
|
# author, commit subject and pull request number.
|
|
#
|
|
SQUASH_RE='([^\|]+)\|([^\(]+) \(#([0-9]+)\)'
|
|
|
|
GITHUB_URL=https://github.com
|
|
PULLS_URL=${GITHUB_URL}/openlayers/openlayers/pull
|
|
|
|
display_usage() {
|
|
cat <<-EOF
|
|
|
|
Usage: ${1} <revision range>
|
|
|
|
Creates a Markdown-formatted changelog given a revision range.
|
|
|
|
E.g.
|
|
${1} v3.0.0.. > changelog/v3.1.0.md
|
|
|
|
See git-log(1) for details on the revision range syntax.
|
|
|
|
EOF
|
|
}
|
|
|
|
#
|
|
# Scan the git log for merge commit messages and output Markdown. This only
|
|
# follows the first parent of merge commits to avoid merges within a topic
|
|
# branch (instead only showing merges to main).
|
|
#
|
|
main() {
|
|
git log --first-parent --format='%aN|%s %b' ${1} |
|
|
{
|
|
while read l; do
|
|
output="`[[ ${l} =~ "openlayers/dependabot" ]] && echo dependabot || echo main`_output"
|
|
if [[ ${l} =~ ${MERGE_RE} ]] ; then
|
|
number="${BASH_REMATCH[1]}"
|
|
author="${BASH_REMATCH[2]}"
|
|
summary="${BASH_REMATCH[3]}"
|
|
declare $output+=" * ${summary} (by @${author} in ${PULLS_URL}/${number})\n"
|
|
elif [[ ${l} =~ ${SQUASH_RE} ]] ; then
|
|
number="${BASH_REMATCH[3]}"
|
|
author="${BASH_REMATCH[1]}"
|
|
summary="${BASH_REMATCH[2]}"
|
|
declare $output+=" * ${summary} (by @${author} in ${PULLS_URL}/${number})\n"
|
|
fi
|
|
done
|
|
|
|
echo -e "$main_output"
|
|
|
|
if [ -n "$dependabot_output" ]; then
|
|
echo
|
|
echo "<details>"
|
|
echo " <summary>Dependency Updates</summary>"
|
|
echo
|
|
echo -e "$dependabot_output"
|
|
echo
|
|
echo "</details>"
|
|
fi
|
|
}
|
|
}
|
|
|
|
if test ${#} -ne 1; then
|
|
display_usage ${0}
|
|
exit 1
|
|
else
|
|
main ${1}
|
|
fi
|