OpenSlides/docker/build.sh
Sean Engelhardt 6846b2ab91 Add vote service to OS4 setup
Integrate vote service, makes according changes to configuration
Updates the client to integrate the vote service
Updates the backend to integrate the vote service
2021-11-17 23:32:40 +01:00

155 lines
4.0 KiB
Bash
Executable File

#!/bin/bash
set -e
HOME=$(dirname "$(realpath "${BASH_SOURCE[0]}")")
declare -A TARGETS
TARGETS=(
[proxy]="$HOME/../proxy/"
[client]="$HOME/../openslides-client/"
[backend]="$HOME/../openslides-backend/"
[auth]="$HOME/../openslides-auth-service/"
[autoupdate]="$HOME/../openslides-autoupdate-service/"
[manage]="$HOME/../openslides-manage-service/"
[datastore-reader]="$HOME/../openslides-datastore-service/reader"
[datastore-writer]="$HOME/../openslides-datastore-service/writer"
[media]="$HOME/../openslides-media-service/"
[vote]="$HOME/../openslides-vote-service/"
#[pgbouncer]="https://github.com/OpenSlides/openslides-docker-compose.git#:pgbouncer"
#[postfix]="https://github.com/OpenSlides/openslides-docker-compose.git#:postfix"
#[repmgr]="https://github.com/OpenSlides/openslides-docker-compose.git#:repmgr"
)
DOCKER_REPOSITORY="openslides"
DOCKER_TAG="latest-4"
CONFIG="/etc/osinstancectl"
OPTIONS=()
BUILT_IMAGES=()
DEFAULT_TARGETS=(proxy client backend auth autoupdate permission manage datastore-reader datastore-writer media)
usage() {
cat << EOF
Usage: $(basename ${BASH_SOURCE[0]}) [<options>] <service>...
Options:
-D, --docker-repo Specify a Docker repository
(default: unspecified, i.e., system default)
-t, --tag Tag the Docker image (default: $DOCKER_TAG)
--ask-push Offer to push newly built images to registry
--no-cache Pass --no-cache to docker-build
EOF
}
# Config file
if [[ -f "$CONFIG" ]]; then
echo "Found ${CONFIG} file."
source "$CONFIG"
fi
shortopt="hr:D:t:"
longopt="help,docker-repo:,tag:,ask-push,no-cache"
ARGS=$(getopt -o "$shortopt" -l "$longopt" -n "$ME" -- "$@")
if [ $? -ne 0 ]; then usage; exit 1; fi
eval set -- "$ARGS";
unset ARGS
# Parse options
while true; do
case "$1" in
-D|--docker-repo)
DOCKER_REPOSITORY="$2"
shift 2
;;
-t|--tag)
DOCKER_TAG="$2"
shift 2
;;
--ask-push)
ASK_PUSH=1
shift 1
;;
--no-cache)
OPTIONS+="--no-cache"
shift 1
;;
-h|--help) usage; exit 0 ;;
--) shift ; break ;;
*) usage; exit 1 ;;
esac
done
SELECTED_TARGETS=($@)
[[ "${#SELECTED_TARGETS[@]}" -ge 1 ]] || SELECTED_TARGETS=("${DEFAULT_TARGETS[@]}")
[[ "${SELECTED_TARGETS[@]}" != "all" ]] || SELECTED_TARGETS=("${!TARGETS[@]}")
for i in "${SELECTED_TARGETS[@]}"; do
loc="${TARGETS[$i]}"
[[ -n "$loc" ]] || {
echo "ERROR: Cannot build ${i}: not configured."
continue
}
img_name="openslides-${i}"
img="${img_name}:${DOCKER_TAG}"
if [[ -n "$DOCKER_REPOSITORY" ]]; then
img="${DOCKER_REPOSITORY}/${img}"
fi
echo "Building $img..."
cd $loc
{
printf '{\n'
printf '\t"service": "%s,\n' "${i}"
printf '\t"date": "%s",\n' "$(date)"
printf '\t"commit": "%s",\n' "$(git rev-parse HEAD)"
printf '\t"commit-abbrev": "%s",\n' "$(git rev-parse --abbrev-ref HEAD)"
printf '}\n'
} > version.json
# Special instructions for local services
build_script="${loc}/build.sh"
if [[ -f "$build_script" ]]; then
( . "$build_script" )
else
docker build --tag "$img" --pull "${OPTIONS[@]}" "$loc"
fi
rm version.json
BUILT_IMAGES+=("$img ON")
done
if [[ "${#BUILT_IMAGES[@]}" -ge 1 ]]; then
printf "\nSuccessfully built images:\n\n"
for i in "${BUILT_IMAGES[@]}"; do
read -r img x <<< "$i"
printf " - $img\n"
done
else
echo "No images were built."
exit 3
fi
[[ "$ASK_PUSH" ]] || exit 0
if hash whiptail > /dev/null 2>&1; then
while read img; do
echo "Pushing ${img}."
docker push "$img"
done < <( whiptail --title "OpenSlides build script" \
--checklist "Select images to push to their registry." \
25 78 16 --separate-output --noitem --clear \
${BUILT_IMAGES[@]} \
3>&2 2>&1 1>&3 )
else
echo
for i in "${BUILT_IMAGES[@]}"; do
read -r img x <<< "$i"
read -p "Push image '$img' to repository? [Y/n] " REPL
case "$REPL" in
N|n|No|no|NO) exit 0;;
*) docker push "$img" ;;
esac
done
fi