2021-06-18 13:54:33 +02:00
#!/usr/bin/env bash
2021-07-05 10:21:30 +02:00
PATCH = 0
2021-06-18 13:54:33 +02:00
usage( ) {
echo "Usage : r3 <task> <container>"
}
2021-06-20 20:47:15 +02:00
store_history( ) {
if [ " ${ TASK } " = 'create' ] ;
then
COMMAND = $( echo " r3 ${ TASK } ${ ARG1 } ${ ARG2 } ${ ARG3 } ${ ARG4 } ${ ARG5 } " | sed "s/\s+/ /g" | sed " s/\s* $// " )
if grep -q " ${ COMMAND } " " ${ R3_V2_LIB_PATH } " /.r3_history;
then
echo "Already found command in history"
else
echo "Saving command to history"
echo " r3 ${ TASK } ${ ARG1 } ${ ARG2 } ${ ARG3 } ${ ARG4 } ${ ARG5 } " >> " ${ R3_V2_LIB_PATH } " /.r3_history
fi
fi
}
2021-06-18 13:54:33 +02:00
cleanup( ) {
LAST_ERROR = $?
2021-06-20 20:47:15 +02:00
if [ " ${ LAST_ERROR } " = 0 ] ;
then
2021-09-09 18:09:28 +02:00
usage
2021-06-20 20:47:15 +02:00
fi
2021-06-18 13:54:33 +02:00
if [ " ${ LAST_ERROR } " = 1 ] ;
then
2021-09-09 18:09:28 +02:00
echo "exited normally"
2021-06-18 13:54:33 +02:00
fi
if [ " ${ LAST_ERROR } " = 2 ] ;
then
echo "You do not appear to have a proper install path - please navigate to the r3-cloud folder and run './install.sh --full'"
fi
2021-06-18 14:29:44 +02:00
if [ " ${ LAST_ERROR } " = 3 ] ;
then
echo "You do not appear to have a proper lib path - did you clone the project correctly?"
fi
2021-06-18 13:54:33 +02:00
2021-06-28 09:05:53 +02:00
if [ " ${ LAST_ERROR } " = 4 ] ;
then
2021-06-29 10:57:45 +02:00
echo " File not found : ${ FILE } "
2021-06-28 09:05:53 +02:00
fi
2021-06-29 10:57:45 +02:00
if [ " ${ LAST_ERROR } " = 5 ] ;
then
echo "Warning! An error occurred during restore and the process is stopped to prevent potential data loss"
echo "Scroll up for the reason and take action accordingly"
fi
2021-06-18 13:54:33 +02:00
cd " ${ CWD } " 2>& 1 || exit
}
2021-10-02 14:55:30 +02:00
echo ' _____ __ ' ;
echo ' ____|__ / _____ / /_ ' ;
echo ' / ___//_ < / ___// __ \' ;
echo ' / / ___/ /_ (__ )/ / / /' ;
echo '/_/ /____/(_)/____//_/ /_/ ' ;
echo '' ;
2021-06-18 13:54:33 +02:00
R3_INSTALL_PATH = /usr/share/cybafelo/r3/r3-cloud
2021-06-20 20:47:15 +02:00
R3_V2_LIB_PATH = ${ R3_INSTALL_PATH } /r3-libs/r3-v2
R3_V2_SRC_PATH = ${ R3_INSTALL_PATH } /r3-libs/r3-v2/src
R3_FOLDER = " ${ R3_V2_SRC_PATH } /r3/ "
2021-06-28 09:05:53 +02:00
R3_SYSTEM_FOLDER = " ${ R3_V2_SRC_PATH } /r3/r3-system/ "
2021-07-03 10:40:18 +02:00
R3_COMPONENT_FOLDER = " ${ R3_V2_SRC_PATH } /r3/r3-component/ "
2021-09-07 08:40:23 +02:00
R3_RUNTIME_FOLDER = " ${ R3_V2_SRC_PATH } /r3/r3-runtime/ "
2021-10-01 09:42:40 +02:00
R3_OBJECT_FOLDER = " ${ R3_V2_SRC_PATH } /r3/r3-object/ "
2021-09-10 07:18:24 +02:00
R3_ENTITY_FOLDER = " ${ R3_V2_SRC_PATH } /r3/r3-entity/ "
2021-06-20 20:47:15 +02:00
TEMPLATE_FOLDER = " ${ R3_V2_SRC_PATH } /templates/ "
2021-06-18 13:54:33 +02:00
CWD = $( pwd )
TASK = $1
ARG1 = $2
ARG2 = $3
ARG3 = $4
ARG4 = $5
ARG5 = $6
trap cleanup EXIT
cd " ${ R3_INSTALL_PATH } " 2>& 1 || exit 2
2021-10-01 09:42:40 +02:00
#ENV_FILE='.env'
#
#export $(egrep -v '^#' "${ENV_FILE}" | xargs)
#
#echo "${API_URL}";
2021-06-28 09:05:53 +02:00
if [ " ${ TASK } " = 'update-token-db' ] ;
then
echo "updating token.db"
2021-09-06 08:00:13 +02:00
grep "\bGENERATED_[A-Z_]*\b" " ${ R3_V2_SRC_PATH } " /* -R | sed "s/^.*GENERATED_/GENERATED_/" | sed " s/\(_START\|_END\) $// " | sort --unique > " ${ TEMPLATE_FOLDER } " token.db
2021-06-28 09:05:53 +02:00
grep "\bCUSTOM_[A-Z_]*\b" " ${ R3_V2_SRC_PATH } " /* -R | sed "s/^.*CUSTOM_/CUSTOM_/" | sed " s/\(_START\|_END\) $// " | sort --unique >> " ${ TEMPLATE_FOLDER } " token.db
2021-09-13 09:39:47 +02:00
grep "\bTEMPLATE_[A-Z_]*\b" " ${ R3_V2_SRC_PATH } " /* -R | sed "s/^.*TEMPLATE_/TEMPLATE_/" | sed " s/\(_START\|_END\) $// " | sort --unique >> " ${ TEMPLATE_FOLDER } " token.db
exit 1;
2021-06-28 09:05:53 +02:00
fi
2021-09-09 18:09:28 +02:00
if [ " ${ TASK } " = 'create' ] || [ " ${ TASK } " = 'create-from-update-template' ] ;
2021-06-18 13:54:33 +02:00
then
2021-06-28 09:05:53 +02:00
2021-06-18 13:54:33 +02:00
CLASS_NAME = $ARG1
2021-06-20 20:47:15 +02:00
TEMPLATE = " ${ ARG2 } .template "
2021-10-01 09:42:40 +02:00
FILE_NAME = " $( echo " r3 ${ CLASS_NAME } " | sed 's/\([A-Z]\)/-\1/g' | awk '{print tolower($0)}' | sed 's/r3\-r3\-/r3-/' | sed 's/r3\-r3/r3/' ) .js "
2021-06-20 20:47:15 +02:00
2021-06-28 09:05:53 +02:00
SUBFOLDER = './'
2021-09-10 14:03:25 +02:00
if [ -n " ${ ARG4 } " ] ;
then
2021-07-03 10:40:18 +02:00
SUBFOLDER = " ${ ARG4 } "
2021-09-10 14:03:25 +02:00
fi
2021-07-03 10:40:18 +02:00
2021-09-10 14:03:25 +02:00
SLASH_COUNT = $( echo " ${ SUBFOLDER } " | perl -lne 'END {print $c} map ++$c, /\//g' )
2021-07-03 10:40:18 +02:00
2021-09-10 14:03:25 +02:00
INCLUDE_PATH = '.'
2021-07-03 10:40:18 +02:00
2021-09-10 14:03:25 +02:00
for ( ( i = 1; i < SLASH_COUNT; i++) ) do
INCLUDE_PATH = " ../ $INCLUDE_PATH "
done
EXTEND_CLASS = ''
EXTEND_CLASS_FILE_NAME = ''
if [ [ " ${ ARG2 } " = ~ ^.*extends$ ] ] ;
then
EXTEND_CLASS = " ${ ARG3 } "
2021-10-01 09:42:40 +02:00
EXTEND_CLASS_FILE_NAME = " $( echo " r3 ${ EXTEND_CLASS } " | sed 's/\([A-Z]\)/-\1/g' | awk '{print tolower($0)}' | sed 's/r3\-r3\-/r3-/' | sed 's/r3\-r3/r3/' ) .js "
2021-06-28 09:05:53 +02:00
fi
2021-09-10 14:03:25 +02:00
if [ [ " ${ ARG2 } " = ~ ^.*base$ ] ] ||
[ " ${ ARG2 } " = "static" ] ;
then
if [ -n " ${ ARG3 } " ] ;
then
SUBFOLDER = " ${ ARG3 } "
fi
2021-06-28 09:05:53 +02:00
SLASH_COUNT = $( echo " ${ SUBFOLDER } " | perl -lne 'END {print $c} map ++$c, /\//g' )
for ( ( i = 1; i < SLASH_COUNT; i++) ) do
INCLUDE_PATH = " ../ $INCLUDE_PATH "
done
2021-06-20 20:47:15 +02:00
fi
2021-09-10 14:03:25 +02:00
R3_FOLDER = " ${ R3_FOLDER } ${ SUBFOLDER } "
2021-06-18 13:54:33 +02:00
2021-09-10 14:03:25 +02:00
if [ -z " ${ EXTEND_CLASS } " ] ;
then
echo " Creating ${ ARG2 } class ${ CLASS_NAME } based on template ${ TEMPLATE } and saving to ${ R3_FOLDER } ${ FILE_NAME } "
else
echo " Creating class ${ CLASS_NAME } based on template ${ TEMPLATE } extending ${ EXTEND_CLASS } and saving to ${ R3_FOLDER } ${ FILE_NAME } "
2021-07-01 17:16:23 +02:00
fi
2021-06-18 13:54:33 +02:00
cp " ${ TEMPLATE_FOLDER } ${ TEMPLATE } " " ${ R3_FOLDER } ${ FILE_NAME } "
2021-06-20 20:47:15 +02:00
if [ " ${ EXTEND_CLASS } " = "Event" ] ; then
perl -p -i -e 's/^const Event.*\n$//' " ${ R3_FOLDER } ${ FILE_NAME } "
fi
2021-10-02 06:36:12 +02:00
if [ " ${ EXTEND_CLASS } " = "Component" ] ; then
perl -p -i -e 's/^const EXTEND_CLASS.*\n$//' " ${ R3_FOLDER } ${ FILE_NAME } "
fi
2021-06-20 20:47:15 +02:00
if [ " ${ EXTEND_CLASS } " = "Utils" ] ; then
perl -p -i -e 's/^const Utils.*\n$//' " ${ R3_FOLDER } ${ FILE_NAME } "
fi
if [ " ${ CLASS_NAME } " = "Event" ] ; then
perl -p -i -e 's/^const Event.*\n$//' " ${ R3_FOLDER } ${ FILE_NAME } "
fi
2021-06-18 13:54:33 +02:00
2021-06-20 20:47:15 +02:00
if [ " ${ CLASS_NAME } " = "Utils" ] ; then
perl -p -i -e 's/^const Utils.*\n$//' " ${ R3_FOLDER } ${ FILE_NAME } "
fi
2021-06-28 09:05:53 +02:00
INCLUDE_PATH = $( echo " ${ INCLUDE_PATH } " | sed -E 's/([+,/,@])/\\\1/g' )
2021-06-20 20:47:15 +02:00
sed -i " s/CLASS_NAME/ ${ CLASS_NAME } /g " " ${ R3_FOLDER } ${ FILE_NAME } "
sed -i " s/EXTEND_CLASS_FILE_NAME/ ${ EXTEND_CLASS_FILE_NAME } /g " " ${ R3_FOLDER } ${ FILE_NAME } "
sed -i " s/EXTEND_CLASS/ ${ EXTEND_CLASS } /g " " ${ R3_FOLDER } ${ FILE_NAME } "
2021-06-28 09:05:53 +02:00
sed -i " s/INCLUDE_PATH/ ${ INCLUDE_PATH } /g " " ${ R3_FOLDER } ${ FILE_NAME } "
2021-06-20 20:47:15 +02:00
2021-06-18 13:54:33 +02:00
echo " Created class ${ R3_FOLDER } ${ FILE_NAME } "
2021-09-09 18:09:28 +02:00
store_history
if [ " ${ TASK } " = "create" ] ;
then
r3 update-templates " ${ FILE_NAME } " new " ${ ARG2 } "
fi
exit 1;
2021-06-20 20:47:15 +02:00
fi
if [ " ${ TASK } " = 'build-events' ] ;
then
2021-09-06 06:38:12 +02:00
echo "generating events"
2021-06-20 20:47:15 +02:00
2021-06-18 14:29:44 +02:00
cd " ${ R3_V2_LIB_PATH } " 2>& 1 || exit 3
2021-09-06 06:38:12 +02:00
./r3.php all generate-events
2021-06-18 14:29:44 +02:00
cd - 2>& 1 || exit 3
2021-09-09 18:09:28 +02:00
exit 1
2021-09-06 06:38:12 +02:00
2021-06-18 13:54:33 +02:00
fi
2021-06-28 09:05:53 +02:00
check_file_found( ) {
FILE = " $1 "
ORIG_FILE = $FILE
FILE = " ${ R3_FOLDER } ${ FILE } "
if [ ! -f " ${ FILE } " ] ; then
FILE = " ${ R3_SYSTEM_FOLDER } ${ ORIG_FILE } "
fi
2021-07-03 10:40:18 +02:00
if [ ! -f " ${ FILE } " ] ; then
FILE = " ${ R3_COMPONENT_FOLDER } ${ ORIG_FILE } "
2021-09-07 08:40:23 +02:00
fi
if [ ! -f " ${ FILE } " ] ; then
FILE = " ${ R3_RUNTIME_FOLDER } ${ ORIG_FILE } "
2021-07-03 10:40:18 +02:00
fi
2021-09-10 07:18:24 +02:00
if [ ! -f " ${ FILE } " ] ; then
FILE = " ${ R3_ENTITY_FOLDER } ${ ORIG_FILE } "
fi
2021-10-01 09:42:40 +02:00
if [ ! -f " ${ FILE } " ] ; then
FILE = " ${ R3_OBJECT_FOLDER } ${ ORIG_FILE } "
fi
2021-06-28 09:05:53 +02:00
if [ ! -f " ${ FILE } " ] ; then
exit 4
fi
}
2021-07-05 10:21:30 +02:00
if [ " ${ TASK } " = 'build-dist' ] ;
2021-07-01 11:26:36 +02:00
then
2021-09-06 06:38:12 +02:00
echo "building distribution"
2021-07-01 11:26:36 +02:00
cd " ${ R3_V2_LIB_PATH } " 2>& 1 || exit 3
# grep "$(grep "^class" src/r3/* -R | grep -v "extends" | grep -v "class R3 " | sed "s/.*class/class/" | sed "s/\s*{//" | perl -pe "s/\n/\\\|/" | sed "s/\\\|$/\\\)/" | sed "s/^/\\\(/")" src/r3/* -Rl | sort | sed "s/src\/r3/\./" | sed "s/\(.*r3-\)\(.*\).js/const \u\2 = require('\1\2.js');/" > base_classes.js
# grep -n "^class.*extends" src/r3/* -R | sed "s/src\/r3\(.*\).js.*class\s*\(.*\) extends \(.*\) {/R3.\3.\2 = require('.\1.js');/" | sed "s/R3Object/Object/"
2021-07-12 12:03:23 +02:00
./r3.php all build-dist
2021-07-01 11:26:36 +02:00
cd - 2>& 1 || exit 3
2021-09-09 18:09:28 +02:00
exit 1
2021-07-01 11:26:36 +02:00
fi
2021-06-20 20:47:15 +02:00
if [ " ${ TASK } " = 'update-templates' ] ;
then
echo "updating templates"
2021-07-03 10:40:18 +02:00
r3 update-token-db
2021-06-20 20:47:15 +02:00
cd " ${ R3_V2_LIB_PATH } " 2>& 1 || exit 3
2021-07-05 10:21:30 +02:00
# bump version
# shellcheck disable=SC2016
sed -i -E 's/([0-9]+\.[0-9]+\.)([0-9]+)/echo "\1$((\2+1))"/e' version
2021-06-28 09:05:53 +02:00
COMMANDS = $( grep "r3 create" .r3_history | sed "s/^.*r3 /r3 /" | sed "s/\s+/ /g" | sort --unique | perl -pe "s/\n/,/" | perl -pe "s/\s+,/,/g" | perl -pe " s/, $// " )
2021-10-01 09:42:40 +02:00
FILES = $( grep "r3 create" .r3_history | sed "s/^.*r3 /r3 /" | sed "s/\s+/ /g" | sort --unique | cut -d' ' -f3 | sed 's/\([A-Z]\)/-\1/g' | awk '{print tolower($0)}' | sed "s/^/r3/" | sed 's/r3\-r3\-/r3-/' | sed " s/ $/.js/ " | sed 's/r3\-r3\.js/r3.js/' )
2021-06-20 20:47:15 +02:00
IFS = ',' read -a commands <<< $COMMANDS
2021-06-28 09:05:53 +02:00
INDEX = -1
2021-06-20 20:47:15 +02:00
for FILE in ${ FILES } ; do
2021-06-28 09:05:53 +02:00
INDEX = $(( INDEX + 1 )) ;
ORIG_FILE = $FILE
2021-09-09 18:09:28 +02:00
PROCESS_ONLY_FILE = " ${ ARG1 } "
2021-06-28 09:05:53 +02:00
check_file_found " ${ ORIG_FILE } "
2021-09-09 18:09:28 +02:00
if [ -n " ${ PROCESS_ONLY_FILE } " ] && [ " ${ PROCESS_ONLY_FILE } " != " ${ ORIG_FILE } " ] ;
2021-06-20 20:47:15 +02:00
then
2021-06-28 09:05:53 +02:00
echo " skipping ${ ORIG_FILE } "
continue
else
COMMAND = " ${ commands [ $INDEX ] } " ;
2021-06-20 20:47:15 +02:00
2021-09-13 09:39:47 +02:00
# echo "File = ${FILE}";
# echo "Command = ${COMMAND}";
2021-06-20 20:47:15 +02:00
2021-06-29 10:57:45 +02:00
# set -o xtrace
2021-06-28 09:05:53 +02:00
2021-07-12 12:03:23 +02:00
./r3.php " ${ FILE } " save
2021-06-29 10:57:45 +02:00
RESULT = $?
2021-09-10 07:18:24 +02:00
if [ " ${ RESULT } " != 1 ] ;
2021-06-29 10:57:45 +02:00
then
exit 5
fi
2021-09-09 18:09:28 +02:00
if [ -n " ${ ARG2 } " ] && [ " ${ ARG2 } " = "new" ] ;
2021-06-29 10:57:45 +02:00
then
2021-09-09 18:09:28 +02:00
echo " This ${ FILE } is new and will be updated now "
else
echo " This ${ FILE } is an existing file and will be updated now "
# shellcheck disable=SC2001
COMMAND = $( echo " ${ COMMAND } " | sed 's/create/create-from-update-template/' )
2021-09-13 09:39:47 +02:00
# echo "New command is : ${COMMAND}"
2021-09-09 18:09:28 +02:00
$COMMAND
RESULT = $?
2021-09-10 07:18:24 +02:00
if [ " ${ RESULT } " != 1 ] ;
2021-09-09 18:09:28 +02:00
then
exit 5
fi
2021-06-29 10:57:45 +02:00
fi
2021-06-28 09:05:53 +02:00
2021-09-09 18:09:28 +02:00
./r3.php " ${ FILE } " restore " ' ${ COMMAND } ' "
2021-06-29 10:57:45 +02:00
RESULT = $?
2021-09-10 07:18:24 +02:00
if [ " ${ RESULT } " != 1 ] ;
2021-06-29 10:57:45 +02:00
then
exit 5
fi
2021-06-28 09:05:53 +02:00
fi
2021-06-20 20:47:15 +02:00
done
2021-09-06 06:38:12 +02:00
./r3.php all generate-events
2021-07-12 12:03:23 +02:00
./r3.php all build-dist
2021-07-01 17:16:23 +02:00
2021-06-20 20:47:15 +02:00
cd - 2>& 1 || exit 3
2021-09-09 18:09:28 +02:00
exit 1;
2021-06-20 20:47:15 +02:00
fi
2021-06-28 09:05:53 +02:00
if [ " ${ TASK } " = 'update-options' ] ;
2021-06-20 20:47:15 +02:00
then
echo "updating options"
cd " ${ R3_V2_LIB_PATH } " 2>& 1 || exit 3
2021-06-28 09:05:53 +02:00
if [ -n " ${ ARG1 } " ] ;
then
check_file_found " ${ ARG1 } "
2021-07-12 12:03:23 +02:00
./r3.php " ${ FILE } " update-options
2021-06-28 09:05:53 +02:00
else
2021-09-07 07:58:43 +02:00
2021-07-12 12:03:23 +02:00
./r3.php all update-options
2021-09-07 07:58:43 +02:00
2021-06-28 09:05:53 +02:00
fi
cd - 2>& 1 || exit 3
2021-09-09 18:09:28 +02:00
exit 1;
2021-06-28 09:05:53 +02:00
fi
if [ " ${ TASK } " = 'update-methods' ] ;
then
echo "updating methods"
cd " ${ R3_V2_LIB_PATH } " 2>& 1 || exit 3
if [ -n " ${ ARG1 } " ] ;
then
check_file_found " ${ ARG1 } "
2021-07-12 12:03:23 +02:00
./r3.php " ${ FILE } " install-methods
2021-06-28 09:05:53 +02:00
else
2021-07-12 12:03:23 +02:00
./r3.php all install-methods
2021-06-28 09:05:53 +02:00
fi
2021-06-20 20:47:15 +02:00
cd - 2>& 1 || exit 3
2021-09-09 18:09:28 +02:00
exit 1;
2021-06-28 09:05:53 +02:00
2021-06-20 20:47:15 +02:00
fi
2021-06-18 13:54:33 +02:00
# shellcheck disable=SC2086
docker-compose $TASK $ARG1 $ARG2 $ARG3 $ARG4 $ARG5