177 lines
5.0 KiB
Bash
177 lines
5.0 KiB
Bash
#!/bin/bash
|
|
|
|
cd "$(dirname "$0")/../../" || { echo "Failed to enter base dir"; exit 1; }
|
|
source ./scripts/travis/properties.sh
|
|
|
|
build_verbose=0
|
|
build_release=1
|
|
build_debug=0
|
|
|
|
function print_help() {
|
|
echo "Possible arguments:"
|
|
echo " --verbose=[yes|no] | Enable verbose build output (Default: $build_verbose)"
|
|
echo " --enable-release=[yes|no] | Enable release build (Default: $build_release)"
|
|
echo " --enable-debug=[yes|no] | Enable debug build (Default: $build_debug)"
|
|
}
|
|
|
|
function parse_arguments() {
|
|
# Preprocess the help parameter
|
|
for argument in "$@"; do
|
|
if [[ "$argument" = "--help" ]] || [[ "$argument" = "-h" ]]; then
|
|
print_help
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
shopt -s nocasematch
|
|
for argument in "$@"; do
|
|
echo "Argument: $argument"
|
|
if [[ "$argument" =~ ^--verbose(=(y|1)?[[:alnum:]]*$)?$ ]]; then
|
|
build_verbose=0
|
|
if [[ -z "${BASH_REMATCH[1]}" ]] || [[ -n "${BASH_REMATCH[2]}" ]]; then
|
|
build_verbose=1
|
|
fi
|
|
|
|
if [[ ${build_verbose} ]]; then
|
|
echo "Enabled verbose output"
|
|
fi
|
|
elif [[ "$argument" =~ ^--enable-release(=(y|1)?[[:alnum:]]*$)?$ ]]; then
|
|
build_release=0
|
|
if [[ -z "${BASH_REMATCH[1]}" ]] || [[ -n "${BASH_REMATCH[2]}" ]]; then
|
|
build_release=1
|
|
fi
|
|
|
|
if [[ ${build_release} ]]; then
|
|
echo "Enabled release build!"
|
|
fi
|
|
elif [[ "$argument" =~ ^--enable-debug(=(y|1)?[[:alnum:]]*$)?$ ]]; then
|
|
build_debug=0
|
|
if [[ -z "${BASH_REMATCH[1]}" ]] || [[ -n "${BASH_REMATCH[2]}" ]]; then
|
|
build_debug=1
|
|
fi
|
|
|
|
if [[ ${build_debug} ]]; then
|
|
echo "Enabled debug build!"
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
function execute() {
|
|
time_begin=$(date +%s%N)
|
|
|
|
echo "> Executing step: $1" >> "${LOG_FILE}"
|
|
echo -e "\e[32m> Executing step: $1\e[0m"
|
|
#Execute the command
|
|
for command in "${@:3}"; do
|
|
echo "$> $command" >> "${LOG_FILE}"
|
|
if [[ ${build_verbose} -gt 0 ]]; then
|
|
echo "$> $command"
|
|
fi
|
|
|
|
error=""
|
|
if [[ ${build_verbose} -gt 0 ]]; then
|
|
if [[ -f ${LOG_FILE}.tmp ]]; then
|
|
rm "${LOG_FILE}.tmp"
|
|
fi
|
|
${command} |& tee "${LOG_FILE}.tmp" | grep -E '^[^(/\S*/libstdc++.so\S*: no version information available)].*'
|
|
|
|
error_code=${PIPESTATUS[0]}
|
|
error=$(cat "${LOG_FILE}.tmp")
|
|
cat "${LOG_FILE}.tmp" >> "${LOG_FILE}"
|
|
rm "${LOG_FILE}.tmp"
|
|
else
|
|
error=$(${command} 2>&1)
|
|
error_code=$?
|
|
echo "$error" >> "${LOG_FILE}"
|
|
fi
|
|
|
|
|
|
if [[ ${error_code} -ne 0 ]]; then
|
|
break
|
|
fi
|
|
done
|
|
|
|
#Log the result
|
|
time_end=$(date +%s%N)
|
|
time_needed=$((time_end - time_begin))
|
|
time_needed_ms=$((time_needed / 1000000))
|
|
step_color="\e[32m"
|
|
[[ ${error_code} -ne 0 ]] && step_color="\e[31m"
|
|
echo "$step_color> Step took ${time_needed_ms}ms" >> ${LOG_FILE}
|
|
echo -e "$step_color> Step took ${time_needed_ms}ms\e[0m"
|
|
|
|
if [[ ${error_code} -ne 0 ]]; then
|
|
handle_failure ${error_code} "$2"
|
|
fi
|
|
|
|
error=""
|
|
}
|
|
|
|
function handle_failure() {
|
|
# We cut of the nasty "node: /usr/lib/libstdc++.so.6: no version information available (required by node)" message
|
|
echo "--------------------------- [ERROR] ---------------------------"
|
|
echo "We've encountered an fatal error, which isn't recoverable!"
|
|
echo " Aborting build process!"
|
|
echo ""
|
|
echo "Exit code : $1"
|
|
echo "Error message: ${*:2}"
|
|
if [[ ${build_verbose} -eq 0 ]] && [[ "$error" != "" ]]; then
|
|
echo "Command log : (lookup \"${LOG_FILE}\" for detailed output!)"
|
|
echo "$error"
|
|
fi
|
|
echo "--------------------------- [ERROR] ---------------------------"
|
|
exit 1
|
|
}
|
|
|
|
cd "$(dirname "$0")/../../" || { echo "Failed to enter base dir"; exit 1; }
|
|
error=""
|
|
|
|
LOG_FILE="$(pwd)/$LOG_FILE"
|
|
if [[ ! -d $(dirname "${LOG_FILE}") ]]; then
|
|
mkdir -p "$(dirname "${LOG_FILE}")"
|
|
fi
|
|
|
|
if [[ $# -eq 0 ]]; then
|
|
echo "Executing build scripts with no arguments"
|
|
else
|
|
echo "Executing build scripts with arguments: $* ($#)"
|
|
fi
|
|
if [[ "$1" == "bash" ]]; then
|
|
bash
|
|
exit 0
|
|
fi
|
|
|
|
parse_arguments "${@:1}"
|
|
|
|
if [[ -e "$LOG_FILE" ]]; then
|
|
rm "$LOG_FILE"
|
|
fi
|
|
|
|
echo "---------- Setup ----------"
|
|
chmod +x ./scripts/install_dependencies.sh
|
|
source ./scripts/install_dependencies.sh
|
|
|
|
echo "---------- Web client ----------"
|
|
|
|
function execute_build_release() {
|
|
execute \
|
|
"Building release package" \
|
|
"Failed to build release" \
|
|
"./scripts/build.sh web release"
|
|
}
|
|
function execute_build_debug() {
|
|
execute \
|
|
"Building debug package" \
|
|
"Failed to build debug" \
|
|
"./scripts/build.sh web dev"
|
|
}
|
|
|
|
chmod +x ./scripts/build.sh
|
|
if [[ ${build_release} ]]; then
|
|
execute_build_release
|
|
fi
|
|
if [[ ${build_debug} ]]; then
|
|
execute_build_debug
|
|
fi
|
|
exit 0 |