Skip to content

Instantly share code, notes, and snippets.

@gburgett
Created January 5, 2022 16:00
Show Gist options
  • Save gburgett/69ba579411063694333c3ac67171d962 to your computer and use it in GitHub Desktop.
Save gburgett/69ba579411063694333c3ac67171d962 to your computer and use it in GitHub Desktop.
changelog_all.sh
#! /bin/bash
SCRIPT=$0
COLOR_NC='\033[0m' # No Color
COLOR_LGREEN='\033[1;32m'
COLOR_GRAY='\033[1;30m'
COLOR_RED='\033[0;31m'
COLOR_CYAN='\033[0;36m'
logv() {
[[ ! -z "$VERBOSE" ]] && >&2 echo -e "${COLOR_GRAY}$D: $@${COLOR_NC}"
return 0
}
execv() {
logv "$@"
"$@"
}
usage() {
echo "$0 <from> <to>
Scan an entire directory of git repos, generating a changelog for each one.
" && \
grep " .)\ #" $0; exit 0;
}
while getopts ":hvms" arg; do
case $arg in
v) # Verbose mode - extra output
VERBOSE=true
FLAGS="$FLAGS -v"
;;
m) # Markdown - format output in markdown
MARKDOWN=true
FLAGS="$FLAGS -m"
;;
h | *) # Display help.
usage
exit 0
;;
esac
done
shift $(($OPTIND - 1))
set -e
mains=("master" "main")
changelog_d() {
git fetch origin 2>/dev/null
[ $? -ne 0 ] && logv "Cannot fetch origin" && return -1;
main=""
for m in "${mains[@]}"; do
if git rev-parse --quiet --verify "origin/$m" > /dev/null; then
main="$m"
fi
done
[[ -z "$main" ]] && logv "no main branch found" && return -1;
TO='origin/develop'
FROM=$(git merge-base origin/develop "origin/$main" 2>/dev/null)
if [[ -z "$FROM" ]]; then
logv "develop does not exist"
FROM=$(execv heroku releases -r production 2>/dev/null | grep Deploy | awk '{ print $3 }' | head -n1)
TO="origin/$main"
fi
FROM=$(git rev-parse --short "$FROM" 2> /dev/null)
[ $? -ne 0 ] && logv "cannot determine prod sha1" && return -1
CHANGELOG=$(changelog $FLAGS $FROM $TO)
[[ -z "$CHANGELOG" ]] && logv "no changelog" && return -1
if [[ -z "$MARKDOWN" ]]; then
echo -e "${COLOR_LGREEN}$D${COLOR_NC}\n${CHANGELOG}"
else
echo -e "# $D\n#${CHANGELOG}"
fi
}
for D in *; do
if [ -d "${D}/.git" ]; then
pushd ${D} > /dev/null
changelog_d $@ || true
popd > /dev/null
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment