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