#!/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 < 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"