Skip to content
Snippets Groups Projects

hide unnecessary menu items; reorder functions

Merged Hahn Axel (hahn) requested to merge shellfixes into master
1 file
+ 165
124
Compare changes
  • Side-by-side
  • Inline
+ 165
124
@@ -21,6 +21,7 @@
# 2024-07-22 v1.14 <axel.hahn@unibe.ch> show colored boxes with container status
# 2024-07-24 v1.15 <axel.hahn@unibe.ch> update menu output
# 2024-07-26 v1.16 <axel.hahn@unibe.ch> hide unnecessary menu items (WIP)
# 2024-07-29 v1.17 <axel.hahn@unibe.ch> hide unnecessary menu items; reorder functions
# ======================================================================
cd "$( dirname "$0" )" || exit 1
@@ -34,7 +35,7 @@ _self=$( basename "$0" )
# shellcheck source=/dev/null
. "${_self}.cfg" || exit 1
_version="1.16"
_version="1.17"
# git@git-repo.iml.unibe.ch:iml-open-source/docker-php-starterkit.git
selfgitrepo="docker-php-starterkit.git"
@@ -56,10 +57,51 @@ DC_REPO=1
DC_CONFIG_CHANGED=0
DC_WEB_URL=""
# ----------------------------------------------------------------------
# FUNCTIONS
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
# STATUS FUNCTIONS
# get container status and set global variable DC_REPO
# DC_REPO = 0 nothing to do - repo was changed to project
# DC_REPO = 1 if repo is in selfgitrepo (must be deleted)
function _getStatus_repo(){
DC_REPO=0
git config --get remote.origin.url 2>/dev/null | grep -q $selfgitrepo && DC_REPO=1
}
# check if any of the templates has a change that must be applied
function _getStatus_template(){
_generateFiles "dryrun"
}
# get container status and set global variables
# DC_WEB_UP - web container
# DC_DB_UP - database container
# 0 = down
# 1 = up
function _getStatus_docker(){
local _out
_out=$( docker-compose -p "$APP_NAME" ps)
DC_WEB_UP=0
DC_DB_UP=0
grep -q "${APP_NAME}-server" <<< "$_out" && DC_WEB_UP=1
grep -q "${APP_NAME}-db" <<< "$_out" && DC_DB_UP=1
}
function _getWebUrl(){
DC_WEB_URL="$frontendurl"
grep -q "${APP_NAME}-server" /etc/hosts && DC_WEB_URL="https://${APP_NAME}-server/"
}
# ----------------------------------------------------------------------
# OUTPUT
# draw a headline 2
function h2(){
echo
@@ -72,55 +114,67 @@ function h3(){
echo -e "$fgBlue----- $*$fgReset"
}
# show help for param -h
# helper for menu: print an inverted key
function _key(){
echo -en "\e[4;7m ${1} \e[0m"
}
# show menu in interactive mode and list keys in help with param -h
# param string optional: set to "all" to show all menu items
function showMenu(){
_getStatus_repo
local _bAll=0
test -n "$1" && _bAll=1
local _spacer=" "
echo
if [ $DC_REPO -eq 1 ]; then
if [ $DC_REPO -eq 1 ] || [ $_bAll -eq 1 ]; then
echo "${_spacer}$( _key g ) - remove git data of starterkit"
echo
fi
echo "${_spacer}$( _key i ) - init application: set permissions"
echo "${_spacer}$( _key t ) - generate files from templates"
echo "${_spacer}$( _key T ) - remove generated files"
echo ""
if [ $DC_WEB_UP -eq 0 ];
then
if [ $DC_CONFIG_CHANGED -eq 1 ] || [ $_bAll -eq 1 ]; then
echo "${_spacer}$( _key t ) - generate files from templates"
fi
if [ $DC_CONFIG_CHANGED -eq 0 ] || [ $_bAll -eq 1 ]; then
echo "${_spacer}$( _key T ) - remove generated files"
fi
echo
if [ $DC_WEB_UP -eq 0 ] || [ $_bAll -eq 1 ]; then
echo "${_spacer}$( _key u ) - startup containers docker-compose ... up -d"
echo "${_spacer}$( _key U ) - startup containers docker-compose ... up -d --build"
else
echo "${_spacer}$( _key s ) - shutdown containers docker-compose stop"
echo "${_spacer}$( _key r ) - remove containers docker-compose rm -f"
fi
echo ""
if [ $DC_WEB_UP -eq 1 ];
then
if [ $DC_WEB_UP -eq 1 ] || [ $_bAll -eq 1 ]; then
echo "${_spacer}$( _key s ) - shutdown containers docker-compose stop"
echo
echo "${_spacer}$( _key m ) - more infos"
echo "${_spacer}$( _key o ) - open app [${APP_NAME}] $frontendurl"
echo "${_spacer}$( _key o ) - open app [${APP_NAME}] $DC_WEB_URL"
echo "${_spacer}$( _key c ) - console (bash)"
echo "${_spacer}$( _key p ) - console check with php linter"
echo ""
fi
echo
echo "${_spacer}$( _key q ) - quit"
}
function showHelp(){
cat <<EOH
INITIALIZER FOR DOCKER APP v$_version
A helper script written in Bash to bring up a PHP+Mysql application in docker.
Source : https://git-repo.iml.unibe.ch/iml-open-source/docker-php-starterkit
Docs : https://os-docs.iml.unibe.ch/docker-php-starterkit/
License: GNU GPL 3.0
📄 Source : https://git-repo.iml.unibe.ch/iml-open-source/docker-php-starterkit
📗 Docs : https://os-docs.iml.unibe.ch/docker-php-starterkit/
📜 License: GNU GPL 3.0
(c) Institute for Medical Education; University of Bern
SYNTAX:
$_self [-h|-v]
$_self [menu key]
$_self [menu key [.. menu key N]]
OPTIONS:
-h show this help and exit
@@ -131,7 +185,7 @@ MENU KEYS:
The same keys can be put as parameter to start this action.
You can add multiples keys to apply multiple actions.
$( showMenu )
$( showMenu "all" )
EXAMPLES:
@@ -143,6 +197,56 @@ EXAMPLES:
EOH
}
# show urls for app container
function _showBrowserurl(){
echo "In a web browser open:"
echo " $DC_WEB_URL"
}
# detect + show ports and urls for app container and db container
function _showInfos(){
_showContainers long
h2 INFO
h3 "processes webserver"
# docker-compose top
docker top "${APP_NAME}-server"
if [ ! "$DB_ADD" = "false" ]; then
h3 "processes database"
docker top "${APP_NAME}-db"
fi
h3 "What to open in browser"
if echo >"/dev/tcp/localhost/${APP_PORT}"; then
# echo "OK, app port ${APP_PORT} is reachable"
# echo
_showBrowserurl
else
echo "ERROR: app port ${APP_PORT} is not available"
fi 2>/dev/null
if [ "$DB_ADD" != "false" ]; then
h3 "Check database port"
if echo >"/dev/tcp/localhost/${DB_PORT}"; then
echo "OK, db port ${DB_PORT} is reachable"
echo
echo "In a local DB admin tool you can connect it:"
echo " host : localhost"
echo " port : ${DB_PORT}"
echo " user : root"
echo " password: ${MYSQL_ROOT_PASS}"
else
echo "NO, db port ${DB_PORT} is not available"
fi 2>/dev/null
fi
echo
}
# ----------------------------------------------------------------------
# ACTIONS
# set acl on local directory
function _setWritepermissions(){
h2 "set write permissions on ${gittarget} ..."
@@ -201,7 +305,7 @@ function _fix_no-db(){
fi
}
# helper functiion to generate replacements using sed
# helper function to generate replacements using sed
# it loops over all vars in the config file
# used in _generateFiles
function _getreplaces(){
@@ -223,15 +327,21 @@ function _getreplaces(){
# It skips if
# - 1st line is not starting with "# TARGET: filename"
# - target file has no updated lines
# If the 1st parameter is set to "dryrun" it will not generate files.
# param string dryrun optional: set to "dryrun" to not generate files
function _generateFiles(){
local _dryrun="$1"
DC_CONFIG_CHANGED=0
# shellcheck source=/dev/null
. "${_self}.cfg" || exit 1
params=$( _getreplaces | while read -r line; do echo -n "-e '$line' "; done )
local _tmpfile=/tmp/newfilecontent$$.tmp
h2 "generate files from templates..."
test "$_dryrun" = "dryrun" || h2 "generate files from templates..."
for mytpl in templates/*
do
# h3 $mytpl
@@ -241,7 +351,9 @@ function _generateFiles(){
target=$( head -1 "$mytpl" | grep "^# TARGET:" | cut -f 2- -d ":" | awk '{ print $1 }' )
if [ -z "$target" ]; then
echo "SKIP: $mytpl - target was not found in 1st line"
if [ "$_dryrun" != "dryrun" ]; then
echo "SKIP: $mytpl - target was not found in 1st line"
fi
_doReplace=0
fi
@@ -256,20 +368,28 @@ function _generateFiles(){
local _md5; _md5=$( md5sum $_tmpfile | awk '{ print $1 }' )
sed -i "s#{{generator}}#GENERATED BY $_self - template: $mytpl - $_md5#g" $_tmpfile
# apply all replacements to the tmp file
eval sed -i "$params" "$_tmpfile" || exit
_fix_no-db $_tmpfile
# echo "changes for $target:"
if diff --color=always "../$target" "$_tmpfile" | grep -v "$_md5" | grep -v "^---" | grep . || [ ! -f "../$target" ]; then
echo -n "$mytpl - changes detected - writing [$target] ... "
mkdir -p "$( dirname ../"$target" )" || exit 2
mv "$_tmpfile" "../$target" || exit 2
echo OK
echo
if diff --color=always "../$target" "$_tmpfile" 2>/dev/null | grep -v "$_md5" | grep -v "^---" | grep . || [ ! -f "../$target" ]; then
if [ "$_dryrun" = "dryrun" ]
then
DC_CONFIG_CHANGED=1
else
echo -n "$mytpl - changes detected - writing [$target] ... "
mkdir -p "$( dirname ../"$target" )" || exit 2
mv "$_tmpfile" "../$target" || exit 2
echo OK
echo
fi
else
rm -f $_tmpfile
echo "SKIP: $mytpl - Nothing to do."
if [ "$_dryrun" != "dryrun" ]; then
echo "SKIP: $mytpl - Nothing to do."
fi
fi
fi
done
@@ -300,36 +420,9 @@ function _removeGeneratedFiles(){
}
# get container status and set global variable DC_REPO
# DC_REPO = 0 nothing to do - repo was changed to project
# DC_REPO = 1 if repo is in selfgitrepo (must be deleted)
function _getStatus_repo(){
DC_REPO=0
git config --get remote.origin.url 2>/dev/null | grep -q $selfgitrepo && DC_REPO=1
}
# get container status and set global variables
# DC_WEB_UP - web container
# DC_DB_UP - database container
# 0 = down
# 1 = up
function _getStatus_docker(){
local _out
_out=$( docker-compose -p "$APP_NAME" ps)
DC_WEB_UP=0
DC_DB_UP=0
grep -q "${APP_NAME}-server" <<< "$_out" && DC_WEB_UP=1
grep -q "${APP_NAME}-db" <<< "$_out" && DC_DB_UP=1
}
# show running containers
function _showContainers(){
local bLong=$1
_getStatus_docker
local _out
@@ -362,16 +455,16 @@ function _showContainers(){
fi
h2 CONTAINERS
printf "$colWeb _____________________________ $colDb _____________________________ $fgReset \n"
printf "$colWeb | %-25s | $colDb | %-25s | $fgReset \n" "" ""
printf "$colWeb | %-25s | $colDb | %-25s | $fgReset \n" "${APP_NAME}-web ${StatusWeb}" "${APP_NAME}-db ${StatusDb}"
printf "$colWeb | %-25s | $colDb | %-25s | $fgReset \n" " PHP ${APP_PHP_VERSION}" " ${MYSQL_IMAGE}"
printf "$colWeb | %-25s | $colDb | %-25s | $fgReset \n" " :${APP_PORT}" " :${DB_PORT}"
printf "$colWeb |_____________________________| $colDb |_____________________________| $fgReset \n"
printf "$colWeb ____________________________________ $colDb ____________________________________ $fgReset \n"
printf "$colWeb | %-32s \ $colDb | %-32s \ $fgReset \n" "" ""
printf "$colWeb | %-32s | $colDb | %-32s | $fgReset \n" "${APP_NAME}-web ${StatusWeb}" "${APP_NAME}-db ${StatusDb}"
printf "$colWeb | %-32s | $colDb | %-32s | $fgReset \n" " PHP ${APP_PHP_VERSION}" " ${MYSQL_IMAGE}"
printf "$colWeb | %-32s | $colDb | %-32s | $fgReset \n" " :${APP_PORT}" " :${DB_PORT}"
printf "$colWeb |____________________________________| $colDb |____________________________________| $fgReset \n"
echo
if [ -n "$Status" ]; then
echo "$Status"
echo " $Status"
echo
fi
@@ -385,61 +478,6 @@ function _showContainers(){
}
# show urls for app container
function _showBrowserurl(){
echo "In a web browser open:"
echo " $frontendurl"
if grep "${APP_NAME}-server" /etc/hosts >/dev/null; then
echo " https://${APP_NAME}-server/"
fi
}
# detect + show ports and urls for app container and db container
function _showInfos(){
_showContainers long
h2 INFO
h3 "processes webserver"
# docker-compose top
docker top "${APP_NAME}-server"
if [ ! "$DB_ADD" = "false" ]; then
h3 "processes database"
docker top "${APP_NAME}-db"
fi
h3 "Check app port"
if echo >"/dev/tcp/localhost/${APP_PORT}"; then
echo "OK, app port ${APP_PORT} is reachable"
echo
_showBrowserurl
else
echo "NO, app port ${APP_PORT} is not available"
fi 2>/dev/null
if [ "$DB_ADD" != "false" ]; then
h3 "Check database port"
if echo >"/dev/tcp/localhost/${DB_PORT}"; then
echo "OK, db port ${DB_PORT} is reachable"
echo
echo "In a local DB admin tool you can connect it:"
echo " host : localhost"
echo " port : ${DB_PORT}"
echo " user : root"
echo " password: ${MYSQL_ROOT_PASS}"
else
echo "NO, db port ${DB_PORT} is not available"
fi 2>/dev/null
fi
echo
}
# helper for menu: print an inverted key
function _key(){
echo -en "\e[4;7m ${1} \e[0m"
}
# helper: wait for a return key
function _wait(){
local _wait=15
@@ -454,13 +492,16 @@ action=$1; shift 1
while true; do
_getStatus_repo
_getStatus_docker
_getStatus_template
_getWebUrl
if [ -z "$action" ]; then
echo "_______________________________________________________________________________"
echo
echo
echo " ${APP_NAME^^} :: Initializer for docker"
echo " ______"
printf " %-70s ______\n" "${APP_NAME^^} :: Initializer for docker"
echo "________________________________________________________________________/ $_version"
echo
@@ -560,7 +601,7 @@ while true; do
;;
o)
h2 "Open app ..."
xdg-open "$frontendurl"
xdg-open "$DC_WEB_URL"
;;
q)
h2 "Bye!"
Loading