From 74ea48335dc38f62cace25292556f359e3d8a207 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Tue, 17 Mar 2026 14:38:01 -0300 Subject: [PATCH] refactor build and push script to enhance image selection and tagging process --- build_and_push.sh | 151 ++++++++++++++++++++++++++++----------- docker-compose-build.yml | 26 +++++-- 2 files changed, 130 insertions(+), 47 deletions(-) diff --git a/build_and_push.sh b/build_and_push.sh index 162d169..1f7195e 100755 --- a/build_and_push.sh +++ b/build_and_push.sh @@ -1,51 +1,122 @@ #!/bin/bash -IMAGES=( - "eduardosilva/wireguard_webadmin:latest" - "eduardosilva/wireguard_webadmin_cron:latest" - "eduardosilva/wireguard_webadmin_nginx:latest" - "eduardosilva/wireguard_webadmin_dns:latest" - "eduardosilva/wireguard_webadmin_rrdtool:latest" +# Format: "service|image|manual" +# Entries with "manual" as third field are excluded from "All" and must be selected individually. +SERVICES=( + "wireguard-webadmin|eduardosilva/wireguard_webadmin|" + "wireguard-webadmin-cron|eduardosilva/wireguard_webadmin_cron|" + "wireguard-webadmin-dns|eduardosilva/wireguard_webadmin_dns|" + "wireguard-webadmin-nginx|eduardosilva/wireguard_webadmin_nginx|" + "wireguard-webadmin-rrdtool|eduardosilva/wireguard_webadmin_rrdtool|" + "wireguard-webadmin-caddy|eduardosilva/wireguard_webadmin_caddy|" + "wireguard-webadmin-auth-gateway|eduardosilva/wireguard_webadmin_auth_gateway|" + "wireguard-webadmin-cluster-node|eduardosilva/wireguard-webadmin-cluster-node|manual" ) -build_images() { - echo "==========================================================================================" - echo "========== Starting the build of the images..." - cat .gitignore > .dockerignore - docker compose -f docker-compose-build.yml build - if [ $? -eq 0 ]; then - echo "Build completed successfully." +SEP="==================================================================" + +# ── Tag selection ── +echo "" +echo "$SEP" +echo " Tag:" +echo " 1) latest (default)" +echo " 2) testing" +echo "$SEP" +printf "Choice [1]: " +read tag_choice + +case "$tag_choice" in + 2) TAG="testing" ;; + *) TAG="latest" ;; +esac + +# ── Image selection ── +echo "" +echo "$SEP" +echo " Image to build and push:" +echo " 0) All images (default, excludes manual-only)" +i=1 +for entry in "${SERVICES[@]}"; do + IFS="|" read -r SVC IMG FLAG <<< "$entry" + if [ "$FLAG" = "manual" ]; then + printf " %d) %s [manual only]\n" "$i" "$SVC" else - echo "Error during the image build." - exit 1 + printf " %d) %s\n" "$i" "$SVC" fi -} + i=$((i + 1)) +done +echo "$SEP" +printf "Choice [0]: " +read img_choice -push_images() { - echo "==========================================================================================" - echo "========== Pushing images" - for IMAGE in "${IMAGES[@]}"; do - echo "" - echo "" - echo "==========================================================================================" - echo "========== Pushing image: $IMAGE..." - docker push "$IMAGE" - if [ $? -eq 0 ]; then - echo "" - echo "=== $IMAGE pushed successfully." - echo "" - else - echo "" - echo "=== ERROR PUSHING THE IMAGE: $IMAGE" - echo "" - exit 1 - fi +if [ -z "$img_choice" ] || [ "$img_choice" = "0" ]; then + SELECTED=() + for entry in "${SERVICES[@]}"; do + IFS="|" read -r SVC IMG FLAG <<< "$entry" + [ "$FLAG" != "manual" ] && SELECTED+=("$entry") done -} + BUILD_SVC="" +else + if ! echo "$img_choice" | grep -qE '^[0-9]+$'; then + echo "Invalid choice." && exit 1 + fi + idx=$((img_choice - 1)) + if [ "$idx" -lt 0 ] || [ "$idx" -ge "${#SERVICES[@]}" ]; then + echo "Invalid choice." && exit 1 + fi + SELECTED=("${SERVICES[$idx]}") + BUILD_SVC="${SERVICES[$idx]%%|*}" +fi +# ── Confirm ── +echo "" +echo "$SEP" +echo " Tag : $TAG" +echo " Images:" +for entry in "${SELECTED[@]}"; do + IFS="|" read -r SVC IMG FLAG <<< "$entry" + printf " - %s:%s\n" "$IMG" "$TAG" +done +echo "$SEP" +printf "Confirm? [y/N]: " +read confirm +case "$confirm" in + [yY]*) ;; + *) echo "Aborted." && exit 0 ;; +esac + +# ── Prune ── +echo "" +echo "$SEP" +echo "Pruning Docker system..." docker system prune -a -build_images -push_images -echo "==========================================================================================" -echo "========== Build and push operations completed successfully." +# ── Build ── +echo "" +echo "$SEP" +echo "Building..." +cat .gitignore > .dockerignore +TAG=$TAG docker compose -f docker-compose-build.yml build $BUILD_SVC +if [ $? -ne 0 ]; then + echo "Build failed." && exit 1 +fi + +# ── Push ── +echo "" +echo "$SEP" +echo "Pushing..." +for entry in "${SELECTED[@]}"; do + IFS="|" read -r SVC IMAGE FLAG <<< "$entry" + IMAGE="$IMAGE:$TAG" + echo "" + echo "--- Pushing $IMAGE..." + docker push "$IMAGE" + if [ $? -ne 0 ]; then + echo "ERROR pushing $IMAGE" && exit 1 + fi + echo "--- $IMAGE pushed successfully." +done + +echo "" +echo "$SEP" +echo "Done. Tag: $TAG" diff --git a/docker-compose-build.yml b/docker-compose-build.yml index 39ba3e1..aec3637 100644 --- a/docker-compose-build.yml +++ b/docker-compose-build.yml @@ -1,36 +1,48 @@ version: '3' services: wireguard-webadmin: - image: eduardosilva/wireguard_webadmin:latest + image: eduardosilva/wireguard_webadmin:${TAG:-latest} build: context: . wireguard-webadmin-cron: - image: eduardosilva/wireguard_webadmin_cron:latest + image: eduardosilva/wireguard_webadmin_cron:${TAG:-latest} build: context: containers/cron dockerfile: Dockerfile-cron wireguard-webadmin-dns: - image: eduardosilva/wireguard_webadmin_dns:latest + image: eduardosilva/wireguard_webadmin_dns:${TAG:-latest} build: context: ./containers/dnsmasq dockerfile: Dockerfile-dnsmasq wireguard-webadmin-nginx: - image: eduardosilva/wireguard_webadmin_nginx:latest + image: eduardosilva/wireguard_webadmin_nginx:${TAG:-latest} build: context: . dockerfile: Dockerfile_nginx wireguard-webadmin-rrdtool: - image: eduardosilva/wireguard_webadmin_rrdtool:latest + image: eduardosilva/wireguard_webadmin_rrdtool:${TAG:-latest} build: context: ./containers/rrdtool dockerfile: Dockerfile-rrdtool wireguard-webadmin-cluster-node: - image: eduardosilva/wireguard-webadmin-cluster-node:latest + image: eduardosilva/wireguard-webadmin-cluster-node:${TAG:-latest} build: context: ./containers/cluster_node - dockerfile: Dockerfile-cluster_node \ No newline at end of file + dockerfile: Dockerfile-cluster_node + + wireguard-webadmin-caddy: + image: eduardosilva/wireguard_webadmin_caddy:${TAG:-latest} + build: + context: ./containers/caddy + dockerfile: Dockerfile-caddy + + wireguard-webadmin-auth-gateway: + image: eduardosilva/wireguard_webadmin_auth_gateway:${TAG:-latest} + build: + context: ./containers/auth-gateway + dockerfile: Dockerfile-auth-gateway