mirror of
https://github.com/m-housh/dotfiles.git
synced 2026-02-13 22:02:34 +00:00
163 lines
4.1 KiB
Bash
Executable File
163 lines
4.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
# NOTE: This script is required so that we can use 'gum spin' during creation
|
|
# of the project, otherwise the spinner doesn't actually show up when
|
|
# the utility functions live in the same file.
|
|
# https://github.com/charmbracelet/gum/issues/419
|
|
|
|
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
|
THIS_FILE=${BASH_SOURCE[0]}
|
|
LOG_LABEL=$(basename "$THIS_FILE")
|
|
THIS=${THIS:-$LOG_LABEL}
|
|
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
|
|
# Load environment / shared variables.
|
|
. "$SCRIPTS/utils/hpa/hpa.env"
|
|
|
|
declare airflow_flag no_git_flag no_push_flag date_opt
|
|
airflow_flag="0"
|
|
no_git_flag="0"
|
|
no_push_flag="0"
|
|
date_opt=$(date '+%Y.%m.%d')
|
|
|
|
usage() {
|
|
cat <<EOF
|
|
|
|
A utility script to generate a new home performance assessment project or
|
|
airflow assessment project.
|
|
|
|
All output from the 'hpa' command get suppressed so that this script can
|
|
be piped / used to automatically cd into the directory after creation to
|
|
quickly get to work on the new project.
|
|
|
|
This generates projects directories with the format of '2025.11.06.Customer',
|
|
will appropriately set the directory to use inside the docker container used
|
|
to generate the project, and then echo the local directory that was created.
|
|
|
|
It also initializes the project as a git repository.
|
|
|
|
USAGE:
|
|
$ $THIS <flags> <customer>
|
|
|
|
FLAGS:
|
|
-a | --airflow: Generate using the airflow assessment project template.
|
|
-d | --date: Override the date the project was started.
|
|
-g | --no-git: Do not initialize a git repository for the project.
|
|
-h | --help: Show this help page.
|
|
-p | --no-push: Do not push project to remote repository.
|
|
|
|
ENVIRONMENT:
|
|
CONSULTS_DIR: Sets the location of new projects
|
|
(default: ~/work/consults)
|
|
|
|
CONSULT_ORIGIN_BASE_URL: Sets the base url for the project git origin.
|
|
(default: ssh://git@git.housh.dev:2222/consults)
|
|
|
|
EOF
|
|
}
|
|
|
|
# Logging utility function, use in place of echo.
|
|
log() {
|
|
logging log --source "$THIS_FILE" "$@"
|
|
}
|
|
|
|
create() {
|
|
local customer container_dir script suffix
|
|
customer=${1:-""}
|
|
|
|
[[ -z $customer ]] &&
|
|
log --error "Must supply a customer name for the project" &&
|
|
exit 1
|
|
|
|
log "Generating project for: '$customer'"
|
|
|
|
# Setup approriate configuration and project suffix.
|
|
if [[ $airflow_flag == "1" ]]; then
|
|
suffix="AAP"
|
|
script="$SCRIPTS/aap"
|
|
else
|
|
suffix="HPA"
|
|
script="$SCRIPTS/hpa"
|
|
fi
|
|
|
|
[[ ! -f $SCRIPTS/hpa ]] &&
|
|
log --error "Unable to find the script: '$script'." &&
|
|
exit 1
|
|
|
|
log "Using script: '$script'"
|
|
|
|
container_dir=$(
|
|
"$script" create --quiet "/consults/$date_opt.$customer.$suffix"
|
|
)
|
|
echo "$HPA_CONSULTS_DIR/$(basename "$container_dir")"
|
|
}
|
|
|
|
initialize-git() {
|
|
local dir
|
|
read -r dir
|
|
|
|
dir=$(echo "$dir" | tr -d '\r' | head -1)
|
|
|
|
if [[ $no_git_flag == "0" ]]; then
|
|
|
|
[[ ! -d $dir ]] &&
|
|
log --error "Could not initialize git directory not found: '$dir'" &&
|
|
exit 1
|
|
|
|
log "Initializing git repository"
|
|
|
|
pushd "$dir" &>/dev/null || exit 1
|
|
(
|
|
git init
|
|
git lfs install
|
|
git lfs track '*.png'
|
|
git lfs track '*.pdf'
|
|
git add .
|
|
git commit --all --message="Initial commit"
|
|
git remote add origin "$HPA_CONSULT_ORIGIN_BASE_URL/$(basename "$dir")"
|
|
if [[ $no_push_flag == "0" ]]; then
|
|
git push --set-upstream origin main
|
|
fi
|
|
) &>/dev/null
|
|
popd &>/dev/null
|
|
else
|
|
log "Skipping git initialization"
|
|
fi
|
|
|
|
echo "$dir"
|
|
}
|
|
|
|
################################################################################
|
|
# MAIN
|
|
################################################################################
|
|
|
|
# Setup logging file and label.
|
|
source "$SCRIPTS/hypr/logging"
|
|
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
|
|
|
declare customer output
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
|
|
usage && exit 0
|
|
elif [[ $1 == "-a" ]] || [[ $1 == "--airflow" ]]; then
|
|
airflow_flag="1"
|
|
elif [[ $1 == "-d" ]] || [[ $1 == "--date" ]]; then
|
|
shift
|
|
date_opt="$1"
|
|
elif [[ $1 == "-g" ]] || [[ $1 == "--no-git" ]]; then
|
|
no_git_flag="1"
|
|
elif [[ $1 == "-p" ]] || [[ $1 == "--no-push" ]]; then
|
|
no_push_flag="1"
|
|
else
|
|
customer=$1
|
|
fi
|
|
shift
|
|
done
|
|
|
|
output=$(create "$customer" | initialize-git)
|
|
echo "$output"
|