@@ -55,10 +55,16 @@ install_node_and_modules() {
5555 IFS=' ,' read -ra MODULES <<< " $NODE_MODULE"
5656 for mod in " ${MODULES[@]} " ; do
5757 local MODULE_NAME MODULE_REQ_VERSION MODULE_INSTALLED_VERSION
58- if [[ " $mod " == * " @" * ]]; then
58+ if [[ " $mod " == @* /* @* ]]; then
59+ # Scoped package with version, e.g. @vue/cli-service@latest
5960 MODULE_NAME=" ${mod%@* } "
60- MODULE_REQ_VERSION=" ${mod#*@ } "
61+ MODULE_REQ_VERSION=" ${mod##*@ } "
62+ elif [[ " $mod " == * " @" * ]]; then
63+ # Unscoped package with version, e.g. yarn@latest
64+ MODULE_NAME=" ${mod%@* } "
65+ MODULE_REQ_VERSION=" ${mod##*@ } "
6166 else
67+ # No version specified
6268 MODULE_NAME=" $mod "
6369 MODULE_REQ_VERSION=" latest"
6470 fi
@@ -101,35 +107,56 @@ install_postgresql() {
101107 DISTRO=" $( awk -F' =' ' /^VERSION_CODENAME=/{ print $NF }' /etc/os-release) "
102108
103109 if command -v psql > /dev/null; then
104- CURRENT_PG_VERSION=" $( psql -V | grep -oP ' \s\K[0-9]+(?=\.) ' ) "
105- if [[ " $CURRENT_PG_VERSION " ! = " $PG_VERSION " ]]; then
106- msg_info " PostgreSQL Version $CURRENT_PG_VERSION found, replacing with $PG_VERSION "
107- NEED_PG_INSTALL=true
110+ CURRENT_PG_VERSION=" $( psql -V | awk ' {print $3} ' | cut -d. -f1 ) "
111+ if [[ " $CURRENT_PG_VERSION " = = " $PG_VERSION " ]]; then
112+ msg_ok " PostgreSQL $PG_VERSION is already installed "
113+ return
108114 fi
115+ msg_info " Detected PostgreSQL $CURRENT_PG_VERSION , preparing upgrade to $PG_VERSION "
116+ NEED_PG_INSTALL=true
109117 else
110- msg_info " PostgreSQL not found, installing version $PG_VERSION "
118+ msg_info " PostgreSQL not installed, proceeding with fresh install of $PG_VERSION "
111119 NEED_PG_INSTALL=true
112120 fi
113121
114122 if [[ " $NEED_PG_INSTALL " == true ]]; then
115- msg_info " Stopping PostgreSQL if running"
116- systemctl stop postgresql > /dev/null 2>&1 || true
123+ if [[ -n " $CURRENT_PG_VERSION " ]]; then
124+ msg_info " Dumping all PostgreSQL data from version $CURRENT_PG_VERSION "
125+ su - postgres -c " pg_dumpall > /var/lib/postgresql/backup_$( date +%F) _v${CURRENT_PG_VERSION} .sql"
126+ fi
117127
118- msg_info " Removing conflicting PostgreSQL packages"
119- $STD apt-get purge -y " postgresql*"
128+ msg_info " Stopping PostgreSQL service"
129+ systemctl stop postgresql || true
130+
131+ msg_info " Removing pgdg repo and old GPG key"
120132 rm -f /etc/apt/sources.list.d/pgdg.list /etc/apt/trusted.gpg.d/postgresql.gpg
121133
122- msg_info " Setting up PostgreSQL Repository "
134+ msg_info " Adding PostgreSQL PGDG repository "
123135 curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc |
124136 gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
125137
126138 echo " deb https://apt.postgresql.org/pub/repos/apt ${DISTRO} -pgdg main" \
127139 > /etc/apt/sources.list.d/pgdg.list
128140
129141 $STD apt-get update
130- $STD apt-get install -y " postgresql-${PG_VERSION} "
131142
132- msg_ok " Installed PostgreSQL ${PG_VERSION} "
143+ msg_info " Installing PostgreSQL $PG_VERSION "
144+ $STD apt-get install -y " postgresql-${PG_VERSION} " " postgresql-client-${PG_VERSION} "
145+
146+ if [[ -n " $CURRENT_PG_VERSION " ]]; then
147+ $STD msg_info " Removing old PostgreSQL $CURRENT_PG_VERSION packages"
148+ $STD apt-get purge -y " postgresql-${CURRENT_PG_VERSION} " " postgresql-client-${CURRENT_PG_VERSION} " || true
149+ fi
150+
151+ $STD msg_info " Starting PostgreSQL $PG_VERSION "
152+ systemctl enable --now postgresql
153+
154+ if [[ -n " $CURRENT_PG_VERSION " ]]; then
155+ $STD msg_info " Restoring dumped data"
156+ su - postgres -c " psql < /var/lib/postgresql/backup_$( date +%F) _v${CURRENT_PG_VERSION} .sql"
157+ fi
158+
159+ msg_ok " PostgreSQL $PG_VERSION installed"
133160 fi
134161}
135162
@@ -245,7 +272,11 @@ install_php() {
245272 COMBINED_MODULES=$( echo " $COMBINED_MODULES " | tr ' ,' ' \n' | awk ' !seen[$0]++' | paste -sd, -)
246273
247274 local CURRENT_PHP
248- CURRENT_PHP=$( php -v 2> /dev/null | awk ' /^PHP/{print $2}' | cut -d. -f1,2)
275+ if command -v php > /dev/null 2>&1 ; then
276+ CURRENT_PHP=$( php -v 2> /dev/null | awk ' /^PHP/{print $2}' | cut -d. -f1,2)
277+ else
278+ CURRENT_PHP=" "
279+ fi
249280
250281 if [[ " $CURRENT_PHP " != " $PHP_VERSION " ]]; then
251282 $STD echo " PHP $CURRENT_PHP detected, migrating to PHP $PHP_VERSION "
@@ -352,7 +383,7 @@ install_go() {
352383 msg_error " Could not determine latest Go version"
353384 return 1
354385 fi
355- msg_info " Detected latest Go version: $GO_VERSION "
386+ $STD msg_info " Detected latest Go version: $GO_VERSION "
356387 fi
357388
358389 local GO_BIN=" /usr/local/bin/go"
@@ -362,10 +393,10 @@ install_go() {
362393 local CURRENT_VERSION
363394 CURRENT_VERSION=$( " $GO_BIN " version | awk ' {print $3}' | sed ' s/go//' )
364395 if [[ " $CURRENT_VERSION " == " $GO_VERSION " ]]; then
365- msg_ok " Go $GO_VERSION already installed"
396+ $STD msg_ok " Go $GO_VERSION already installed"
366397 return 0
367398 else
368- msg_info " Go $CURRENT_VERSION found, upgrading to $GO_VERSION "
399+ $STD msg_info " Go $CURRENT_VERSION found, upgrading to $GO_VERSION "
369400 rm -rf " $GO_INSTALL_DIR "
370401 fi
371402 else
@@ -537,7 +568,7 @@ fetch_and_deploy_gh_release() {
537568 fi
538569
539570 tag=$( echo " $api_response " | jq -r ' .tag_name // .name // empty' )
540- [[ " $tag " =~ ^v[0-9] ]] && tag= " ${tag: 1 } "
571+ version= " ${tag# v } "
541572
542573 if [[ -z " $tag " ]]; then
543574 $STD msg_info " Empty tag received, retrying...\n"
@@ -555,12 +586,11 @@ fetch_and_deploy_gh_release() {
555586 fi
556587
557588 # Version comparison (if we already have this version, skip)
558- if [[ " $current_version " == " $tag " ]]; then
559- $STD msg_info " Already running the latest version ($tag ). Skipping update."
589+ if [[ " $current_version " == " $version " ]]; then
590+ $STD msg_info " Already running the latest version ($version ). Skipping update."
560591 return 0
561592 fi
562593
563- local version=" $tag "
564594 local base_url=" https://github.com/$repo /releases/download/v$tag "
565595 local tmpdir
566596 tmpdir=$( mktemp -d) || return 1
0 commit comments