From df63a9754baa2399ee860282964720a2225aa56c Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Thu, 25 May 2023 13:49:27 +0200 Subject: [PATCH] update changelog-generator --- bin/changelog-generator | 155 ++++++++++++++++++++++++++-------------- 1 file changed, 103 insertions(+), 52 deletions(-) diff --git a/bin/changelog-generator b/bin/changelog-generator index 3a6d748..aac12de 100755 --- a/bin/changelog-generator +++ b/bin/changelog-generator @@ -1,13 +1,13 @@ #!/bin/sh usage() { - printf "Usage: %s [-h] -f /path/to/CHANGELOG.md\n" "$0" + printf "Usage: %s [-l DEBUG_LEVEL] [-h] -f /path/to/CHANGELOG.md\n" "$0" } help() { cat << EOH SYNOPSIS - $0 [-h] -f /path/to/CHANGELOG.md + $0 [-l DEBUG_LEVEL] [-h] -f /path/to/CHANGELOG.md DESCRIPTION @@ -18,40 +18,44 @@ help() { -h Show this help -f FILE - Path to changelog + Path to changelog + + -l debug|info|notice|warning|error + Debug level EOH } on_interrupt() { - print "Process aborted!\n" + print "Process aborted!\n" - exit 130 + exit 130 } main() { - while getopts "hf:" option; do - case "${option}" in - h) help; exit 0;; - f) CHANGELOG_FILE="$OPTARG";; - *) usage; exit 1;; - esac - done + while getopts "hf:" option; do + case "${option}" in + h) help; exit 0;; + f) CHANGELOG_FILE="$OPTARG";; + l) LOG_VERBOSE="$OPTARG";; + ?) log -l error "$(usage)"; exit 1;; + esac + done - if [ -z "$CHANGELOG_FILE" ]; then - printf "The file of the changelog is required.\n" - exit 1 - fi + if [ -z "$CHANGELOG_FILE" ]; then + log -l error "The file of the changelog is required." + exit 1 + fi - if [ ! -f "$CHANGELOG_FILE" ]; then - printf "No such file: %s\n" "$CHANGELOG_FILE" - exit 1 - fi + if [ ! -f "$CHANGELOG_FILE" ]; then + log -l error "No such file: $CHANGELOG_FILE" + exit 1 + fi - temp_directory="$(mktemp -d)" - version= - is_first=1 + temp_directory="$(mktemp -d)" + version= + is_first=1 - cat << EOF + cat << EOF --- hide: - navigation @@ -62,40 +66,87 @@ hide: EOF + while read -r line; do + if printf "%s" "$line" | grep -q -E '^## '; then + version="$(printf "%s" "$line" | sed 's/^## //')" - while read -r line; do - if printf "%s" "$line" | grep -q -E '^## '; then - version="$(printf "%s" "$line" | sed 's/^## //')" + if [ "$version" = "[Unreleased]" ]; then + version="" + fi + elif [ -n "$version" ]; then + printf "%s\n" "$line" >> "$temp_directory/$version" + fi + done < "$CHANGELOG_FILE" - if [ "$version" = "[Unreleased]" ]; then - version="" - fi - elif [ -n "$version" ]; then - printf "%s\n" "$line" >> "$temp_directory/$version" - fi - done < "$CHANGELOG_FILE" + while read -r line; do + if printf "%s" "$line" | grep -q -E '^## '; then + version="$(printf "%s" "$line" | sed 's/^## //')" - while read -r line; do - if printf "%s" "$line" | grep -q -E '^## '; then - version="$(printf "%s" "$line" | sed 's/^## //')" + if [ "$version" != "[Unreleased]" ]; then + log -l info "Version detected: $version" - if [ "$version" != "[Unreleased]" ]; then - if [ $is_first -eq 1 ]; then - printf "???+ success \"%s\"\n" "$version" - is_first=0 - else - printf "??? abstract \"%s\"\n" "$version" - fi + if [ $is_first -eq 1 ]; then + printf "???+ success \"%s\"\n" "$version" + is_first=0 + else + printf "??? abstract \"%s\"\n" "$version" + fi - sed \ - -e 's/### \(.*\)/\n **\1**\n/g' \ - -e 's/^/ /g' \ - "$temp_directory/$version" - fi - fi - done < "$CHANGELOG_FILE" + sed \ + -e 's/### \(.*\)/\n **\1**\n/g' \ + -e 's/^/ /g' \ + "$temp_directory/$version" + fi + fi + done < "$CHANGELOG_FILE" - exit 0 + exit 0 +} + +log() { + LOG_VERBOSE="${LOG_VERBOSE:-info}" + LEVEL=info + TIME= + + while getopts "tl:" option; do + case "${option}" in + l) LEVEL="$OPTARG"; shift $((OPTIND-1));; + t) TIME="$(printf "[%s] " "$(date +'%Y-%m-%dT%H:%M:%S.%s')")"; shift $((OPTIND-1));; + *) exit 1;; + esac + done + + if [ -t 2 ] && [ -z "${NO_COLOR-}" ]; then + case "${LEVEL}" in + debug) COLOR="$(tput setaf 3)";; + notice) COLOR="$(tput setaf 4)";; + warning) COLOR="$(tput setaf 5)";; + error) COLOR="$(tput setaf 1)";; + *) COLOR="$(tput sgr0)";; + esac + fi + + case "${LEVEL}" in + debug) LEVEL=100;; + notice) LEVEL=250;; + warning) LEVEL=300;; + error) LEVEL=400;; + *) LEVEL=200;; + esac + + case "${LOG_VERBOSE}" in + debug) LOG_VERBOSE_VALUE=100;; + notice) LOG_VERBOSE_VALUE=250;; + warning) LOG_VERBOSE_VALUE=300;; + error) LOG_VERBOSE_VALUE=400;; + *) LOG_VERBOSE_VALUE=200;; + esac + + if [ $LEVEL -ge $LOG_VERBOSE_VALUE ]; then + printf "%s\n" "$*" | while IFS='' read -r LINE; do + printf "%s%s%s\n" "${COLOR:-}" "${TIME:-}" "$LINE" >&2 + done + fi } trap on_interrupt INT