Skip to content

Instantly share code, notes, and snippets.

@nicerobot
Created November 4, 2018 02:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nicerobot/2f4fb758fe77c171cdfedcb664aee2b8 to your computer and use it in GitHub Desktop.
Save nicerobot/2f4fb758fe77c171cdfedcb664aee2b8 to your computer and use it in GitHub Desktop.
Generic script header to handle both source or invocation
#!/usr/bin/env bash
sourced() { [ 'bash' = "${0:-i}" ] || [ "${BASH_SOURCE[0]}" != "${0:-i}" ]; }
sourced && {
SELF=$(
[ "${ZSH_VERSION}" ] && echo "${(%):-%N}" \
|| [ "${BASH_VERSION}" ] && echo "${BASH_SOURCE[0]}" \
|| echo "${0}"
)
export SCRIPT_HOME=$(cd $(dirname ${SELF})/..; pwd)
THIS=$(which makana)
THISD=$(cd -P $(dirname ${THIS:-/}) >/dev/null 2>&1; pwd)
[ "${THISD}" != "${SCRIPT_HOME}/bin" ] || {
echo >&2 'Already configured. To reconfigure, start a new shell and source this again.'
return 1
}
[ "${SCRIPT_MANPATH_SAVED:-}" ] && {
export MANPATH=${SCRIPT_MANPATH_SAVED}
unset SCRIPT_MANPATH
}
export SCRIPT_MANPATH_SAVED=${SCRIPT_MANPATH_SAVED:-${MANPATH}}
export SCRIPT_MANPATH=${SCRIPT_MANPATH:-${MANPATH}:${SCRIPT_HOME}/man}
export MANPATH=${SCRIPT_MANPATH}
[ "${SCRIPT_PATH_SAVED:-}" ] && {
export PATH=${SCRIPT_PATH_SAVED}
unset SCRIPT_PATH
}
export SCRIPT_PATH_SAVED=${SCRIPT_PATH_SAVED:-${PATH}}
export SCRIPT_PATH=${SCRIPT_PATH:-${PATH}:${SCRIPT_HOME}/bin}
export PATH=${SCRIPT_PATH}
alias mkn=makana
echo "makana configured: ${SCRIPT_HOME}"
return 0
}
STARTD=${PWD}
SELFD=$(cd $(dirname ${0}) >/dev/null 2>&1; pwd)
SELF=$(basename ${0})
SELFN=$(basename ${SELFD})
SELFU=${SELF%.*}
SELFZ=${SELFD}/${SELF}
NOW=$(date +%Y%m%dt%H%M%S)
UNQ=${RANDOM}
ACTION=${1:-help}; shift
export SCRIPT_HOME=$(cd ${SELFD}/..; pwd)
export SCRIPT_CONFIGS=${SCRIPT_HOME}/etc
export SCRIPT_DEPLOYMENTS=${SCRIPT_HOME}/deployments
export SCRIPT_DOCS=${SCRIPT_HOME}/man
export SCRIPT_LOGS=${SCRIPT_HOME}/var/log
export SCRIPT_PIDS=${SCRIPT_HOME}/var/run
export SCRIPT_SCRIPTS=${SCRIPT_HOME}/scripts
export SCRIPT_SERVICES=${SCRIPT_HOME}/src
export SCRIPT_TEST=${SCRIPT_HOME}/test
export SCRIPT_TOOLS=${SCRIPT_HOME}/bin
export SCRIPT_BRANCH=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD)
export SCRIPT_BRANCH_CLEAN=${SCRIPT_BRANCH//\//_}
export SCRIPT_COMMIT_ID=$(git describe --tags --always --dirty)
export SCRIPT_COMMIT_HASH=$(git rev-parse --short HEAD)
export SCRIPT_COMMIT_TIME=$(git show -s --format=%ct)
export SCRIPT_VERSION_FULL=${SCRIPT_COMMIT_TIME}-${SCRIPT_BRANCH_CLEAN}-${SCRIPT_COMMIT_ID}
export SCRIPT_VERSION_SHORT=${SCRIPT_COMMIT_TIME}-${SCRIPT_BRANCH_CLEAN}-${SCRIPT_COMMIT_HASH}
export SCRIPT_VERSION=${SCRIPT_COMMIT_TIME}-${SCRIPT_COMMIT_HASH}
export MANPATH=${SCRIPT_MANPATH:-${MANPATH}:${SCRIPT_HOME}/man}
[ -f ${SELFD}/script-commands ] && source ${SELFD}/script-commands
declare -f script_${ACTION} > /dev/null || {
echo >&2 "unknown action: ${ACTION}"
echo >&2 "usage: ${SELFU} ACTION OPTIONS"
echo >&2 "see: ${SELFU} help"
exit ${LINENO}
}
# Logging
SCRIPT_LOG_DIR=$(date +%Y/%m/%d/%H%M%S)
SCRIPT_LOG_FILE=${SCRIPT_LOG_DIR}/${UNQ}.log
SCRIPT_LOG=${SCRIPT_LOGS}/${SCRIPT_LOG_FILE}
SCRIPT_LOG_PATH=${SCRIPT_LOGS}/${SCRIPT_LOG_DIR}
mkdir -p ${SCRIPT_LOG_PATH} ${SCRIPT_LOGS}/commits
exec 3>&1 4>&2
exec > >(tee ${SCRIPT_LOG}) 2>&1
echo ${NOW} ${UNQ}
set -o errtrace
set -o nounset
rm -f ${SCRIPT_LOGS}/latest.log
ln -s ${SCRIPT_LOG_FILE} ${SCRIPT_LOGS}/latest.log
rm -f ${SCRIPT_LOGS}/commits/${SCRIPT_COMMIT_HASH}.log
ln -s ${SCRIPT_LOG_FILE} ${SCRIPT_LOGS}/commits/${SCRIPT_COMMIT_HASH}.log
#
echo commit ${SCRIPT_VERSION_FULL}
case ${ACTION} in
init) ACTION=install ;;
esac
script_${ACTION} "${@:-}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment