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