6846b2ab91
Integrate vote service, makes according changes to configuration Updates the client to integrate the vote service Updates the backend to integrate the vote service
155 lines
4.0 KiB
Bash
Executable File
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
|