#!/bin/bash #Manages an /etc/changelog CHANGELOG=/etc/changelog # functions msg(){ echo -e "$@"; } panic(){ msg "${@} Exiting."; exit 1;} ENTRY_FILE=$(mktemp) change(){ TMP="$1" while true ; do echo -e "\nType the nature of the change.\nExample: > mysql: do not start on boot\n" read -e -p "> " SUB echo -e "* $SUB" >> $TMP echo -e "\nTime for some details." for (( ; ; )); do echo "Select number or x to quit" for (( i=0; i<${#HOOKS_CONTENT_MENU[@]}; i++)) ; do echo "$i) ${HOOKS_CONTENT_MENU[$i]}" done echo "x) No more details." read -e -n 1 -p "Your choice? :" REPLY if [[ "x" == ${REPLY,,} ]]; then break elif [[ -z "${HOOKS_CONTENT[$REPLY]}" ]] ; then echo "Unknown Key." else ${HOOKS_CONTENT[$REPLY]} $TMP fi done read -e -i "n" -p "Another section? [yN]:" END [[ "${END^^}" == "N" ]] && break done echo -e "\nHere is the content you are about to add.\n\n$(cat $TMP)\n" read -e -p "OK? [Yn]: " -i y RETURN [[ "N" == ${RETURN^^} ]] && return echo $TMP } hookContentComment(){ [[ -z "$1" ]] && echo "Enter a simple comment. Ex: systemctl disable nginx" && return TMP="$1" read -e -p "Your comment: " CONTENT echo "$CONTENT" >> $TMP } hookOutputFile(){ [[ -z "$1" ]] && echo "Writing a local changelog entry to $CHANGELOG" && return local t=$(mktemp) TMP="$1" cat << HEREDOC >$t $(date "+%Y-%m-%d %H:%M") $CHANGELOG_USERNAME $( echo -e "$@"|sed 's/^/ /' ) HEREDOC [[ -f $CHANGELOG ]] && cat /etc/changelog >> $t cat "$t" > $CHANGELOG rm -f "$t" } # Exec # Build the hook content menu HOOKS_CONTENT+=("hookContentComment") declare -a HOOKS_CONTENT_MENU [[ -n "hooks-content/*" ]] && source hooks-content/* for (( i = 0; i < ${#HOOKS_CONTENT[@]} ; i++ )); do TXT=$( ${HOOKS_CONTENT[$i]} ) HOOKS_CONTENT_MENU+=("$( ${HOOKS_CONTENT[$i]} )") done # Build the hook content menu HOOKS_OUTPUT+=("hookOutputFile") declare -a HOOKS_OUTPUT_MENU [[ -n "hooks-output/*" ]] && source hooks-output/* for (( i = 0; i < ${#HOOKS_OUTPUT[@]} ; i++ )); do TXT=$( ${HOOKS_OUTPUT[$i]} ) HOOKS_OUTPUT_MENU+=("$( ${HOOKS_OUTPUT[$i]} )") done echo -e "\nWelcome to Serious Changelogs Inc. Do you have something for me?\n" # set environment variables [[ -z "$CHANGELOG_USERNAME" ]] && read -e -p "Your name? " NAME&& read -e -p "Your email? " EMAIL && CHANGELOG_USERNAME="${NAME^} <$EMAIL>" && echo "export CHANGELOG_USERNAME=\"$CHANGELOG_USERNAME\"" [[ " <>" == "$CHANGELOG_USERNAME" ]] && panic "srs.ly?" # check changelog exists [[ ! -f $CHANGELOG ]] && template "* Changelog: Added $CHANGELOG file\nIt was not serious. Fixed!\n\n" # parse command change "$ENTRY_FILE" for (( i=0; i<${#HOOKS_OUTPUT_MENU[@]}; i++)) ; do echo "${HOOKS_OUTPUT_MENU[$i]}" ${HOOKS_OUTPUT[$i]} $ENTRY_FILE done rm "$ENTRY_FILE"