11#! /usr/bin/env bash
22set -e
33
4- # --- Config CLI ---
4+ # --- Global Config ---
55
6- # Default values (can be overridden by CLI)
6+ WBS_DIR=" /opt/wbs"
7+ LOG_PATH=" $WBS_DIR /setup.log"
8+
9+ # CLI options (can be overridden by env or args)
710VERBOSE=" ${VERBOSE:- false} "
811SKIP_DOCKER_INSTALL=" ${SKIP_DOCKER_INSTALL:- false} "
912CERT_EMAIL=" ${CERT_EMAIL:- wbs-setup@ wikimedia.de} "
@@ -23,6 +26,7 @@ for arg in "$@"; do
2326 esac
2427done
2528
29+ # Logging functions
2630log () {
2731 if $VERBOSE ; then
2832 echo " $@ "
@@ -35,31 +39,37 @@ log_cmd() {
3539 else
3640 bash -c " $@ " & > /dev/null
3741 fi
38-
39- return $? # Pass the exit code back to caller
42+ return $?
4043}
4144
42- # Constants
43- WBS_DIR=" /opt/wbs"
44- LOG_PATH=" $WBS_DIR /setup.log"
45+ # --- Run detached so closing terminal will not terminate setup process---
46+
47+ if [[ -z " $WBS_SETUP_DETACHED " ]]; then
48+ export WBS_SETUP_DETACHED=1
49+ mkdir -p " $WBS_DIR "
50+ touch " $LOG_PATH "
51+ nohup bash " $0 " " $@ " >> " $LOG_PATH " 2>&1 &
52+ exit 0
53+ fi
54+
55+ # --- Begin main execution (detached) ---
56+
57+ exec > >( tee -a " $LOG_PATH " ) 2>&1
58+
59+ log " Verbose mode enabled"
60+
61+ # --- Constants ---
62+
4563REPO_URL=" https://github.com/wmde/wikibase-release-pipeline.git"
4664DEPLOY_DIR=" $WBS_DIR /wikibase-release-pipeline/deploy"
4765SETUP_DIR=" $DEPLOY_DIR /setup"
4866ENV_FILE_PATH=" $DEPLOY_DIR /.env"
4967
5068PUBLIC_IP=$( curl --silent --show-error --fail https://api.ipify.org)
51- # Random suffix keeps Let's Encrypt from rate limiting
5269SETUP_SUBDOMAIN=wbs-setup-$( LC_ALL=C tr -dc ' a-z0-9' < /dev/urandom | head -c 6)
5370SETUP_HOST=$SETUP_SUBDOMAIN .$PUBLIC_IP .nip.io
5471SETUP_PORT=8888
5572
56- # Setup logging
57- mkdir -p " $WBS_DIR "
58- touch $LOG_PATH
59- exec > >( tee -a " $LOG_PATH " ) 2>&1
60-
61- log " Verbose mode enabled"
62-
6373# --- Functions ---
6474
6575start_message () {
@@ -134,7 +144,6 @@ generate_ssl_cert_for_setup_webserver() {
134144 CERT_PATH=" $SETUP_DIR /letsencrypt/live/$SETUP_HOST "
135145 cp " $CERT_PATH /fullchain.pem" " $SETUP_DIR /certs/cert.pem"
136146 cp " $CERT_PATH /privkey.pem" " $SETUP_DIR /certs/key.pem"
137-
138147 else
139148 echo " Let's Encrypt challenge failed, falling back to self-signed certificate."
140149
@@ -168,7 +177,7 @@ start_config_webserver() {
168177 -v $LOG_PATH :/app/setup.log \
169178 wikibase/deploy-setup-webserver"
170179 echo
171- echo " To complete setup navigate to:"
180+ echo " To complete setup, navigate to:"
172181 echo
173182 echo " https://$SETUP_HOST :$SETUP_PORT "
174183 echo
@@ -189,13 +198,11 @@ launch_wikibase() {
189198
190199final_message () {
191200 echo
192- echo " Setup is Complete!"
201+ echo " ✅ Setup is Complete!"
193202 echo
194203
195204 if [[ -f " $ENV_FILE_PATH " ]]; then
196- # Load key=value pairs from .env into current shell (safe since we control the format)
197205 while IFS= read -r line; do
198- # Ignore comments and blank lines
199206 [[ " $line " =~ ^# .*$ || -z "$line" ]] && continue
200207 eval " export $line "
201208 done < " $ENV_FILE_PATH "
0 commit comments