commit 375bf66c2c63cc394949fcda04bfac0216b23626 Author: alban Date: Tue May 12 10:20:41 2020 +0200 [init] diff --git a/README.md b/README.md new file mode 100644 index 0000000..f1b90e2 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# changelog : manage changes on a server + +Based on the Masters Book of Serious Sysadmin's Best Practices Chapter, this script aims at unifying and simplifying the management of changelog files on a server. + +## Crash course + +``` +wget https://this.repo.srs.ly/alban/changelog/bla/bla/raw/changelog +chmod +x changelog +sudo ./changelog +``` + +The script will ask for your name if no `CHANGELOG_USERNAME` environment variable is found. + +Then it will ask for a first change informations: + +* The nature of the change: which software / domain did you change? Why? +* Some comments: How did you do it? What was happening? Is it fixed? + +**Limitations** + +* Please note that to enter multiline comments, you have for now to escape newline characters using the `\\\\n` sequence. Ugly. + +* By default, it will attempt to create and edit `/etc/changelog`. You better be running it as root, by default. + + +# Possible improvements + +* Enable a sudo requirement / ways to restart oneself as a root user +* Enable simple multiline comments +* Provide a way to attach files +* Provide a way (plugins?) to report each change to a central server + + + + diff --git a/changelog b/changelog new file mode 100755 index 0000000..b8a65c1 --- /dev/null +++ b/changelog @@ -0,0 +1,52 @@ +#!/bin/bash +#Manages an /etc/changelog + +CHANGELOG=/etc/changelog + +# functions + +msg(){ echo -e "$@"; } +panic(){ msg "${@} Exiting."; exit 1;} +template(){ +t=$(mktemp) +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" +} + +change(){ + local TMP=$(mktemp) + 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 "\nType the comments, how you did that.\nExample: > echo 'manual' | sudo tee -a /etc/init/mysql.override\n" + read -e -p "> " EXP + echo -e "* $SUB\n$EXP\n" >> $TMP + read -e -i "n" -p "More? [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 + template "$(cat $TMP)" + rm $TMP +} + +# Exec +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 +