refactor build and push script to enhance image selection and tagging process

This commit is contained in:
Eduardo Silva
2026-03-17 14:38:01 -03:00
parent c3c7fa37cd
commit 74ea48335d
2 changed files with 130 additions and 47 deletions

View File

@@ -1,51 +1,122 @@
#!/bin/bash #!/bin/bash
IMAGES=( # Format: "service|image|manual"
"eduardosilva/wireguard_webadmin:latest" # Entries with "manual" as third field are excluded from "All" and must be selected individually.
"eduardosilva/wireguard_webadmin_cron:latest" SERVICES=(
"eduardosilva/wireguard_webadmin_nginx:latest" "wireguard-webadmin|eduardosilva/wireguard_webadmin|"
"eduardosilva/wireguard_webadmin_dns:latest" "wireguard-webadmin-cron|eduardosilva/wireguard_webadmin_cron|"
"eduardosilva/wireguard_webadmin_rrdtool:latest" "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() { SEP="=================================================================="
echo "=========================================================================================="
echo "========== Starting the build of the images..." # ── Tag selection ──
cat .gitignore > .dockerignore echo ""
docker compose -f docker-compose-build.yml build echo "$SEP"
if [ $? -eq 0 ]; then echo " Tag:"
echo "Build completed successfully." 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 else
echo "Error during the image build." printf " %d) %s\n" "$i" "$SVC"
exit 1
fi fi
} i=$((i + 1))
done
echo "$SEP"
printf "Choice [0]: "
read img_choice
push_images() { if [ -z "$img_choice" ] || [ "$img_choice" = "0" ]; then
echo "==========================================================================================" SELECTED=()
echo "========== Pushing images" for entry in "${SERVICES[@]}"; do
for IMAGE in "${IMAGES[@]}"; do IFS="|" read -r SVC IMG FLAG <<< "$entry"
echo "" [ "$FLAG" != "manual" ] && SELECTED+=("$entry")
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
done 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 docker system prune -a
build_images
push_images
echo "==========================================================================================" # ── Build ──
echo "========== Build and push operations completed successfully." 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"

View File

@@ -1,36 +1,48 @@
version: '3' version: '3'
services: services:
wireguard-webadmin: wireguard-webadmin:
image: eduardosilva/wireguard_webadmin:latest image: eduardosilva/wireguard_webadmin:${TAG:-latest}
build: build:
context: . context: .
wireguard-webadmin-cron: wireguard-webadmin-cron:
image: eduardosilva/wireguard_webadmin_cron:latest image: eduardosilva/wireguard_webadmin_cron:${TAG:-latest}
build: build:
context: containers/cron context: containers/cron
dockerfile: Dockerfile-cron dockerfile: Dockerfile-cron
wireguard-webadmin-dns: wireguard-webadmin-dns:
image: eduardosilva/wireguard_webadmin_dns:latest image: eduardosilva/wireguard_webadmin_dns:${TAG:-latest}
build: build:
context: ./containers/dnsmasq context: ./containers/dnsmasq
dockerfile: Dockerfile-dnsmasq dockerfile: Dockerfile-dnsmasq
wireguard-webadmin-nginx: wireguard-webadmin-nginx:
image: eduardosilva/wireguard_webadmin_nginx:latest image: eduardosilva/wireguard_webadmin_nginx:${TAG:-latest}
build: build:
context: . context: .
dockerfile: Dockerfile_nginx dockerfile: Dockerfile_nginx
wireguard-webadmin-rrdtool: wireguard-webadmin-rrdtool:
image: eduardosilva/wireguard_webadmin_rrdtool:latest image: eduardosilva/wireguard_webadmin_rrdtool:${TAG:-latest}
build: build:
context: ./containers/rrdtool context: ./containers/rrdtool
dockerfile: Dockerfile-rrdtool dockerfile: Dockerfile-rrdtool
wireguard-webadmin-cluster-node: wireguard-webadmin-cluster-node:
image: eduardosilva/wireguard-webadmin-cluster-node:latest image: eduardosilva/wireguard-webadmin-cluster-node:${TAG:-latest}
build: build:
context: ./containers/cluster_node context: ./containers/cluster_node
dockerfile: Dockerfile-cluster_node 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