summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichie Zhang <12566991+StaticallyTypedRice@users.noreply.github.com>2020-05-11 10:16:08 -0700
committerGitHub <noreply@github.com>2020-05-11 13:16:08 -0400
commitd17316508cd76c6e75f099731f6e5275298ece73 (patch)
treef20ed8d6391f9e6ecdd1c3306f3cdd4d44243183
parentb83aae0b57f79f89c34d7dc9c3433fec64255e18 (diff)
Improve shell scripts (#705)
* Improve init-db.sh Allow custom database parameters. Abstract common functionality. * Improve install.sh Abstract common functionality. Ask to automagically reload the project when source files are changed.
-rwxr-xr-xinstall.sh73
-rwxr-xr-xserver/db-init.sh111
2 files changed, 138 insertions, 46 deletions
diff --git a/install.sh b/install.sh
index d84761a2..fb42b26d 100755
--- a/install.sh
+++ b/install.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
set -e
# Set the database variable to the default first.
@@ -10,25 +10,55 @@ export LEMMY_DATABASE_URL=postgres://lemmy:password@localhost:5432/lemmy
export JWT_SECRET=changeme
export HOSTNAME=rrr
+yes_no_prompt_invalid() {
+ echo "Invalid input. Please enter either \"y\" or \"n\"." 1>&2
+}
+
+ask_to_init_db() {
+ init_db_valid=0
+ init_db_final=0
+ while [ "$init_db_valid" == 0 ]
+ do
+ read -p "Initialize database (y/n)? " init_db
+ case "$init_db" in
+ [yY]* ) init_db_valid=1; init_db_final=1;;
+ [nN]* ) init_db_valid=1; init_db_final=0;;
+ * ) yes_no_prompt_invalid;;
+ esac
+ echo
+ done
+ if [ "$init_db_final" = 1 ]
+ then
+ source ./server/db-init.sh
+ read -n 1 -s -r -p "Press ANY KEY to continue execution of this script, press CTRL+C to quit..."
+ echo
+ fi
+}
+
+ask_to_auto_reload() {
+ auto_reload_valid=0
+ auto_reload_final=0
+ while [ "$auto_reload_valid" == 0 ]
+ do
+ echo "Automagically reload the project when source files are changed?"
+ echo "ONLY ENABLE THIS FOR DEVELOPMENT!"
+ read -p "(y/n) " auto_reload
+ case "$auto_reload" in
+ [yY]* ) auto_reload_valid=1; auto_reload_final=1;;
+ [nN]* ) auto_reload_valid=1; auto_reload_final=0;;
+ * ) yes_no_prompt_invalid;;
+ esac
+ echo
+ done
+ if [ "$auto_reload_final" = 1 ]
+ then
+ cd ui && yarn start
+ cd server && cargo watch -x run
+ fi
+}
+
# Optionally initialize the database
-init_db_valid=0
-init_db_final=0
-while [ "$init_db_valid" == 0 ]
-do
- read -p "Initialize database (y/n)? " init_db
- case "$init_db" in
- [yY]* ) init_db_valid=1; init_db_final=1;;
- [nN]* ) init_db_valid=1; init_db_final=0;;
- * ) echo "Invalid input. Please enter either \"y\" or \"n\"." 1>&2;;
- esac
- echo
-done
-if [ "$init_db_final" = 1 ]
-then
- source ./server/db-init.sh
- read -n 1 -s -r -p "Press ANY KEY to continue execution of this script, press CTRL+C to quit..."
- echo
-fi
+ask_to_init_db
# Build the web client
cd ui
@@ -39,6 +69,5 @@ yarn build
cd ../server
RUST_LOG=debug cargo run
-# For live coding, where both the front and back end, automagically reload on any save, do:
-# cd ui && yarn start
-# cd server && cargo watch -x run
+# For live coding, where both the front and back end, automagically reload on any save
+ask_to_auto_reload
diff --git a/server/db-init.sh b/server/db-init.sh
index 87f39ead..a2ad77b5 100755
--- a/server/db-init.sh
+++ b/server/db-init.sh
@@ -1,43 +1,106 @@
-#!/bin/bash
+#!/bin/sh
+# Default configurations
username=lemmy
dbname=lemmy
port=5432
-password=""
-password_confirm=""
-password_valid=0
+yes_no_prompt_invalid() {
+ echo "Invalid input. Please enter either \"y\" or \"n\"." 1>&2
+}
-while [ "$password_valid" == 0 ]
-do
- read -p "Enter database password: " -s password
- echo
+print_config() {
+ echo " database name: $dbname"
+ echo " username: $username"
+ echo " port: $port"
+}
- read -p "Verify database password: " -s password_confirm
- echo
+ask_for_db_config() {
+ echo "The default database configuration is:"
+ print_config
echo
- # Start the loop from the top if either check fails
- if [ -z "$password" ]
- then
- echo "Error: Password cannot be empty." 1>&2
+ default_config_final=0
+ default_config_valid=0
+ while [ "$default_config_valid" == 0 ]
+ do
+ read -p "Use this configuration (y/n)? " default_config
+ case "$default_config" in
+ [yY]* ) default_config_valid=1; default_config_final=1;;
+ [nN]* ) default_config_valid=1; default_config_final=0;;
+ * ) yes_no_prompt_invalid;;
+ esac
echo
- continue
- fi
- if [ "$password" != "$password_confirm" ]
+ done
+
+ if [ "$default_config_final" == 0 ]
then
- echo "Error: Passwords don't match." 1>&2
- echo
- continue
+ config_ok_final=0
+ while [ "$config_ok_final" == 0 ]
+ do
+ read -p "Database name: " dbname
+ read -p "Username: " username
+ read -p "Port: " port
+ #echo
+
+ #echo "The database configuration is:"
+ #print_config
+ #echo
+
+ config_ok_valid=0
+ while [ "$config_ok_valid" == 0 ]
+ do
+ read -p "Use this configuration (y/n)? " config_ok
+ case "$config_ok" in
+ [yY]* ) config_ok_valid=1; config_ok_final=1;;
+ [nN]* ) config_ok_valid=1; config_ok_final=0;;
+ * ) yes_no_prompt_invalid;;
+ esac
+ echo
+ done
+ done
fi
+}
+
+ask_for_password() {
+ password=""
+ password_confirm=""
+ password_valid=0
+ while [ "$password_valid" == 0 ]
+ do
+ read -p "Enter database password: " -s password
+ echo
+
+ read -p "Verify database password: " -s password_confirm
+ echo
+ echo
- # Set the password_valid variable to break out of the loop
- password_valid=1
-done
+ # Start the loop from the top if either check fails
+ if [ -z "$password" ]
+ then
+ echo "Error: Password cannot be empty." 1>&2
+ echo
+ continue
+ fi
+ if [ "$password" != "$password_confirm" ]
+ then
+ echo "Error: Passwords don't match." 1>&2
+ echo
+ continue
+ fi
+ # Set the password_valid variable to break out of the loop
+ password_valid=1
+ done
+}
+
+ask_for_db_config
+
+ask_for_password
psql -c "CREATE USER $username WITH PASSWORD '$password' SUPERUSER;" -U postgres
psql -c "CREATE DATABASE $dbname WITH OWNER $username;" -U postgres
export LEMMY_DATABASE_URL=postgres://$username:$password@localhost:$port/$dbname
-echo $LEMMY_DATABASE_URL
+echo "The database URL is $LEMMY_DATABASE_URL"
+