Files
2022-10-01 20:03:35 +02:00

220 lines
5.2 KiB
Bash
Executable File

#!/bin/bash
######
# This script builds the docker image locally
# It expects docker to be logged in to ECR (see aws-login)
set -e
VERBOSE=0
DIR=`dirname $(realpath "${BASH_SOURCE[0]}")`
OLDDIR=`pwd`
cd "$DIR"
source "$DIR/../config"
source "$DIR/libs.sh"
usage() {
echo "Usage: $0 [-h] [-v] [-t: version] [action(s), see below]" 1>&2;
echo "This script builds framework docker images, the following options are available:" 1>&2;
echo " -h: This message" 1>&2;
echo " Actions" 1>&2;
echo " -u: Unit tests locally" 1>&2;
echo " -d: Run debug vesion locally" 1>&2;
echo " -p: Publish (requires a version)" 1>&2;
echo " -X: Staging Deploy (requires a version)" 1>&2;
echo " -x: Production Deploy (requires a version)" 1>&2;
echo " Tagging, docker images (default: local)" 1>&2;
echo " -t: Manual tag" 1>&2;
echo " -T: Autotag patch/release" 1>&2;
echo " -m: Autotag minor" 1>&2;
echo " -M: Autotag major" 1>&2;
echo " -P: Pre-release" 1>&2;
echo " -v: Verbose" 1>&2;
exit 1;
}
UNIT_MODE=0
DEBUG_MODE=0
PUBLISH_MODE=0
DEPLOY_TEST_MODE=0
DEPLOY_PROD_MODE=0
SELECTED_MODES=0
TAG_IMPLICIT=1
TAG="local"
TAG_OPTS=""
AUTOTAG=0
while getopts "t:TmMPhvudpxX" o; do
case "${o}" in
u)
UNIT_MODE=1
SELECTED_MODES+=1
;;
d)
DEBUG_MODE=1
SELECTED_MODES+=1
;;
p)
PUBLISH_MODE=1
SELECTED_MODES+=1
;;
X)
DEPLOY_TEST_MODE=1
SELECTED_MODES+=1
;;
x)
DEPLOY_PROD_MODE=1
SELECTED_MODES+=1
;;
t)
TAG=${OPTARG}
TAG_IMPLICIT=0
;;
T)
TAG_OPTS="${TAG_OPTS}r"
TAG_IMPLICIT=0
AUTOTAG=1
;;
m)
TAG_OPTS="${TAG_OPTS}m"
TAG_IMPLICIT=0
AUTOTAG=1
;;
M)
TAG_OPTS="${TAG_OPTS}M"
TAG_IMPLICIT=0
AUTOTAG=1
;;
P)
TAG_OPTS="${TAG_OPTS}p"
TAG_IMPLICIT=0
AUTOTAG=1
;;
v)
VERBOSE=1
;;
h)
usage
;;
*)
printerr "Unsupported option ${o}"
usage
;;
esac
done
if [[ $SELECTED_MODES -eq 0 ]]; then
printerr "No mode selected"
usage
fi
if [[ $SELECTED_MODES -ne 1 ]]; then
printerr "Select only one mode"
usage
fi
./aws-login.sh
if [[ $UNIT_MODE -eq 1 ]]; then
BUILDOPT+="u"
UNITOPT=""
if [[ $VERBOSE -gt 0 ]]; then
BUILDOPT+="v"
UNITOPT="-v"
fi
msg "running ./build.sh -I webserver -$BUILDOPT -t \"$TAG-webserver\""
./build.sh -I webserver -$BUILDOPT -t "$TAG-webserver"
msg "running ./build.sh -I worker -$BUILDOPT -t \"$TAG-worker\""
./build.sh -I worker -$BUILDOPT -t "$TAG-worker"
./run-unit.sh $UNITOPT -t $TAG-webserver
./run-unit.sh $UNITOPT -t $TAG-worker
fi
if [[ $PUBLISH_MODE -eq 1 ]]; then
if [[ $AUTOTAG -eq 1 ]]; then
TAG=`./next-ver.sh -${TAG_OPTS}`
echo "Using tag $TAG"
fi
BUILDOPT+="bu"
VERBOPT=""
if [[ $VERBOSE -gt 0 ]]; then
BUILDOPT+="v"
VERBOPT="-v"
fi
# WEBSERVER
msg "running ./build.sh -I webserver -$BUILDOPT -t $TAG-webserver"
./build.sh -I webserver -$BUILDOPT -t "$TAG-webserver"
./run-unit.sh $VERBOPT -t "$TAG-webserver"
./publish.sh $VERBOPT -t "$TAG-webserver"
# WORKER
msg "running ./build.sh -I worker -$BUILDOPT -t $TAG-worker"
./build.sh -I worker -$BUILDOPT -t "$TAG-worker"
./run-unit.sh $VERBOPT -t "$TAG-worker"
./publish.sh $VERBOPT -t "$TAG-worker"
if [[ $TAG_IMPLICIT -ne 1 ]]; then
git tag $TAG
git push --tags
fi
fi
if [[ $DEBUG_MODE -eq 1 ]]; then
BUILDOPT+="d"
if [[ $VERBOSE -gt 0 ]]; then
BUILDOPT+="v"
fi
msg "running ./build.sh -I webserver -$BUILDOPT -t $TAG-webserver"
./build.sh -$BUILDOPT -I webserver -t $TAG-webserver
msg "running ./build.sh -I worker -$BUILDOPT -t $TAG-worker"
./build.sh -$BUILDOPT -I worker -t $TAG-worker
OUT_FOLDER="/home/$PROJECT_AUTHOR/$PROJECT_BUILDNAME/local"
mkdir -p $OUT_FOLDER
./generateComposeFolder.sh -L -o "$OUT_FOLDER" -t $TAG
cd "$OUT_FOLDER"
docker-compose up -d
set -a
source $OUT_FOLDER/environments/local/webserver.env
set +a
xdg-open "$DDNINJA_PUBLIC_URL"
fi
if [[ $DEPLOY_TEST_MODE -eq 1 ]]; then
if [[ $AUTOTAG -eq 1 ]]; then
TAG=`./latest-ver.sh -${TAG_OPTS}`
fi
OUT_FOLDER="/home/$PROJECT_AUTHOR/$PROJECT_BUILDNAME/test"
mkdir -p $OUT_FOLDER
./generateComposeFolder.sh -s -o "$OUT_FOLDER" -t $TAG
cd "$OUT_FOLDER"
docker compose up -d
fi
if [[ $DEPLOY_PROD_MODE -eq 1 ]]; then
if [[ $AUTOTAG -eq 1 ]]; then
TAG=`./latest-ver.sh -${TAG_OPTS}`
fi
OUT_FOLDER="/home/$PROJECT_AUTHOR/$PROJECT_BUILDNAME/production"
mkdir -p $OUT_FOLDER
./generateComposeFolder.sh -p -o "$OUT_FOLDER" -t $TAG
cd "$OUT_FOLDER"
docker compose up -d
fi