Last active
October 14, 2019 19:28
-
-
Save yaredc/fed40c0e9ea2c2c360354427a63d5bb7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
set -e | |
########################################################### | |
#DEFINE ALL GLOBAL INDEPENDENT HELPER FUNCTIONS | |
########################################################### | |
l() { | |
LEVEL="INFO" | |
if [ -n "$2" ]; then | |
LEVEL="$2" | |
fi | |
LEVEL="$(echo "$LEVEL" | tr [a-z] [A-Z])" | |
echo "[$(date +"%Y-%m-%d %H:%M:%S")] [$LEVEL] $1" | |
} | |
task_dispatch_with_arguments() { | |
if [ "$#" = 1 ] && [ "$1" != "dispatch_with_arguments" ]; then | |
l "Trying to run task \"task_$1\"..." | |
"task_$1" | |
return | |
fi | |
REQUESTED_TASK="$1" | |
shift | |
if [ -n "$1" ] && [ "$1" != "dispatch_with_arguments" ]; then | |
l "Trying to run task \"task_$REQUESTED_TASK\"..." | |
"task_$REQUESTED_TASK" "$@" | |
fi | |
} | |
########################################################### | |
#DEFINE ALL NEEDED VARS, SHOW SOME INFO | |
########################################################### | |
ENVIRONMENT="development" | |
DIR_ROOT="$(pwd)" | |
DIR_CONFIG="$DIR_ROOT"/.config/"$ENVIRONMENT" | |
TIMESTAMP="$(date +%s)" | |
TIMESTAMP_NICE=$(date +"%Y-%m-%d %H:%M:%S") | |
DIR_DIST="$DIR_ROOT/dist" | |
TAR_DIST="$DIR_ROOT/dist.$ENVIRONMENT.$TIMESTAMP.tar.gz" | |
DIR_DOCROOT="/var/www/docroot" | |
DIR_DEPLOY_ROOT="/var/deploy" | |
DIR_DEPLOY="$DIR_DEPLOY_ROOT/$TIMESTAMP" | |
GITHUB_TOKEN="TOKEN" | |
DOCROOT="/var/www/html" | |
l "Environment is set to \"$ENVIRONMENT\"" | |
l "Root directory is set to \"$DIR_ROOT\"" | |
if [ ! -d "$DIR_CONFIG" ]; then | |
l "$DIR_CONFIG does not exist." "ERROR" | |
return | |
fi | |
########################################################### | |
#DEFINE ALL TASKS | |
########################################################### | |
task_build() { | |
BUILD_NECESSARY=0 | |
FILE_LIMIT="$DIR_ROOT/.build" | |
touch -d "-5 minutes" "$FILE_LIMIT" | |
for FILE in "$DIR_ROOT"/.docker/*; do | |
if [ "$FILE" -nt "$FILE_LIMIT" ]; then | |
BUILD_NECESSARY=1 | |
fi | |
done | |
rm -f "$FILE_LIMIT" | |
if [ -z "$(docker image ls -q app/nginx:production)" ]; then | |
BUILD_NECESSARY=1 | |
fi | |
if [ -z "$(docker image ls -q app/php:production)" ]; then | |
BUILD_NECESSARY=1 | |
fi | |
if [ -z "$(docker image ls -q app/node:production)" ]; then | |
BUILD_NECESSARY=1 | |
fi | |
if [ -z "$(docker image ls -q app/php:development)" ]; then | |
BUILD_NECESSARY=1 | |
fi | |
if [ "$BUILD_NECESSARY" = 1 ]; then | |
docker build -t "app/nginx:production" -f ".docker/nginx.production.dockerfile" . | |
docker build -t "app/php:production" -f ".docker/php.production.dockerfile" . | |
docker build -t "app/node:production" -f ".docker/node.production.dockerfile" . | |
docker build -t "app/php:development" -f ".docker/php.development.dockerfile" . | |
else | |
l "Build is not necessary." | |
fi | |
} | |
task_up() { | |
if [ -z "$(docker-compose ps -q)" ]; then | |
docker-compose up -d | |
docker-compose exec php composer config --global github-oauth.github.com "$GITHUB_TOKEN" | |
else | |
l "docker-compose daemon is already running." | |
fi | |
} | |
task_restart() { | |
if [ -n "$(docker-compose ps -q)" ]; then | |
docker-compose restart | |
else | |
l "docker-compose daemon is down." | |
fi | |
} | |
task_down() { | |
if [ -n "$(docker-compose ps -q)" ]; then | |
docker-compose down | |
else | |
l "docker-compose daemon is down." | |
fi | |
} | |
task_install() { | |
task_up | |
docker-compose exec php composer --no-interaction validate | |
docker-compose run node npm install | |
if [ "$ENVIRONMENT" = "development" ]; then | |
docker-compose exec php composer --no-interaction install | |
docker-compose run node npm run build:dev | |
else | |
docker-compose exec php composer --no-suggest --no-dev --classmap-authoritative --optimize-autoloader --no-interaction install | |
docker-compose run node npm run build:prod | |
fi | |
cp -rf "$DIR_CONFIG"/* "$DIR_ROOT" | |
} | |
task_update() { | |
task_up | |
docker-compose run node npm update | |
if [ "$ENVIRONMENT" = "development" ]; then | |
docker-compose exec php composer --no-interaction update | |
docker-compose run node npm run build:dev | |
else | |
docker-compose exec php composer --no-suggest --no-dev --classmap-authoritative --optimize-autoloader --no-interaction update | |
docker-compose run node npm run build:prod | |
fi | |
cp -rf "$DIR_CONFIG"/* "$DIR_ROOT" | |
} | |
task_uninstall() { | |
task_up | |
docker-compose exec php rm -rf ./vendor | |
docker-compose run node rm -rf ./node_modules | |
} | |
task_clean() { | |
task_up | |
docker-compose exec php rm -rf ./data | |
docker-compose exec php mkdir -p ./data/cache | |
find "$DIR_ROOT" -maxdepth 1 -name "dist*tar.gz" -type f -delete | |
rm -rf "$DIR_DIST" | |
} | |
task_tar() { | |
task_install | |
task_clean | |
rm -rf "$DIR_DIST" | |
mkdir -p "$DIR_DIST" | |
rsync -az --exclude-from ".buildignore" -- "$DIR_ROOT/" "$DIR_DIST" | |
tar -C "$DIR_DIST" -zcf "$TAR_DIST" . | |
rm -rf "$DIR_DIST" | |
} | |
task_deploy() { | |
task_install | |
task_clean | |
mkdir -p "$DIR_DEPLOY" | |
rsync -az --exclude-from ".buildignore" -- "$DIR_ROOT/" "$DIR_DEPLOY" | |
if [ -e "$DIR_DOCROOT" ]; then | |
rm -f "$DIR_DOCROOT" | |
fi | |
ln -sf "$DIR_DEPLOY" "$DIR_DOCROOT" | |
l "\"$DIR_DOCROOT\" now symlinks to \"$DIR_DEPLOY\"" | |
} | |
task_slim() { | |
FOUND_PATHS=$(ls -1drtA "$DIR_DEPLOY_ROOT"/*) | |
COUNT=$(echo "$FOUND_PATHS" | wc -l) | |
l "Total $COUNT paths found." | |
LIMIT=$((COUNT - 3)) | |
if [ "$LIMIT" -lt 1 ]; then | |
l "Nothing to remove." | |
return | |
fi | |
INDEX=0 | |
for FOUND_PATH in $FOUND_PATHS; do | |
if [ "$INDEX" = "$LIMIT" ]; then | |
break | |
fi | |
l "Removing \"$FOUND_PATH\"..." | |
if [ -d "$FOUND_PATH" ]; then | |
rm -rf "$FOUND_PATH" | |
else | |
rm -f "$FOUND_PATH" | |
fi | |
INDEX=$((INDEX + 1)) | |
done | |
} | |
########################################################### | |
#DISPATCH REQUESTED TASK | |
########################################################### | |
if [ $# -eq 0 ] || [ "$1" = "help" ]; then | |
l "No task requested. Available tasks are: build up down install update uninstall clean tar deploy slim" | |
l "Usage example: sh run.sh build" | |
exit 0 | |
fi | |
task_dispatch_with_arguments "$@" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment