mirror of https://github.com/ghostfolio/ghostfolio
committed by
GitHub
1 changed files with 169 additions and 0 deletions
@ -0,0 +1,169 @@ |
|||
#!/bin/sh |
|||
|
|||
script_location=$(dirname -- "$(readlink "$0")") |
|||
script_name="ghost-dev" |
|||
tmp_folder_location="/tmp/ghostfolio-dev" |
|||
|
|||
|
|||
usage() { |
|||
cat <<EOF |
|||
Program: $script_name |
|||
|
|||
Minimal helper tool to help initialize, build and start the ghostfolio |
|||
development environment. The tool is POSIX compliant and is usable on Linux, |
|||
MacOS and Windows (if using WSL) as long as all project dependencies are met. |
|||
|
|||
By soft linking this script (i.e., using ln -s) to your path, you are able |
|||
to execute any function from any directory. |
|||
|
|||
USAGE: |
|||
$script_name <SUBCOMMAND> |
|||
|
|||
SUBCOMMANDS: |
|||
init Installs project dependencies, builds from source starts |
|||
redis and psql and sets up the database. |
|||
migrate Syncs the database schema. |
|||
start Starts the server and client in the background. |
|||
stop Stops all ghostfolio services with a SIGTERM. |
|||
follow Follows the log files generated by the client and server. |
|||
status Checks if the client and server are active and since when. |
|||
storybook Runs the storybook server in the current session. |
|||
debug Runs the Visual Studio server debug in the current session. |
|||
help Print this help text. |
|||
|
|||
EOF |
|||
exit |
|||
} |
|||
|
|||
|
|||
ghostfolio_dev_init () { |
|||
cd "$script_location" || { echo "Could not cd into $script_location. Aborting."; exit; } |
|||
echo "(1/4) Executing: yarn install..." |
|||
yarn install |
|||
echo "(2/4) Executing: yarn build:dev..." |
|||
yarn build:dev |
|||
echo "(3/4) Executing: docker-compose --env-file $script_location/.env -f $script_location/docker/docker-compose.dev.yml up -d..." |
|||
docker-compose --env-file ./.env -f docker/docker-compose.dev.yml up -d |
|||
echo "(4/4) Executing: yarn database:setup..." |
|||
yarn database:setup |
|||
echo "Finished initiallizing the ghostfolio development environment!" |
|||
} |
|||
|
|||
migrate_dev_database () { |
|||
cd "$script_location" || { echo "Could not cd into $script_location. Aborting."; exit; } |
|||
echo "Executing: yarn databse:push..." |
|||
yarn database:push |
|||
echo "The Ghostfolio database is now in sync!" |
|||
} |
|||
|
|||
create_tmp_folder () { |
|||
mkdir -p "$tmp_folder_location" |
|||
touch "$tmp_folder_location/server.log" |
|||
touch "$tmp_folder_location/client.log" |
|||
} |
|||
|
|||
start_ghostfolio_dev_server () { |
|||
create_tmp_folder |
|||
cd "$script_location" || { echo "Could not cd into $script_location. Aborting."; exit; } |
|||
echo "Executing: yarn start:server" |
|||
nohup yarn start:server > /tmp/ghostfolio-dev/server.log 2>&1 & |
|||
|
|||
echo "Executing: yarn start:client" |
|||
nohup yarn start:client > /tmp/ghostfolio-dev/client.log 2>&1 & |
|||
|
|||
echo "Follow the logs by running the script with '$script_name follow'". |
|||
} |
|||
|
|||
start_storybook () { |
|||
cd "$script_location" || { echo "Could not cd into $script_location. Aborting."; exit; } |
|||
echo "Executing: yarn start:storybook" |
|||
yarn start:storybook |
|||
} |
|||
|
|||
get_process_pid () { |
|||
search_term="$1" |
|||
ps -e -o %p, -o %a | grep "$search_term" | grep -v "grep" | head -n 1 | cut -d',' -f1 | sed --posix "s/ //g" |
|||
} |
|||
|
|||
terminate_process () { |
|||
search_term_pid=$(get_process_pid "$1") |
|||
|
|||
if [ -z "$search_term_pid" ]; |
|||
then |
|||
echo "Process '$1' is already dead, skipping..." |
|||
else |
|||
echo "Sending SIGTERM to: $1 (PID: $search_term_pid)" |
|||
kill -15 "$search_term_pid" |
|||
fi |
|||
} |
|||
|
|||
get_process_status () { |
|||
search_term_pid=$(get_process_pid "$1") |
|||
|
|||
if [ -z "$search_term_pid" ]; |
|||
then |
|||
echo "Process '$1' is not active." |
|||
else |
|||
pid_start_time=$(ps -p "$search_term_pid" -o lstart=) |
|||
echo "Process '$1' (PID: $search_term_pid) has been active since $pid_start_time." |
|||
fi |
|||
} |
|||
|
|||
|
|||
finish_ghostfolio_dev_server () { |
|||
echo "Terminating Server:" |
|||
terminate_process "yarn start:server" |
|||
terminate_process "nx run api:serve" |
|||
echo "Terminating Client:" |
|||
terminate_process "yarn start:client" |
|||
terminate_process "nx run client:serve" |
|||
echo "Terminating Server Debug:" |
|||
terminate_process "yarn watch:server" |
|||
terminate_process "nx run api:build" |
|||
echo "Terminating Storybook:" |
|||
terminate_process "yarn start:storybook" |
|||
terminate_process "nx run ui:storybook" |
|||
|
|||
} |
|||
|
|||
open_dev_loggers () { |
|||
create_tmp_folder |
|||
tail -f "$tmp_folder_location/server.log" "$tmp_folder_location/client.log" |
|||
} |
|||
|
|||
dev_server_status_overview () { |
|||
echo "Server Status:" |
|||
get_process_status "yarn start:server" |
|||
get_process_status "nx run api:serve" |
|||
echo "\nClient Status:" |
|||
get_process_status "yarn start:client" |
|||
get_process_status "nx run client:serve" |
|||
echo "\nServer Debug Status:" |
|||
get_process_status "yarn watch:server" |
|||
get_process_status "nx run api:build" |
|||
echo "\nTerminating Storybook:" |
|||
get_process_status "yarn start:storybook" |
|||
get_process_status "nx run ui:storybook" |
|||
} |
|||
|
|||
start_vs_code_debug () { |
|||
cd "$script_location" || { echo "Could not cd into $script_location. Aborting."; exit; } |
|||
echo "Executing: yarn watch:server" |
|||
yarn watch:server |
|||
} |
|||
|
|||
case "$1" in |
|||
init) ghostfolio_dev_init ;; |
|||
migrate) migrate_dev_database ;; |
|||
start) start_ghostfolio_dev_server ;; |
|||
stop) finish_ghostfolio_dev_server ;; |
|||
status) dev_server_status_overview ;; |
|||
follow) open_dev_loggers ;; |
|||
storybook) start_storybook ;; |
|||
debug) start_vs_code_debug ;; |
|||
help) usage ;; |
|||
*) echo "Invalid command. Execute '$script_name help' for all possibilities." |
|||
esac |
|||
|
|||
|
|||
|
Loading…
Reference in new issue