1c0724341c
Since build.sh now builds more than just two images, individual queries whether to push each image to a registry may become tedious. This patch replaces the queries with a single checklist menu. After making a selection, the images get pushed all at once. In the menu, all images are unchecked by default in order to prevent accidental uploads. This, too, may become tedious. In that case, the default could be flipped or a new option could be introduced.
113 lines
2.8 KiB
Bash
Executable File
113 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
declare -A TARGETS
|
|
TARGETS=(
|
|
[client]="$(dirname "${BASH_SOURCE[0]}")/../client/docker/"
|
|
[server]="$(dirname "${BASH_SOURCE[0]}")/../server/docker/"
|
|
[media-service]="https://github.com/OpenSlides/openslides-media-service.git"
|
|
[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"
|
|
CONFIG="/etc/osinstancectl"
|
|
OPTIONS=()
|
|
BUILT_IMAGES=()
|
|
DEFAULT_TARGETS=(server client)
|
|
|
|
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)
|
|
--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:,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
|
|
;;
|
|
--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..."
|
|
# Special instructions for local services
|
|
build_script="$(dirname "${BASH_SOURCE[0]}")/../${i}/build.sh"
|
|
if [[ -f "$build_script" ]]; then
|
|
. "$build_script"
|
|
else
|
|
docker build --tag "$img" --pull "${OPTIONS[@]}" "$loc"
|
|
fi
|
|
BUILT_IMAGES+=("$img OFF")
|
|
done
|
|
|
|
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
|
|
printf "\nSuccessfully built images:\n\n"
|
|
for i in "${BUILT_IMAGES[@]}"; do
|
|
read -r img x <<< "$i"
|
|
printf " - $img\n"
|
|
done
|
|
fi
|