Skip to content
Snippets Groups Projects
Commit 3adb9beb authored by Hahn Axel (hahn)'s avatar Hahn Axel (hahn)
Browse files

Merge branch 'update_renderer_class' into 'main'

Update renderer class

See merge request !21
parents 7ea11045 7073a693
No related branches found
No related tags found
1 merge request!21Update renderer class
...@@ -4,77 +4,183 @@ ...@@ -4,77 +4,183 @@
# DOCKER PHP DEV ENVIRONMENT :: INIT # DOCKER PHP DEV ENVIRONMENT :: INIT
# #
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# 2021-11-nn v1.0 <axel.hahn@iml.unibe.ch> # 2021-11-nn v1.0 <axel.hahn@iml.unibe.ch>
# 2022-07-19 v1.1 <axel.hahn@iml.unibe.ch> support multiple dirs for setfacl # 2022-07-19 v1.1 <axel.hahn@iml.unibe.ch> support multiple dirs for setfacl
# 2022-11-16 v1.2 <www.axel-hahn.de> use docker-compose -p "$APP_NAME" # 2022-11-16 v1.2 <www.axel-hahn.de> use docker-compose -p "$APP_NAME"
# 2022-12-18 v1.3 <www.axel-hahn.de> add -p "$APP_NAME" in other docker commands # 2022-12-18 v1.3 <www.axel-hahn.de> add -p "$APP_NAME" in other docker commands
# 2022-12-20 v1.4 <axel.hahn@unibe.ch> replace fgrep with grep -F # 2022-12-20 v1.4 <axel.hahn@unibe.ch> replace fgrep with grep -F
# 2023-03-06 v1.5 <www.axel-hahn.de> up with and without --build # 2023-03-06 v1.5 <www.axel-hahn.de> up with and without --build
# 2023-08-17 v1.6 <www.axel-hahn.de> menu selection with single key (without return) # 2023-08-17 v1.6 <www.axel-hahn.de> menu selection with single key (without return)
# 2023-11-10 v1.7 <axel.hahn@unibe.ch> replace docker-compose with "docker compose" # 2023-11-10 v1.7 <axel.hahn@unibe.ch> replace docker-compose with "docker compose"
# 2023-11-13 v1.8 <axel.hahn@unibe.ch> UNDO "docker compose"; update infos # 2023-11-13 v1.8 <axel.hahn@unibe.ch> UNDO "docker compose"; update infos
# 2023-11-15 v1.9 <axel.hahn@unibe.ch> add help; execute multiple actions by params; new menu item: open app # 2023-11-15 v1.9 <axel.hahn@unibe.ch> add help; execute multiple actions by params; new menu item: open app
# 2023-12-07 v1.10 <www.axel-hahn.de> simplyfy console command; add php linter
# 2024-07-01 v1.11 <www.axel-hahn.de> diff with colored output; suppress errors on port check
# 2024-07-19 v1.12 <axel.hahn@unibe.ch> apply shell fixes
# 2024-07-22 v1.13 <axel.hahn@unibe.ch> show info if there is no database container; speedup replacements
# 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 <www.axel-hahn.de> hide unnecessary menu items; reorder functions
# 2024-08-14 v1.18 <www.axel-hahn.de> update container view
# ====================================================================== # ======================================================================
cd $( dirname $0 ) cd "$( dirname "$0" )" || exit 1
. $( basename $0 ).cfg
# init used vars
gittarget=
frontendurl=
_self=$( basename "$0" )
# shellcheck source=/dev/null
. "${_self}.cfg" || exit 1
_version="1.18"
# git@git-repo.iml.unibe.ch:iml-open-source/docker-php-starterkit.git # git@git-repo.iml.unibe.ch:iml-open-source/docker-php-starterkit.git
selfgitrepo="docker-php-starterkit.git" selfgitrepo="docker-php-starterkit.git"
_version="1.9" fgGray="\e[1;30m"
fgRed="\e[31m"
fgGreen="\e[32m"
fgBrown="\e[33m"
fgBlue="\e[34m"
fgInvert="\e[7m"
fgReset="\e[0m"
# ----- status varsiables
# running containers
DC_WEB_UP=0
DC_DB_UP=0
# repo of docker-php-starterkit is here?
DC_REPO=1
DC_CONFIG_CHANGED=0
DC_WEB_URL=""
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# FUNCTIONS # 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 # draw a headline 2
function h2(){ function h2(){
echo echo
echo -e "\e[33m>>>>> $*\e[0m" echo -e "$fgBrown>>>>> $*$fgReset"
} }
# draw a headline 3 # draw a headline 3
function h3(){ function h3(){
echo echo
echo -e "\e[34m----- $*\e[0m" echo -e "$fgBlue----- $*$fgReset"
}
# helper for menu: print an inverted key
function _key(){
echo -en "\e[4;7m ${1} \e[0m"
} }
# show help for param -h # 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(){ function showMenu(){
echo " $( _key g ) - remove git data of starterkit"
echo local _bAll=0
echo " $( _key i ) - init application: set permissions" test -n "$1" && _bAll=1
echo " $( _key t ) - generate files from templates"
echo " $( _key T ) - remove generated files" local _spacer=" "
echo echo
echo " $( _key u ) - startup containers docker-compose ... up -d" if [ $DC_REPO -eq 1 ] || [ $_bAll -eq 1 ]; then
echo " $( _key U ) - startup containers docker-compose ... up -d --build" echo "${_spacer}$( _key g ) - remove git data of starterkit"
echo " $( _key s ) - shutdown containers docker-compose stop" echo
echo " $( _key r ) - remove containers docker-compose rm -f" fi
echo "${_spacer}$( _key i ) - init application: set permissions"
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 echo
echo " $( _key m ) - more infos" if [ $DC_WEB_UP -eq 0 ] || [ $_bAll -eq 1 ]; then
echo " $( _key o ) - open app [${APP_NAME}] $frontendurl" if [ $DC_CONFIG_CHANGED -eq 0 ] || [ $_bAll -eq 1 ]; then
echo " $( _key c ) - console (bash)" echo "${_spacer}$( _key u ) - startup containers docker-compose ... up -d"
echo "${_spacer}$( _key U ) - startup containers docker-compose ... up -d --build"
echo
echo "${_spacer}$( _key r ) - remove containers docker-compose rm -f"
fi
fi
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}] $DC_WEB_URL"
echo "${_spacer}$( _key c ) - console (bash)"
echo "${_spacer}$( _key p ) - console check with php linter"
fi
echo echo
echo " $( _key q ) - quit" echo "${_spacer}$( _key q ) - quit"
} }
function showHelp(){ function showHelp(){
local _self=$( basename "$0" )
cat <<EOH cat <<EOH
INITIALIZER FOR DOCKER APP v$_version INITIALIZER FOR DOCKER APP v$_version
A helper script written in Bash to bring up a PHP+Mysql application in docker. 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 📄 Source : https://git-repo.iml.unibe.ch/iml-open-source/docker-php-starterkit
Docs : https://os-docs.iml.unibe.ch/docker-php-starterkit/ 📗 Docs : https://os-docs.iml.unibe.ch/docker-php-starterkit/
License: GNU GPL 3.0 📜 License: GNU GPL 3.0
(c) Institute for Medical Education; University of Bern (c) Institute for Medical Education; University of Bern
SYNTAX: SYNTAX:
$_self [-h|-v] $_self [-h|-v]
$_self [menu key] $_self [menu key [.. menu key N]]
OPTIONS: OPTIONS:
-h show this help and exit -h show this help and exit
...@@ -85,30 +191,77 @@ MENU KEYS: ...@@ -85,30 +191,77 @@ MENU KEYS:
The same keys can be put as parameter to start this action. The same keys can be put as parameter to start this action.
You can add multiples keys to apply multiple actions. You can add multiples keys to apply multiple actions.
$( showMenu ) $( showMenu "all" )
EXAMPLES: EXAMPLES:
$_self starts interactive mode $_self starts interactive mode
$_self u bring up docker container(s) and stay in interactive mode $_self u bring up docker container(s) and stay in interactive mode
$_self i q set write permissions and quit $_self i q set write permissions and quit
$_self p q start php linter and exit
EOH EOH
} }
# function _gitinstall(){
# h2 "install/ update app from git repo ${gitrepo} in ${gittarget} ..."
# test -d ${gittarget} && ( cd ${gittarget} && git pull ) # show urls for app container
# test -d ${gittarget} || git clone -b ${gitbranch} ${gitrepo} ${gittarget} 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 # set acl on local directory
function _setWritepermissions(){ function _setWritepermissions(){
h2 "set write permissions on ${gittarget} ..." h2 "set write permissions on ${gittarget} ..."
local _user=$( id -gn ) local _user; _user=$( id -gn )
typeset -i local _user_uid=0 local _user_uid; typeset -i _user_uid=0
test -f /etc/subuid && _user_uid=$( grep $_user /etc/subuid 2>/dev/null | cut -f 2 -d ':' )-1
typeset -i local DOCKER_USER_OUTSIDE=$_user_uid+$DOCKER_USER_UID test -f /etc/subuid && _user_uid=$( grep "$_user" /etc/subuid 2>/dev/null | cut -f 2 -d ':' )-1
local DOCKER_USER_OUTSIDE; typeset -i DOCKER_USER_OUTSIDE=$_user_uid+$DOCKER_USER_UID
set -vx set -vx
...@@ -120,10 +273,10 @@ function _setWritepermissions(){ ...@@ -120,10 +273,10 @@ function _setWritepermissions(){
sudo setfacl -bR "${mywritedir}" sudo setfacl -bR "${mywritedir}"
# default permissions: both the host user and the user with UID 33 (www-data on many systems) are owners with rwx perms # default permissions: both the host user and the user with UID 33 (www-data on many systems) are owners with rwx perms
sudo setfacl -dRm u:${DOCKER_USER_OUTSIDE}:rwx,${_user}:rwx "${mywritedir}" sudo setfacl -dRm "u:${DOCKER_USER_OUTSIDE}:rwx,${_user}:rwx" "${mywritedir}"
# permissions: make both the host user and the user with UID 33 owner with rwx perms for all existing files/directories # permissions: make both the host user and the user with UID 33 owner with rwx perms for all existing files/directories
sudo setfacl -Rm u:${DOCKER_USER_OUTSIDE}:rwx,${_user}:rwx "${mywritedir}" sudo setfacl -Rm "u:${DOCKER_USER_OUTSIDE}:rwx,${_user}:rwx" "${mywritedir}"
done done
set +vx set +vx
...@@ -134,11 +287,10 @@ function _removeGitdata(){ ...@@ -134,11 +287,10 @@ function _removeGitdata(){
h2 "Remove git data of starterkit" h2 "Remove git data of starterkit"
echo -n "Current git remote url: " echo -n "Current git remote url: "
git config --get remote.origin.url git config --get remote.origin.url
git config --get remote.origin.url 2>/dev/null | grep $selfgitrepo >/dev/null if git config --get remote.origin.url 2>/dev/null | grep -q $selfgitrepo; then
if [ $? -eq 0 ]; then
echo echo
echo -n "Delete local .git and .gitignore? [y/N] > " echo -n "Delete local .git and .gitignore? [y/N] > "
read answer read -r answer
test "$answer" = "y" && ( echo "Deleting ... " && rm -rf ../.git ../.gitignore ) test "$answer" = "y" && ( echo "Deleting ... " && rm -rf ../.git ../.gitignore )
else else
echo "It was done already - $selfgitrepo was not found." echo "It was done already - $selfgitrepo was not found."
...@@ -150,36 +302,64 @@ function _removeGitdata(){ ...@@ -150,36 +302,64 @@ function _removeGitdata(){
# see _generateFiles() # see _generateFiles()
function _fix_no-db(){ function _fix_no-db(){
local _file=$1 local _file=$1
if [ $DB_ADD = false ]; then if [ "$DB_ADD" = "false" ]; then
typeset -i local iStart=$( cat ${_file} | grep -Fn "$CUTTER_NO_DATABASE" | cut -f 1 -d ':' )-1 local iStart; typeset -i iStart
iStart=$( grep -Fn "$CUTTER_NO_DATABASE" "${_file}" | cut -f 1 -d ':' )-1
if [ $iStart -gt 0 ]; then if [ $iStart -gt 0 ]; then
sed -ni "1,${iStart}p" ${_file} sed -ni "1,${iStart}p" "${_file}"
fi fi
fi fi
} }
# helper function to generate replacements using sed
# it loops over all vars in the config file
# used in _generateFiles
function _getreplaces(){
# loop over vars to make the replacement
grep "^[a-zA-Z]" "$_self.cfg" | while read -r line
do
# echo replacement: $line
mykey=$( echo "$line" | cut -f 1 -d '=' )
myvalue="$( eval echo \"\$"$mykey"\" )"
# TODO: multiline values fail here in replacement with sed
echo -e "s#{{$mykey}}#${myvalue}#g"
done
}
# loop over all files in templates subdir make replacements and generate # loop over all files in templates subdir make replacements and generate
# a target file. # a target file.
# It skips if # It skips if
# - 1st line is not starting with "# TARGET: filename" # - 1st line is not starting with "# TARGET: filename"
# - target file has no updated lines # - 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(){ function _generateFiles(){
# re-read config vars local _dryrun="$1"
. $( basename $0 ).cfg 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 local _tmpfile=/tmp/newfilecontent$$.tmp
h2 "generate files from templates..."
for mytpl in $( ls -1 ./templates/* ) test "$_dryrun" = "dryrun" || h2 "generate files from templates..."
for mytpl in templates/*
do do
# h3 $mytpl # h3 $mytpl
local _doReplace=1 local _doReplace=1
# fetch traget file from first line # fetch traget file from first line
target=$( head -1 $mytpl | grep "^# TARGET:" | cut -f 2- -d ":" | awk '{ print $1 }' ) target=$( head -1 "$mytpl" | grep "^# TARGET:" | cut -f 2- -d ":" | awk '{ print $1 }' )
if [ -z "$target" ]; then 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 _doReplace=0
fi fi
...@@ -187,39 +367,37 @@ function _generateFiles(){ ...@@ -187,39 +367,37 @@ function _generateFiles(){
if [ $_doReplace -eq 1 ]; then if [ $_doReplace -eq 1 ]; then
# write file from line 2 to a tmp file # write file from line 2 to a tmp file
sed -n '2,$p' $mytpl >$_tmpfile sed -n '2,$p' "$mytpl" >"$_tmpfile"
# add generator # add generator
# sed -i "s#{{generator}}#generated by $0 - template: $mytpl - $( date )#g" $_tmpfile # sed -i "s#{{generator}}#generated by $0 - template: $mytpl - $( date )#g" $_tmpfile
local _md5=$( md5sum $_tmpfile | awk '{ print $1 }' ) local _md5; _md5=$( md5sum $_tmpfile | awk '{ print $1 }' )
sed -i "s#{{generator}}#GENERATED BY $( basename $0 ) - template: $mytpl - $_md5#g" $_tmpfile sed -i "s#{{generator}}#GENERATED BY $_self - template: $mytpl - $_md5#g" $_tmpfile
# loop over vars to make the replacement # apply all replacements to the tmp file
grep "^[a-zA-Z]" $( basename $0 ).cfg | while read line eval sed -i "$params" "$_tmpfile" || exit
do
# echo replacement: $line
mykey=$( echo $line | cut -f 1 -d '=' )
myvalue="$( eval echo \"\${$mykey}\" )"
# grep "{{$mykey}}" $_tmpfile
# TODO: multiline values fail here in replacement with sed
sed -i "s#{{$mykey}}#${myvalue}#g" $_tmpfile
done
_fix_no-db $_tmpfile _fix_no-db $_tmpfile
# echo "changes for $target:" # echo "changes for $target:"
diff "../$target" "$_tmpfile" | grep -v "$_md5" | grep -v "^---" | grep . if diff --color=always "../$target" "$_tmpfile" 2>/dev/null | grep -v "$_md5" | grep -v "^---" | grep . || [ ! -f "../$target" ]; then
if [ $? -eq 0 -o ! -f "../$target" ]; then if [ "$_dryrun" = "dryrun" ]
echo -n "$mytpl - changes detected - writing [$target] ... " then
mkdir -p $( dirname "../$target" ) || exit 2 DC_CONFIG_CHANGED=1
mv "$_tmpfile" "../$target" || exit 2 else
echo OK echo -n "$mytpl - changes detected - writing [$target] ... "
mkdir -p "$( dirname ../"$target" )" || exit 2
mv "$_tmpfile" "../$target" || exit 2
echo OK
echo
fi
else else
rm -f $_tmpfile rm -f $_tmpfile
echo "SKIP: $mytpl - Nothing to do." if [ "$_dryrun" != "dryrun" ]; then
echo "SKIP: $mytpl - Nothing to do."
fi
fi fi
fi fi
echo
done done
} }
...@@ -228,83 +406,88 @@ function _generateFiles(){ ...@@ -228,83 +406,88 @@ function _generateFiles(){
# a traget file. # a traget file.
function _removeGeneratedFiles(){ function _removeGeneratedFiles(){
h2 "remove generated files..." h2 "remove generated files..."
for mytpl in $( ls -1 ./templates/* ) for mytpl in templates/*
do do
h3 $mytpl h3 "$mytpl"
# fetch traget file from first line # fetch traget file from first line
target=$( head -1 $mytpl | grep "^# TARGET:" | cut -f 2- -d ":" | awk '{ print $1 }' ) target=$( head -1 "$mytpl" | grep "^# TARGET:" | cut -f 2- -d ":" | awk '{ print $1 }' )
if [ ! -z "$target" -a -f "../$target" ]; then if [ -n "$target" ] && [ -f "../$target" ]; then
echo -n "REMOVING " echo -n "REMOVING "
ls -l "../$target" || exit 2 ls -l "../$target" || exit 2
rm -f "../$target" || exit 2 rm -f "../$target" || exit 2
echo OK echo OK
else else
echo SKIP: $target echo "SKIP: $target"
fi fi
done done
} }
# show running containers # show running containers
function _showContainers(){ function _showContainers(){
local bLong=$1 local bLong=$1
h2 CONTAINERS
if [ -z "$bLong" ]; then
docker-compose -p "$APP_NAME" ps
else
docker ps | grep $APP_NAME
fi
}
local _out
# show urls for app container local sUp=".. UP"
function _showBrowserurl(){ local sDown=".. down"
echo "In a web browser open:"
echo " $frontendurl" local Status=
if grep "${APP_NAME}-server" /etc/hosts >/dev/null; then local StatusWeb="$sDown"
echo " https://${APP_NAME}-server/" local StatusDb="$sDown"
local colWeb=
local colDb=
colDb="$fgRed"
colWeb="$fgRed"
if [ $DC_WEB_UP -eq 1 ]; then
colWeb="$fgGreen"
StatusWeb="$sUp"
fi
if [ $DC_DB_UP -eq 1 ]; then
colDb="$fgGreen"
StatusDb="$sUp"
fi fi
}
# detect + show ports and urls for app container and db container if [ "$DB_ADD" = "false" ]; then
function _showInfos(){ colDb="$fgGray"
_showContainers long local StatusDb=".. N/A"
h2 INFO Status="This app has no database container."
fi
h2 CONTAINERS
h3 "processes" echo
docker-compose top printf " $colWeb$fgInvert %-32s $fgReset $colDb$fgInvert %-32s $fgReset\n" "WEB ${StatusWeb}" "DB ${StatusDb}"
printf " %-32s $fgReset %-32s $fgReset\n" "PHP ${APP_PHP_VERSION}" "${MYSQL_IMAGE}"
printf " %-32s $fgReset %-32s $fgReset\n" ":${APP_PORT}" ":${DB_PORT}"
echo
h3 "Check app port" if [ -n "$Status" ]; then
>/dev/tcp/localhost/${APP_PORT} 2>/dev/null && ( echo " $Status"
echo "OK, app port ${APP_PORT} is reachable" echo
fi
if [ -n "$bLong" ]; then
echo "$_out"
h2 STATS
docker stats --no-stream
echo echo
_showBrowserurl
)
if [ "$DB_ADD" != "false" ]; then
h3 "Check database port"
>/dev/tcp/localhost/${DB_PORT} >/dev/null 2>&1 && (
echo "OK, db port ${DB_PORT} is reachable"
echo
)
echo "In a local DB admin tool:"
echo " host : localhost"
echo " port : ${DB_PORT}"
echo " user : root"
echo " password: ${MYSQL_ROOT_PASS}"
fi fi
echo
}
# helper for menu: print an inverted key
function _key(){
printf "\e[4;7m ${1} \e[0m"
} }
# helper: wait for a return key # helper: wait for a return key
function _wait(){ function _wait(){
echo -n "... press RETURN > "; read -r -t 15 local _wait=15
echo -n "... press RETURN ... or wait $_wait sec > "; read -r -t $_wait
} }
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
...@@ -315,10 +498,18 @@ action=$1; shift 1 ...@@ -315,10 +498,18 @@ action=$1; shift 1
while true; do while true; do
_getStatus_repo
_getStatus_docker
_getStatus_template
_getWebUrl
if [ -z "$action" ]; then if [ -z "$action" ]; then
echo "_______________________________________________________________________________"
echo
printf " %-70s ______\n" "${APP_NAME^^} :: Initializer for docker"
echo "________________________________________________________________________/ $_version"
echo echo
echo -e "\e[32m===== INITIALIZER FOR DOCKER APP [$APP_NAME] v$_version ===== \e[0m\n\r"
_showContainers _showContainers
...@@ -332,7 +523,7 @@ while true; do ...@@ -332,7 +523,7 @@ while true; do
case "$action" in case "$action" in
"-h") showHelp; exit 0 ;; "-h") showHelp; exit 0 ;;
"-v") echo $(basename $0) $_version; exit 0 ;; "-v") echo "$_self $_version"; exit 0 ;;
g) g)
_removeGitdata _removeGitdata
;; ;;
...@@ -353,7 +544,7 @@ while true; do ...@@ -353,7 +544,7 @@ while true; do
;; ;;
u|U) u|U)
h2 "Bring up..." h2 "Bring up..."
dockerUp="docker-compose -p "$APP_NAME" --verbose up -d --remove-orphans" dockerUp="docker-compose -p $APP_NAME --verbose up -d --remove-orphans"
if [ "$action" = "U" ]; then if [ "$action" = "U" ]; then
dockerUp+=" --build" dockerUp+=" --build"
fi fi
...@@ -378,14 +569,45 @@ while true; do ...@@ -378,14 +569,45 @@ while true; do
;; ;;
c) c)
h2 "Console" h2 "Console"
docker ps _containers=$( docker-compose -p "$APP_NAME" ps | sed -n "2,\$p" | awk '{ print $1}' )
echo -n "id or name >" if [ "$DB_ADD" = "false" ]; then
read dockerid dockerid=$_containers
test -z "$dockerid" || docker exec -it $dockerid /bin/bash else
echo "Select a container:"
sed "s#^# #g" <<< "$_containers"
echo -n "id or name >"
read -r dockerid
fi
test -z "$dockerid" || (
echo
echo "> docker exec -it $dockerid /bin/bash (type 'exit' + Return when finished)"
docker exec -it "$dockerid" /bin/bash
)
;;
p)
h2 "PHP $APP_PHP_VERSION linter"
dockerid="${APP_NAME}-server"
echo -n "Scanning ... "
typeset -i _iFiles
_iFiles=$( docker exec -it "$dockerid" /bin/bash -c "find . -name '*.php' " | wc -l )
if [ $_iFiles -gt 0 ]; then
echo "found $_iFiles [*.php] files ... errors from PHP $APP_PHP_VERSION linter:"
time if echo "$APP_PHP_VERSION" | grep -E "([567]\.|8\.[012])" >/dev/null ; then
docker exec -it "$dockerid" /bin/bash -c "find . -name '*.php' -exec php -l {} \; | grep -v '^No syntax errors detected'"
else
docker exec -it "$dockerid" /bin/bash -c "php -l \$( find . -name '*.php' ) | grep -v '^No syntax errors detected' "
fi
echo
_wait
else
echo "Start your docker container first."
fi
;; ;;
o) o)
h2 "Open app ..." h2 "Open app ..."
xdg-open "$frontendurl" xdg-open "$DC_WEB_URL"
;; ;;
q) q)
h2 "Bye!" h2 "Bye!"
......
...@@ -11,6 +11,6 @@ Free software and Open Source from University of Bern :: IML - Institute of Medi ...@@ -11,6 +11,6 @@ Free software and Open Source from University of Bern :: IML - Institute of Medi
📄 Source: <https://git-repo.iml.unibe.ch/iml-open-source/adminlte-renderer> \ 📄 Source: <https://git-repo.iml.unibe.ch/iml-open-source/adminlte-renderer> \
📜 License: GNU GPL 3.0 \ 📜 License: GNU GPL 3.0 \
📖 Docs: <https://os-docs.iml.unibe.ch/adminlte-renderer/> 📗 Docs: <https://os-docs.iml.unibe.ch/adminlte-renderer/>
- - - - - -
...@@ -8,7 +8,7 @@ Free software and Open Source from University of Bern :: IML - Institute of Medi ...@@ -8,7 +8,7 @@ Free software and Open Source from University of Bern :: IML - Institute of Medi
📄 Source: <https://git-repo.iml.unibe.ch/iml-open-source/adminlte-renderer> \ 📄 Source: <https://git-repo.iml.unibe.ch/iml-open-source/adminlte-renderer> \
📜 License: GNU GPL 3.0 \ 📜 License: GNU GPL 3.0 \
📖 Docs: coming soon <https://os-docs.iml.unibe.ch/adminlte-renderer/> 📗 Docs: coming soon <https://os-docs.iml.unibe.ch/adminlte-renderer/>
- - - - - -
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment