395 lines
12 KiB
Bash
Executable File
395 lines
12 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
GREEN='\033[0;32m'
|
|
ORANGE='\033[0;33m'
|
|
NO_COLOR='\033[0m'
|
|
BRIGHT_CYAN='\033[0;96m'
|
|
BRIGHT_PURPLE='\033[0;95m'
|
|
|
|
__check_go() {
|
|
if ! command -v go &>/dev/null; then
|
|
echo -e "\nGo is not installed. Please install Go."
|
|
echo -e "\nhttps://golang.org/doc/install"
|
|
_cmd_missing=true
|
|
_cmd_missing_list="${_cmd_missing_list}go "
|
|
fi
|
|
}
|
|
|
|
__check_node() {
|
|
if ! command -v npm &>/dev/null; then
|
|
echo -e "\nNode is not installed. Please install Node."
|
|
echo -e "\nhttps://nodejs.org/en/download/"
|
|
_cmd_missing=true
|
|
_cmd_missing_list="${_cmd_missing_list}npm "
|
|
fi
|
|
}
|
|
|
|
__check_dlv() {
|
|
if ! command -v dlv &>/dev/null; then
|
|
echo -e "\nDLV is not installed. Please install DLV."
|
|
echo -e "\nbin/app install-tools"
|
|
_cmd_missing=true
|
|
_cmd_missing_list="${_cmd_missing_list}dlv "
|
|
fi
|
|
}
|
|
|
|
__check_sqlc() {
|
|
if ! command -v sqlc &>/dev/null; then
|
|
echo -e "\nSQLC is not installed. Please install SQLC."
|
|
echo -e "\nbin/app install-tools"
|
|
_cmd_missing=true
|
|
_cmd_missing_list="${_cmd_missing_list}sqlc "
|
|
fi
|
|
}
|
|
|
|
__check_goose() {
|
|
if ! command -v goose &>/dev/null; then
|
|
echo -e "\nGoose is not installed. Please install Goose."
|
|
echo -e "\nbin/app install-tools"
|
|
_cmd_missing=true
|
|
_cmd_missing_list="${_cmd_missing_list}goose "
|
|
fi
|
|
}
|
|
|
|
__check_air() {
|
|
if ! command -v air &>/dev/null; then
|
|
echo -e "\nAir is not installed. Please install Air."
|
|
echo -e "\nbin/app install-tools"
|
|
_cmd_missing=true
|
|
_cmd_missing_list="${_cmd_missing_list}air "
|
|
fi
|
|
}
|
|
|
|
__check_templ() {
|
|
if ! command -v templ &>/dev/null; then
|
|
echo -e "\nTempl is not installed. Please install Templ."
|
|
echo -e "\nbin/app install-tools"
|
|
_cmd_missing=true
|
|
_cmd_missing_list="${_cmd_missing_list}templ "
|
|
fi
|
|
}
|
|
|
|
__check_tailwind() {
|
|
if ! command -v tailwindcss &>/dev/null; then
|
|
echo -e "\nTailwind is not installed. Please install Tailwind."
|
|
echo -e "\nnpm i -g tailwindcss && npm i -D @tailwindcss/forms"
|
|
_cmd_missing=true
|
|
_cmd_missing_list="${_cmd_missing_list}tailwindcss "
|
|
fi
|
|
}
|
|
|
|
__check_missing() {
|
|
export _cmd_missing=false
|
|
export _cmd_missing_list=
|
|
__check_go
|
|
__check_node
|
|
__check_dlv
|
|
__check_sqlc
|
|
__check_goose
|
|
__check_air
|
|
__check_templ
|
|
__check_tailwind
|
|
if $_cmd_missing; then
|
|
echo -e "\nMissing commands: ${_cmd_missing_list}"
|
|
export _cmd_missing=false
|
|
__cmd_missing_list=
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
__install_deps() {
|
|
echo ================================================================================
|
|
echo = Install dependencies =========================================================
|
|
echo ================================================================================
|
|
go mod download && go mod verify
|
|
echo -e "\n"
|
|
}
|
|
INSTALL_DEPS_match=install-deps
|
|
|
|
__install_project_tools() {
|
|
export _cmd_missing=false
|
|
__check_go
|
|
if $_cmd_missing; then
|
|
exit 1
|
|
fi
|
|
go install github.com/a-h/templ/cmd/templ@latest
|
|
go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
|
|
go install github.com/pressly/goose/v3/cmd/goose@latest
|
|
go install github.com/air-verse/air@latest
|
|
go install github.com/go-delve/delve/cmd/dlv@latest
|
|
}
|
|
INSTALL_PROJECT_TOOLS_match=install-tools
|
|
|
|
__clean() {
|
|
echo ================================================================================
|
|
echo = Cleaning environment =========================================================
|
|
echo ================================================================================
|
|
echo -e "\n"
|
|
find . -name '*_templ.go' -delete
|
|
rm -rf ./ptpp ./debug ./public/assets/css/output.css ./dist/* ./models/*
|
|
echo -e "\n"
|
|
}
|
|
CLEAN_match=clean
|
|
|
|
__init_project() {
|
|
echo ================================================================================
|
|
echo = First install ================================================================
|
|
echo ================================================================================
|
|
mkdir -p data && mkdir -p log
|
|
if ! [ -f "data/database.db" ]; then
|
|
touch data/database.db
|
|
fi
|
|
|
|
_cmd_missing=false
|
|
__check_go
|
|
if $_cmd_missing; then
|
|
exit 1
|
|
fi
|
|
|
|
__install_project_tools
|
|
sudo -S npm install
|
|
echo -e "\n"
|
|
}
|
|
INIT_PROJECT_match=init-project
|
|
|
|
__first_install_macro() {
|
|
_and_run=${1:-}
|
|
if ! [ -z ${1+x} ]; then
|
|
shift
|
|
fi
|
|
|
|
__init_project
|
|
__install_deps
|
|
__check_missing
|
|
__clean
|
|
__generate_macro
|
|
__migrate --all
|
|
case "$_and_run" in
|
|
--and-run) __run "$@" ;;
|
|
*) ;;
|
|
esac
|
|
}
|
|
FIRST_INSTALL_MACRO_match=first-install
|
|
|
|
__build() {
|
|
_cmd_missing=false
|
|
__check_go
|
|
if $_cmd_missing; then
|
|
exit 1
|
|
fi
|
|
echo ================================================================================
|
|
echo = Building =====================================================================
|
|
echo ================================================================================
|
|
go build -v -o ptpp ./cmd
|
|
echo -e "\n"
|
|
}
|
|
BUILD_match=build
|
|
|
|
__run() {
|
|
_case=${1:-}
|
|
case "$1" in
|
|
--reload) _reload=true ;;
|
|
"") _reload=false ;;
|
|
*)
|
|
echo -e "Invalid flag $_case\n"
|
|
__help
|
|
;;
|
|
esac
|
|
|
|
__build
|
|
|
|
if $_reload; then
|
|
_cmd_missing=false
|
|
__check_air
|
|
if $_cmd_missing; then
|
|
exit 1
|
|
fi
|
|
|
|
air
|
|
echo -e "\n"
|
|
else
|
|
echo ================================================================================
|
|
echo = Running ======================================================================
|
|
echo ================================================================================
|
|
echo -e "\n"
|
|
./ptpp
|
|
fi
|
|
}
|
|
RUN_match=run
|
|
|
|
__build_debug() {
|
|
_cmd_missing=false
|
|
__check_go
|
|
__check_dlv
|
|
if $_cmd_missing; then
|
|
exit 1
|
|
fi
|
|
echo ================================================================================
|
|
echo = Building debug ==============================================================
|
|
echo ================================================================================
|
|
go build -gcflags "all=-N -l" -o debug ./cmd/main.go
|
|
echo -e "\n"
|
|
}
|
|
BUILD_DEBUG_match=build-debug
|
|
|
|
__run_debug() {
|
|
_cmd_missing=false
|
|
__check_dlv
|
|
if $_cmd_missing; then
|
|
exit 1
|
|
fi
|
|
|
|
__build_debug
|
|
echo ================================================================================
|
|
echo = Running debug ===============================================================
|
|
echo ================================================================================
|
|
dlv -l 127.0.0.1:2345 --headless --api-version=2 --accept-multiclient exec ./debug
|
|
echo -e "\n"
|
|
}
|
|
RUN_DEBUG_match=run-debug
|
|
|
|
__migrate() {
|
|
_cmd_missing=false
|
|
__check_goose
|
|
if $_cmd_missing; then
|
|
exit 1
|
|
fi
|
|
|
|
_env=${1:-dev}
|
|
if ! [ -z ${1+x} ]; then
|
|
shift
|
|
fi
|
|
_direction=${1:-up}
|
|
case "$_env" in
|
|
--all)
|
|
GOOSE_DRIVER=postgres GOOSE_MIGRATION_DIR="./migrations/postgres" goose $_direction
|
|
GOOSE_DRIVER=sqlite GOOSE_MIGRATION_DIR="./migrations/sqlite" goose $_direction
|
|
;;
|
|
dev)
|
|
GOOSE_DRIVER=sqlite GOOSE_MIGRATION_DIR="./migrations/sqlite" goose $_direction
|
|
;;
|
|
prod)
|
|
GOOSE_DRIVER=postgres GOOSE_MIGRATION_DIR="./migrations/postgres" goose $_direction
|
|
;;
|
|
esac
|
|
|
|
echo ================================================================================
|
|
echo = Migrating ====================================================================
|
|
echo ================================================================================
|
|
|
|
echo -e "\n"
|
|
}
|
|
MIGRATE_match=migrate
|
|
|
|
__sqlc() {
|
|
_cmd_missing=false
|
|
__check_sqlc
|
|
if $_cmd_missing; then
|
|
exit 1
|
|
fi
|
|
echo ================================================================================
|
|
echo = Generating SQLC ==============================================================
|
|
echo ================================================================================
|
|
sqlc generate
|
|
echo -e "\n"
|
|
}
|
|
|
|
__templ() {
|
|
echo ================================================================================
|
|
echo = Generating templates =========================================================
|
|
echo ================================================================================
|
|
templ generate
|
|
echo -e "\n"
|
|
}
|
|
TEMPL_match=templ
|
|
|
|
__tailwind() {
|
|
_cmd_missing=false
|
|
__check_tailwind
|
|
if $_cmd_missing; then
|
|
exit 1
|
|
fi
|
|
echo ================================================================================
|
|
echo = Generating Tailwind ==========================================================
|
|
echo ================================================================================
|
|
tailwindcss build -i ./public/assets/css/index.css -o ./public/assets/css/output.css
|
|
echo -e "\n"
|
|
}
|
|
TAILWIND_match=tailwind
|
|
|
|
__generate_macro() {
|
|
_base=${1:---all}
|
|
case "$_base" in
|
|
--all)
|
|
__templ
|
|
__sqlc
|
|
__tailwind
|
|
;;
|
|
--templ) __templ ;;
|
|
--sqlc) __sqlc ;;
|
|
--tailwind) __tailwind ;;
|
|
*)
|
|
echo -e "Invalid flag $_base\n"
|
|
__help
|
|
;;
|
|
esac
|
|
}
|
|
GENERATE_MACRO_match=generate
|
|
|
|
__help() {
|
|
echo -e "Usage: $0 <command>"
|
|
echo -e "Commands:"
|
|
echo -e " ${GREEN}${FIRST_INSTALL_MACRO_match}${NO_COLOR}: ${ORANGE}First install macro${NO_COLOR}"
|
|
echo -e " ${BRIGHT_PURPLE}? ${GREEN}--and-run${NO_COLOR}: ${ORANGE}Run project after first install${NO_COLOR}"
|
|
echo -e " ${BRIGHT_PURPLE}? ${GREEN}--reload${NO_COLOR}: ${ORANGE}Run project with reload${NO_COLOR}"
|
|
echo -e " ${GREEN}${CLEAN_match}${NO_COLOR}: ${ORANGE}Clean environment${NO_COLOR}"
|
|
echo -e " ${GREEN}${INSTALL_DEPS_match}${NO_COLOR}: ${ORANGE}Install dependencies${NO_COLOR}"
|
|
echo -e " ${GREEN}${INSTALL_PROJECT_TOOLS_match}${NO_COLOR}: ${ORANGE}Install project tools${NO_COLOR}"
|
|
echo -e " ${GREEN}${BUILD_match}${NO_COLOR}: ${ORANGE}Build project${NO_COLOR}"
|
|
echo -e " ${GREEN}${RUN_match}${NO_COLOR}: ${ORANGE}Run project${NO_COLOR}"
|
|
echo -e " ${BRIGHT_PURPLE}? ${GREEN}--reload${NO_COLOR}: ${ORANGE}Run project with reload${NO_COLOR}"
|
|
echo -e " ${GREEN}${GENERATE_MACRO_match}${NO_COLOR}: ${ORANGE}Run code generation${NO_COLOR}"
|
|
echo -e " ${BRIGHT_PURPLE}* ${GREEN}--all${NO_COLOR}: ${ORANGE}Generate all${NO_COLOR}"
|
|
echo -e " ${GREEN}--tailwind${NO_COLOR}: ${ORANGE}Generate Tailwind CSS${NO_COLOR}"
|
|
echo -e " ${GREEN}--templ${NO_COLOR}: ${ORANGE}Generate templates${NO_COLOR}"
|
|
echo -e " ${GREEN}--sqlc${NO_COLOR}: ${ORANGE}Generate ORM${NO_COLOR}"
|
|
echo -e " ${GREEN}${MIGRATE_match}${NO_COLOR}: ${ORANGE}Migrate database${NO_COLOR}"
|
|
echo -e " ${GREEN}--all${NO_COLOR}: ${ORANGE}Migrate all databases${NO_COLOR}"
|
|
echo -e " ${BRIGHT_PURPLE}* ${GREEN}dev${NO_COLOR}: ${ORANGE}Migrate development database${NO_COLOR}"
|
|
echo -e " ${GREEN}prod${NO_COLOR}: ${ORANGE}Migrate production database${NO_COLOR}"
|
|
echo -e " ${BRIGHT_PURPLE}?* ${GREEN}up${NO_COLOR}: ${ORANGE}Migrate up${NO_COLOR}"
|
|
echo -e " ${BRIGHT_PURPLE}? ${GREEN}down${NO_COLOR}: ${ORANGE}Migrate down${NO_COLOR}"
|
|
echo -e " ${GREEN}${BUILD_DEBUG_match}${NO_COLOR}: ${ORANGE}Build debug${NO_COLOR}"
|
|
echo -e " ${GREEN}${RUN_DEBUG_match}${NO_COLOR}: ${ORANGE}Run debug${NO_COLOR}"
|
|
echo -e "\n${BRIGHT_PURPLE}* Default\n? Optional${NO_COLOR}"
|
|
}
|
|
|
|
__main() {
|
|
_cmd=${1:-help}
|
|
if ! [ -z ${1+x} ]; then
|
|
shift
|
|
fi
|
|
|
|
case "$_cmd" in
|
|
help) __help ;;
|
|
"$CLEAN_match") __clean ;;
|
|
"$INSTALL_DEPS_match") __install_deps ;;
|
|
"$BUILD_match") __build ;;
|
|
"$RUN_match") __run "$@" ;;
|
|
"$MIGRATE_match") __migrate "$@" ;;
|
|
"$BUILD_DEBUG_match") __build_debug ;;
|
|
"$RUN_DEBUG_match") __run_debug ;;
|
|
"$FIRST_INSTALL_MACRO_match") __first_install_macro "$@" ;;
|
|
"$GENERATE_MACRO_match") __generate_macro "$@" ;;
|
|
"$INSTALL_PROJECT_TOOLS_match") __install_project_tools ;;
|
|
*)
|
|
echo -e "Invalid command: $_cmd\n"
|
|
__help
|
|
;;
|
|
esac
|
|
|
|
__check_missing
|
|
}
|
|
|
|
__main "$@"
|