Files
apostol-dm/deploy
Преподобный Ален 7cc9c94ce2 Committing updates.
2023-11-08 22:45:11 +03:00

161 lines
3.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
PROJECT_NAME=dm
BUILD_TYPE=Release
INSTALL_PATH=/usr/sbin
pop_directory()
{
popd >/dev/null
}
push_directory()
{
local DIRECTORY="$1"
pushd "$DIRECTORY" >/dev/null
}
display_heading_message()
{
echo
echo "********************** $@ **********************"
echo
}
display_message()
{
echo "$@"
}
display_error()
{
>&2 echo "$@"
}
display_help()
{
display_message "Usage: ./deploy [OPTION]..."
display_message "Manage the configure."
display_message "Script options:"
display_message " --help Display usage, overriding script execution."
display_message " --install Install $PROJECT_NAME (run as root)."
display_message " --update Update $PROJECT_NAME (run as root)."
display_message " --release Release build (default)."
display_message " --debug Debug build."
display_message " --build-dir=<path> Location of build files (default: $BUILD_DIR)."
display_message ""
}
display_configuration()
{
display_message "Configuration."
display_message "--------------------------------------------------------------------"
display_message "PROJECT_NAME : $PROJECT_NAME"
display_message "BUILD_TYPE : $BUILD_TYPE"
display_message "BUILD_DIR : $BUILD_DIR"
display_message "--------------------------------------------------------------------"
}
install_project()
{
push_directory "$BUILD_DIR"
display_heading_message "Install: $PROJECT_NAME"
make install
pop_directory
}
make_project()
{
push_directory "$BUILD_DIR"
display_heading_message "Make: $PROJECT_NAME"
make
pop_directory
}
update_project()
{
display_heading_message "Update $PROJECT_NAME"
if [[ -f /usr/bin/systemctl ]]; then
display_heading_message "stop service $PROJECT_NAME"
systemctl stop $PROJECT_NAME.service
fi
display_heading_message "copy $PROJECT_NAME to /usr/bin"
push_directory "$BUILD_DIR"
rm -rf /usr/sbin/$PROJECT_NAME
cp $PROJECT_NAME /usr/sbin
pop_directory
if [[ -d /etc/$PROJECT_NAME/logs ]]; then
display_heading_message "clear log files..."
rm -rf /etc/$PROJECT_NAME/logs/*.log
fi
if [[ -d /var/log/$PROJECT_NAME ]]; then
display_heading_message "clear log files..."
rm -rf /var/log/$PROJECT_NAME/*.log
fi
if [[ -f /usr/bin/systemctl ]]; then
display_heading_message "start service $PROJECT_NAME"
systemctl start ${PROJECT_NAME}.service
fi
}
# Parse command line options that are handled by this script.
#------------------------------------------------------------------------------
for OPTION in "$@"; do
case $OPTION in
# Standard script options.
(--help) DISPLAY_HELP="yes";;
(--install) MAKE_INSTALL="yes";;
(--update) BUILD_UPDATE="yes";;
(--release) BUILD_TYPE="Release";;
(--debug) BUILD_TYPE="Debug";;
# Unique script options.
(--build-dir=*) BUILD_DIR="${OPTION#*=}";;
esac
done
if ! [[ $BUILD_DIR ]]; then
if [[ $BUILD_TYPE == Debug ]]; then
BUILD_DIR=cmake-build-debug
else
BUILD_DIR=cmake-build-release
fi
fi
# Configure.
#==============================================================================
if [[ $DISPLAY_HELP ]]; then
display_help
else
display_configuration
if ! [[ $BUILD_UPDATE ]]; then
if [[ $MAKE_INSTALL ]]; then
install_project
else
make_project
fi
fi
update_project
fi