408 lines
9.6 KiB
Bash
Executable File
408 lines
9.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
PATCH=0
|
|
|
|
usage() {
|
|
echo "Usage : r3 <task> <container>"
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
cleanup() {
|
|
|
|
LAST_ERROR=$?
|
|
|
|
if [ "${LAST_ERROR}" = 0 ] ;
|
|
then
|
|
usage
|
|
fi
|
|
|
|
if [ "${LAST_ERROR}" = 1 ] ;
|
|
then
|
|
echo "exited normally"
|
|
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
|
|
|
|
if [ "${LAST_ERROR}" = 3 ] ;
|
|
then
|
|
echo "You do not appear to have a proper lib path - did you clone the project correctly?"
|
|
fi
|
|
|
|
if [ "${LAST_ERROR}" = 4 ] ;
|
|
then
|
|
echo "File not found : ${FILE}"
|
|
fi
|
|
|
|
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
|
|
|
|
|
|
cd "${CWD}" 2>&1 || exit
|
|
}
|
|
|
|
echo ' _____ __ ';
|
|
echo ' ____|__ / _____ / /_ ';
|
|
echo ' / ___//_ < / ___// __ \';
|
|
echo ' / / ___/ /_ (__ )/ / / /';
|
|
echo '/_/ /____/(_)/____//_/ /_/ ';
|
|
echo '';
|
|
|
|
R3_INSTALL_PATH=/usr/share/cybafelo/r3/r3-cloud
|
|
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/"
|
|
R3_SYSTEM_FOLDER="${R3_V2_SRC_PATH}/r3/r3-system/"
|
|
R3_COMPONENT_FOLDER="${R3_V2_SRC_PATH}/r3/r3-component/"
|
|
R3_RUNTIME_FOLDER="${R3_V2_SRC_PATH}/r3/r3-runtime/"
|
|
R3_OBJECT_FOLDER="${R3_V2_SRC_PATH}/r3/r3-object/"
|
|
R3_ENTITY_FOLDER="${R3_V2_SRC_PATH}/r3/r3-entity/"
|
|
TEMPLATE_FOLDER="${R3_V2_SRC_PATH}/templates/"
|
|
|
|
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
|
|
|
|
#ENV_FILE='.env'
|
|
#
|
|
#export $(egrep -v '^#' "${ENV_FILE}" | xargs)
|
|
#
|
|
#echo "${API_URL}";
|
|
|
|
if [ "${TASK}" = 'update-token-db' ];
|
|
then
|
|
echo "updating token.db"
|
|
grep "\bGENERATED_[A-Z_]*\b" "${R3_V2_SRC_PATH}"/* -R | sed "s/^.*GENERATED_/GENERATED_/" | sed "s/\(_START\|_END\)$//" | sort --unique > "${TEMPLATE_FOLDER}"token.db
|
|
grep "\bCUSTOM_[A-Z_]*\b" "${R3_V2_SRC_PATH}"/* -R | sed "s/^.*CUSTOM_/CUSTOM_/" | sed "s/\(_START\|_END\)$//" | sort --unique >> "${TEMPLATE_FOLDER}"token.db
|
|
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;
|
|
fi
|
|
|
|
if [ "${TASK}" = 'create' ] || [ "${TASK}" = 'create-from-update-template' ];
|
|
then
|
|
|
|
CLASS_NAME=$ARG1
|
|
TEMPLATE="${ARG2}.template"
|
|
|
|
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"
|
|
|
|
SUBFOLDER='./'
|
|
if [ -n "${ARG4}" ];
|
|
then
|
|
SUBFOLDER="${ARG4}"
|
|
fi
|
|
|
|
SLASH_COUNT=$(echo "${SUBFOLDER}" | perl -lne 'END {print $c} map ++$c, /\//g')
|
|
|
|
INCLUDE_PATH='.'
|
|
|
|
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}"
|
|
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"
|
|
fi
|
|
|
|
if [[ "${ARG2}" =~ ^.*base$ ]] ||
|
|
[ "${ARG2}" = "static" ];
|
|
then
|
|
|
|
if [ -n "${ARG3}" ];
|
|
then
|
|
SUBFOLDER="${ARG3}"
|
|
fi
|
|
|
|
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
|
|
|
|
fi
|
|
|
|
R3_FOLDER="${R3_FOLDER}${SUBFOLDER}"
|
|
|
|
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}"
|
|
fi
|
|
|
|
cp "${TEMPLATE_FOLDER}${TEMPLATE}" "${R3_FOLDER}${FILE_NAME}"
|
|
|
|
if [ "${EXTEND_CLASS}" = "Event" ]; then
|
|
perl -p -i -e 's/^const Event.*\n$//' "${R3_FOLDER}${FILE_NAME}"
|
|
fi
|
|
|
|
if [ "${EXTEND_CLASS}" = "Component" ]; then
|
|
perl -p -i -e 's/^const EXTEND_CLASS.*\n$//' "${R3_FOLDER}${FILE_NAME}"
|
|
fi
|
|
|
|
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
|
|
|
|
if [ "${CLASS_NAME}" = "Utils" ]; then
|
|
perl -p -i -e 's/^const Utils.*\n$//' "${R3_FOLDER}${FILE_NAME}"
|
|
fi
|
|
|
|
INCLUDE_PATH=$(echo "${INCLUDE_PATH}" | sed -E 's/([+,/,@])/\\\1/g')
|
|
|
|
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}"
|
|
sed -i "s/INCLUDE_PATH/${INCLUDE_PATH}/g" "${R3_FOLDER}${FILE_NAME}"
|
|
|
|
echo "Created class ${R3_FOLDER}${FILE_NAME}"
|
|
|
|
store_history
|
|
|
|
if [ "${TASK}" = "create" ];
|
|
then
|
|
r3 update-templates "${FILE_NAME}" new "${ARG2}"
|
|
fi
|
|
|
|
exit 1;
|
|
fi
|
|
|
|
if [ "${TASK}" = 'build-events' ];
|
|
then
|
|
|
|
echo "generating events"
|
|
|
|
cd "${R3_V2_LIB_PATH}" 2>&1 || exit 3
|
|
|
|
./r3.php all generate-events
|
|
|
|
cd - 2>&1 || exit 3
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
check_file_found() {
|
|
|
|
FILE="$1"
|
|
|
|
ORIG_FILE=$FILE
|
|
|
|
FILE="${R3_FOLDER}${FILE}"
|
|
|
|
if [ ! -f "${FILE}" ]; then
|
|
FILE="${R3_SYSTEM_FOLDER}${ORIG_FILE}"
|
|
fi
|
|
|
|
if [ ! -f "${FILE}" ]; then
|
|
FILE="${R3_COMPONENT_FOLDER}${ORIG_FILE}"
|
|
fi
|
|
|
|
if [ ! -f "${FILE}" ]; then
|
|
FILE="${R3_RUNTIME_FOLDER}${ORIG_FILE}"
|
|
fi
|
|
|
|
if [ ! -f "${FILE}" ]; then
|
|
FILE="${R3_ENTITY_FOLDER}${ORIG_FILE}"
|
|
fi
|
|
|
|
if [ ! -f "${FILE}" ]; then
|
|
FILE="${R3_OBJECT_FOLDER}${ORIG_FILE}"
|
|
fi
|
|
|
|
if [ ! -f "${FILE}" ]; then
|
|
exit 4
|
|
fi
|
|
|
|
}
|
|
|
|
if [ "${TASK}" = 'build-dist' ];
|
|
then
|
|
|
|
echo "building distribution"
|
|
|
|
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/"
|
|
|
|
./r3.php all build-dist
|
|
|
|
cd - 2>&1 || exit 3
|
|
|
|
exit 1
|
|
fi
|
|
|
|
if [ "${TASK}" = 'update-templates' ];
|
|
then
|
|
|
|
echo "updating templates"
|
|
|
|
r3 update-token-db
|
|
|
|
cd "${R3_V2_LIB_PATH}" 2>&1 || exit 3
|
|
|
|
# bump version
|
|
# shellcheck disable=SC2016
|
|
sed -i -E 's/([0-9]+\.[0-9]+\.)([0-9]+)/echo "\1$((\2+1))"/e' version
|
|
|
|
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/,$//")
|
|
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/')
|
|
|
|
IFS=',' read -a commands <<< $COMMANDS
|
|
|
|
INDEX=-1
|
|
|
|
for FILE in ${FILES}; do
|
|
|
|
INDEX=$((INDEX + 1));
|
|
|
|
ORIG_FILE=$FILE
|
|
|
|
PROCESS_ONLY_FILE="${ARG1}"
|
|
|
|
check_file_found "${ORIG_FILE}"
|
|
|
|
if [ -n "${PROCESS_ONLY_FILE}" ] && [ "${PROCESS_ONLY_FILE}" != "${ORIG_FILE}" ];
|
|
then
|
|
echo "skipping ${ORIG_FILE}"
|
|
continue
|
|
else
|
|
|
|
COMMAND="${commands[$INDEX]}";
|
|
|
|
# echo "File = ${FILE}";
|
|
# echo "Command = ${COMMAND}";
|
|
|
|
# set -o xtrace
|
|
|
|
./r3.php "${FILE}" save
|
|
RESULT=$?
|
|
if [ "${RESULT}" != 1 ];
|
|
then
|
|
exit 5
|
|
fi
|
|
|
|
if [ -n "${ARG2}" ] && [ "${ARG2}" = "new" ];
|
|
then
|
|
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/')
|
|
# echo "New command is : ${COMMAND}"
|
|
$COMMAND
|
|
RESULT=$?
|
|
if [ "${RESULT}" != 1 ];
|
|
then
|
|
exit 5
|
|
fi
|
|
fi
|
|
|
|
./r3.php "${FILE}" restore "'${COMMAND}'"
|
|
|
|
RESULT=$?
|
|
if [ "${RESULT}" != 1 ];
|
|
then
|
|
exit 5
|
|
fi
|
|
fi
|
|
|
|
done
|
|
|
|
./r3.php all generate-events
|
|
|
|
./r3.php all build-dist
|
|
|
|
cd - 2>&1 || exit 3
|
|
|
|
exit 1;
|
|
fi
|
|
|
|
if [ "${TASK}" = 'update-options' ];
|
|
then
|
|
|
|
echo "updating options"
|
|
|
|
cd "${R3_V2_LIB_PATH}" 2>&1 || exit 3
|
|
|
|
if [ -n "${ARG1}" ] ;
|
|
then
|
|
|
|
check_file_found "${ARG1}"
|
|
|
|
./r3.php "${FILE}" update-options
|
|
|
|
else
|
|
|
|
./r3.php all update-options
|
|
|
|
fi
|
|
|
|
cd - 2>&1 || exit 3
|
|
|
|
exit 1;
|
|
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}"
|
|
|
|
./r3.php "${FILE}" install-methods
|
|
|
|
else
|
|
./r3.php all install-methods
|
|
fi
|
|
|
|
cd - 2>&1 || exit 3
|
|
|
|
exit 1;
|
|
|
|
fi
|
|
|
|
# shellcheck disable=SC2086
|
|
docker-compose $TASK $ARG1 $ARG2 $ARG3 $ARG4 $ARG5 |