#!/bin/bash TAGS=$* BUILD=$(dirname $0) ROOT=$BUILD/.. REGISTRY="docker.io" TAGS=() DRY=0 PUSH=0 BUILD_BASE=1 BUILT_TAGS=() export DOCKER_BUILDKIT=1 usage () { echo "usage: $0 [-h|--help] [-d|--dry] [--no-base|-B] [-p|--push] [-r|--registry registry] [-t|--tag tag] -- images..."; } run () { if [[ $DRY == 1 ]]; then echo "$@" else "$@" fi } # usage: build [-d|--default] [-v|--variant variant] [-R|--no-register] build () { ARGS=() IS_DEFAULT=0 SUFFIX="" VARIANT="" REGISTER=1 options=$(getopt -l "default,variant:,no-register" -o "dv:R" -- "$@") eval set -- "$options" while true; do case "$1" in -d|--default) IS_DEFAULT=1 shift ;; -v|--variant) VARIANT="$2" shift 2 ;; -R|--no-register) REGISTER=0 shift ;; --) shift break ;; *) echo "build: unknown option $1" exit 1 esac done IMAGE=$1 CONTEXT=$2 shift 2; # check for variant if [[ -z "$VARIANT" ]]; then ARGS+=("-f" "$BUILD/$IMAGE/Dockerfile") else ARGS+=("-f" "$BUILD/$IMAGE/$VARIANT.Dockerfile") SUFFIX="-$VARIANT" fi for TAG in "${TAGS[@]}"; do ARGS+=("-t" "$REGISTRY/cojedzie/$IMAGE:$TAG$SUFFIX") [[ $REGISTER -eq 1 ]] && BUILT_TAGS+=("$REGISTRY/cojedzie/$IMAGE:$TAG$SUFFIX") if [[ $IS_DEFAULT == 1 ]]; then ARGS+=("-t" "$REGISTRY/cojedzie/$IMAGE:$TAG") [[ $REGISTER -eq 1 ]] && BUILT_TAGS+=("$REGISTRY/cojedzie/$IMAGE:$TAG") fi done echo "Building $IMAGE $VARIANT" run docker build --build-arg "BASE_VERSION=${TAGS[0]}" --build-arg "REGISTRY=$REGISTRY" "$CONTEXT" "${ARGS[@]}" "$@" } options=$(getopt -l "help,dry,registry:,tag:,push,no-base" -o "hdr:t:pB" -- "$@") eval set -- "$options" while true; do case "$1" in -h|--help) usage exit 0 ;; -t|--tag) TAGS+=("$2") shift 2 ;; -p|--push) PUSH=1 shift ;; -B|--no-base) BUILD_BASE=0 shift ;; -r|--registry) REGISTRY="$2" shift 2 ;; -d|--dry) DRY=1 shift ;; --) shift break; esac done # set default tags if user have not provided any if [ ${#TAGS[@]} -eq 0 ]; then TAGS=("latest") fi if [ $# -eq 0 ]; then set -- api standalone worker front fi if [ $BUILD_BASE -eq 1 ]; then build --no-register base $ROOT/api/ || exit 1 fi while [ $# -gt 0 ] do case "$1" in api) build api $ROOT/api/ --variant rr --default || exit 1 build api $ROOT/api/ --variant fpm || exit 1 ;; standalone) build standalone $ROOT/api/ --variant rr --default || exit 1 ;; worker) build worker $ROOT/api/ || exit 1 ;; front) build front $ROOT/front/ || exit 1 ;; *) >&2 echo "$1 is not a valid image to build" esac shift done if [ $PUSH -eq 1 ]; then for TAG in "${BUILT_TAGS[@]}"; do docker push $TAG done else echo "Created tags:" printf " - %s\n" "${BUILT_TAGS[@]}" fi