#!/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 if [[ $AUTOTAG -eq 1 ]]; then TAG=`./next-ver.sh -${TAG_OPTS}` echo "Using tag $TAG" 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 -$BUILDOPT -t $TAG" ./build.sh -$BUILDOPT -t $TAG ./run-unit.sh $UNITOPT -t $TAG fi if [[ $PUBLISH_MODE -eq 1 ]]; then BUILDOPT+="bu" VERBOPT="" if [[ $VERBOSE -gt 0 ]]; then BUILDOPT+="v" VERBOPT="-v" fi msg "running ./build.sh -$BUILDOPT -t $TAG" ./build.sh -$BUILDOPT -t $TAG ./run-unit.sh $VERBOPT -t $TAG ./publish.sh $VERBOPT -t $TAG 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 -$BUILDOPT -t $TAG" ./build.sh -$BUILDOPT -t $TAG 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