mirror of
https://github.com/eduardogsilva/wireguard_webadmin.git
synced 2026-03-21 16:06:18 +00:00
refactor build and push script to enhance image selection and tagging process
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user