From 71225c3374c80a06103d27ecb3a6fc548988a086 Mon Sep 17 00:00:00 2001 From: c9s Date: Mon, 27 Dec 2021 23:43:50 +0800 Subject: [PATCH] add changelog util --- utils/changelog.sh | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 utils/changelog.sh diff --git a/utils/changelog.sh b/utils/changelog.sh new file mode 100644 index 000000000..e0969c16c --- /dev/null +++ b/utils/changelog.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# Generate a Markdown change log of pull requests from commits between two tags +# Author: Russell Heimlich +# URL: https://gist.github.com/kingkool68/09a201a35c83e43af08fcbacee5c315a + +# HOW TO USE +# Copy this script to a directory under Git version control +# Make the script executable i.e. chmod +x changelog.sh +# Run it! ./changelog.sh +# Check CHANGELOG.md to see your results + +# Repo URL to base links off of +REPOSITORY_URL=https://github.com/wp-cli/wp-cli + +# Get a list of all tags in reverse order +# Assumes the tags are in version format like v1.2.3 +GIT_TAGS=$(git tag -l --sort=-version:refname) + +# Make the tags an array +TAGS=($GIT_TAGS) +LATEST_TAG=${TAGS[0]} +PREVIOUS_TAG=${TAGS[1]} + +# If you want to specify your own two tags to compare, uncomment and enter them below +# LATEST_TAG=v0.23.1 +# PREVIOUS_TAG=v0.22.0 + +# Get a log of commits that occured between two tags +# We only get the commit hash so we don't have to deal with a bunch of ugly parsing +# See Pretty format placeholders at https://git-scm.com/docs/pretty-formats +COMMITS=$(git log $PREVIOUS_TAG..$LATEST_TAG --pretty=format:"%H") + +# Store our changelog in a variable to be saved to a file at the end +MARKDOWN="[Full Changelog]($REPOSITORY_URL/compare/$PREVIOUS_TAG...$LATEST_TAG)" +MARKDOWN+='\n' + +# Loop over each commit and look for merged pull requests +for COMMIT in $COMMITS; do + # Get the subject of the current commit + SUBJECT=$(git log -1 ${COMMIT} --pretty=format:"%s") + + # If the subject contains "Merge pull request #xxxxx" then it is deemed a pull request + PULL_REQUEST=$( grep -Eo "Merge pull request #[[:digit:]]+" <<< "$SUBJECT" ) + if [[ $PULL_REQUEST ]]; then + # Perform a substring operation so we're left with just the digits of the pull request + PULL_NUM=${PULL_REQUEST#"Merge pull request #"} + # AUTHOR_NAME=$(git log -1 ${COMMIT} --pretty=format:"%an") + # AUTHOR_EMAIL=$(git log -1 ${COMMIT} --pretty=format:"%ae") + + # Get the body of the commit + BODY=$(git log -1 ${COMMIT} --pretty=format:"%b") + MARKDOWN+='\n' + MARKDOWN+=" - [#$PULL_NUM]($REPOSITORY_URL/pull/$PULL_NUM): $BODY" + fi +done + +# Save our markdown to a file +echo -e $MARKDOWN