diff --git a/.cz.yaml b/.cz.yaml index 10b463b..8479c57 100644 --- a/.cz.yaml +++ b/.cz.yaml @@ -9,5 +9,5 @@ commitizen: template: .cz.changelog.md.j2 update_changelog_on_bump: true use_shortcuts: true - version: 1.5.1 + version: 1.6.0 version_scheme: semver diff --git a/CHANGELOG.md b/CHANGELOG.md index 90f1e77..22ecf6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## v1.6.0 (2024-07-07) + +### Feature + +- **omz**: add log-cmd function to log the stderr and stdout of a command + +### Refactor + +- **omz**: order functions alphabetically + ## v1.5.1 (2024-06-28) ### Fix diff --git a/omz/functions.zsh b/omz/functions.zsh index ce79851..9ef0c69 100644 --- a/omz/functions.zsh +++ b/omz/functions.zsh @@ -1,17 +1,13 @@ # functions -joincsv () { - if [[ $1 == "--help" || $1 == "-h" || $1 == "-?" ]]; then - echo "Usage: joincsv [ file1 ] [ file2 ]" - echo -e "Purpose: add data from the second csv as a new column in the first csv" - echo "Example 1:" - echo -e " server> joincsv svrChkr-2015-08-27.csv OWNERS.csv\n" - else - join -t, -a1 --header --nocheck-order <(cat <(head -n1 "$1") <(sed 1d "$1" | sort) | sed 's/\r//') <(cat <(head -n1 "$2") <(sed 1d "$2"| sort) | sed 's/\r//') - fi -} - -getsudohash() { +####################################### +# ssh to the server, concatenate the sudo files, and calculate the resulting SHA1 hash +# Arguments: +# $1 - hostname of the server to ssh into +# Outputs: +# Writes the server hostname and resulting SHA1 hash to stdout +####################################### +function getsudohash() { if [[ $1 == "--help" || $1 == "-h" || $1 == "-?" ]]; then echo "Usage: getsudohash [ hostname ]" echo -e "Purpose: ssh to server and report hash" @@ -22,19 +18,57 @@ getsudohash() { fi } -update_forge_modules () { - for dir in $(ls -1); do - echo $dir - git -C "$dir" fetch -p origin - git -C "$dir" push --mirror - echo - echo + +####################################### +# check child directories for pull requests using the GitHub CLI +# Arguments: +# None +# Outputs: +# Writes any existing GitHub pull requests to stdout +####################################### +function git-pr-check() { + if [[ $1 == "--help" || $1 == "-h" || $1 == "-?" ]]; then + echo "Usage: git-pr-check [ --help ]" + echo -e "Purpose: check child directories for pull requests" + echo "Example 1:" + echo -e " server> git-pr-check\n" + return + fi + for dir in $(find . -mindepth 1 -maxdepth 1 -type d -printf '%P\n'); do + cd "$dir" + # has a .git directory + if [ -d .git ]; then + # has a GitHub remote + if git remote -v | grep -iq github; then + echo + echo "$(tput setaf 2)🟢 $dir$(tput sgr0)" + gh pr list + echo + # does not have a GitHub remote + else + echo "$(tput setaf 214)🟠 $dir, not using GitHub$(tput sgr0)" + cd .. + continue + fi + # does not have a .git directory + else + echo "$(tput setaf 7)➖ $dir, not a git repo$(tput sgr0)" + fi + cd .. done } -# function to semantically tag a git repository, optionally with floating tags -# usage: git-tag-semver [float] [push] [--help] -git-tag-semver() { + +####################################### +# add signed & annontated semantic version tags(either single or floating tags) to a git repository +# Arguments: +# $1 - major|minor|patch (required) +# $2 - 'float' to add floating tags, null otherwise +# $3 - 'push' the tags to the remote +# Outputs: +# Writes the latest tag, the new tag, and the floating tags (if requested) to stdout +####################################### +function git-tag-semver() { if [[ $1 == "--help" || $1 == "-h" || $1 == "-?" ]]; then echo "Usage: git-tag-semver [ major | minor | patch ] [float] [push] [--help]" echo -e "Purpose: semantically tag a git repository" @@ -96,36 +130,68 @@ git-tag-semver() { fi } -# function to check child directories for pull requests -# usage: git-check-prs [ --help ] -git-pr-check() { + +####################################### +# join two csv files on the first column. The first row of each file is assumed to be the header. +# Arguments: +# $1 - 'file1' the first csv file +# $2 - 'file2' the second csv file +# Outputs: +# Writes the joined csv to stdout +####################################### +function joincsv () { if [[ $1 == "--help" || $1 == "-h" || $1 == "-?" ]]; then - echo "Usage: git-pr-check [ --help ]" - echo -e "Purpose: check child directories for pull requests" + echo "Usage: joincsv [ file1 ] [ file2 ]" + echo -e "Purpose: add data from the second csv as a new column in the first csv" echo "Example 1:" - echo -e " server> git-pr-check\n" - return + echo -e " server> joincsv svrChkr-2015-08-27.csv OWNERS.csv\n" + else + join -t, -a1 --header --nocheck-order <(cat <(head -n1 "$1") <(sed 1d "$1" | sort) | sed 's/\r//') <(cat <(head -n1 "$2") <(sed 1d "$2"| sort) | sed 's/\r//') fi - for dir in $(find . -mindepth 1 -maxdepth 1 -type d -printf '%P\n'); do - cd "$dir" - # has a .git directory - if [ -d .git ]; then - # has a GitHub remote - if git remote -v | grep -iq github; then - echo - echo "$(tput setaf 2)🟢 $dir$(tput sgr0)" - gh pr list - echo - # does not have a GitHub remote - else - echo "$(tput setaf 214)🟠 $dir, not using GitHub$(tput sgr0)" - cd .. - continue - fi - # does not have a .git directory - else - echo "$(tput setaf 7)➖ $dir, not a git repo$(tput sgr0)" +} + + +####################################### +# log a shell command, its stdout, and stderr to a file +# Globals: +# CMD_LOG_FILE - the file to log the command and its output to +# Arguments: +# $* - the command to execute +# Outputs: +# Writes the command and its output to the log file and stdout +####################################### +function log-cmd () { + local header="####################################################\n" + + # check if log file has been named + if [ -z "${CMD_LOG_FILE}" ]; then + local CMD_LOG_FILE="/tmp/command.log" + echo "No log file specified, using default: ${CMD_LOG_FILE}\n" fi - cd .. + + { + printf ${header} + printf "\`%s\` executed at $(date '+%Y-%m-%d %H:%M:%S')\n" "$*" + printf ${header} + "$@" + printf "\n" + } 2>&1 | tee -a "${CMD_LOG_FILE}" +} + + +####################################### +# update all mirrored puppet forge modules in the current directory +# Arguments: +# None +# Outputs: +# Writes the git fetch and push status to stdout +####################################### +function update_forge_modules () { + for dir in $(ls -1); do + echo $dir + git -C "$dir" fetch -p origin + git -C "$dir" push --mirror + echo + echo done }