mirror of
https://github.com/eduardogsilva/wireguard_webadmin.git
synced 2026-03-22 00:16:18 +00:00
enhance build_and_push script with additional parameters for context and platforms
This commit is contained in:
@@ -1,16 +1,18 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Format: "service|image|manual"
|
# Format: "service|image|flag|context|dockerfile|platforms"
|
||||||
|
# Leave dockerfile empty if using the default Dockerfile in the context directory.
|
||||||
|
# Leave platforms empty to use the default (linux/amd64,linux/arm/v7,linux/arm64).
|
||||||
# Entries with "manual" as third field are excluded from "All" and must be selected individually.
|
# Entries with "manual" as third field are excluded from "All" and must be selected individually.
|
||||||
SERVICES=(
|
SERVICES=(
|
||||||
"wireguard-webadmin|eduardosilva/wireguard_webadmin|"
|
"wireguard-webadmin|eduardosilva/wireguard_webadmin||.|"
|
||||||
"wireguard-webadmin-cron|eduardosilva/wireguard_webadmin_cron|"
|
"wireguard-webadmin-cron|eduardosilva/wireguard_webadmin_cron||./containers/cron|Dockerfile-cron"
|
||||||
"wireguard-webadmin-dns|eduardosilva/wireguard_webadmin_dns|"
|
"wireguard-webadmin-dns|eduardosilva/wireguard_webadmin_dns||./containers/dnsmasq|Dockerfile-dnsmasq"
|
||||||
"wireguard-webadmin-nginx|eduardosilva/wireguard_webadmin_nginx|"
|
"wireguard-webadmin-nginx|eduardosilva/wireguard_webadmin_nginx||.|Dockerfile_nginx"
|
||||||
"wireguard-webadmin-rrdtool|eduardosilva/wireguard_webadmin_rrdtool|"
|
"wireguard-webadmin-rrdtool|eduardosilva/wireguard_webadmin_rrdtool||./containers/rrdtool|Dockerfile-rrdtool"
|
||||||
"wireguard-webadmin-caddy|eduardosilva/wireguard_webadmin_caddy|"
|
"wireguard-webadmin-caddy|eduardosilva/wireguard_webadmin_caddy||./containers/caddy|Dockerfile-caddy"
|
||||||
"wireguard-webadmin-auth-gateway|eduardosilva/wireguard_webadmin_auth_gateway|"
|
"wireguard-webadmin-auth-gateway|eduardosilva/wireguard_webadmin_auth_gateway||./containers/auth-gateway|Dockerfile-auth-gateway|"
|
||||||
"wireguard-webadmin-cluster-node|eduardosilva/wireguard-webadmin-cluster-node|manual"
|
"wireguard-webadmin-cluster-node|eduardosilva/wireguard-webadmin-cluster-node|manual|./containers/cluster_node|Dockerfile-cluster_node"
|
||||||
)
|
)
|
||||||
|
|
||||||
SEP="=================================================================="
|
SEP="=================================================================="
|
||||||
@@ -37,7 +39,7 @@ echo " Image to build and push:"
|
|||||||
echo " 0) All images (default, excludes manual-only)"
|
echo " 0) All images (default, excludes manual-only)"
|
||||||
i=1
|
i=1
|
||||||
for entry in "${SERVICES[@]}"; do
|
for entry in "${SERVICES[@]}"; do
|
||||||
IFS="|" read -r SVC IMG FLAG <<< "$entry"
|
IFS="|" read -r SVC IMG FLAG CTX DOC <<< "$entry"
|
||||||
if [ "$FLAG" = "manual" ]; then
|
if [ "$FLAG" = "manual" ]; then
|
||||||
printf " %d) %s [manual only]\n" "$i" "$SVC"
|
printf " %d) %s [manual only]\n" "$i" "$SVC"
|
||||||
else
|
else
|
||||||
@@ -52,10 +54,9 @@ read img_choice
|
|||||||
if [ -z "$img_choice" ] || [ "$img_choice" = "0" ]; then
|
if [ -z "$img_choice" ] || [ "$img_choice" = "0" ]; then
|
||||||
SELECTED=()
|
SELECTED=()
|
||||||
for entry in "${SERVICES[@]}"; do
|
for entry in "${SERVICES[@]}"; do
|
||||||
IFS="|" read -r SVC IMG FLAG <<< "$entry"
|
IFS="|" read -r SVC IMG FLAG CTX DOC <<< "$entry"
|
||||||
[ "$FLAG" != "manual" ] && SELECTED+=("$entry")
|
[ "$FLAG" != "manual" ] && SELECTED+=("$entry")
|
||||||
done
|
done
|
||||||
BUILD_SVC=""
|
|
||||||
else
|
else
|
||||||
if ! echo "$img_choice" | grep -qE '^[0-9]+$'; then
|
if ! echo "$img_choice" | grep -qE '^[0-9]+$'; then
|
||||||
echo "Invalid choice." && exit 1
|
echo "Invalid choice." && exit 1
|
||||||
@@ -65,17 +66,21 @@ else
|
|||||||
echo "Invalid choice." && exit 1
|
echo "Invalid choice." && exit 1
|
||||||
fi
|
fi
|
||||||
SELECTED=("${SERVICES[$idx]}")
|
SELECTED=("${SERVICES[$idx]}")
|
||||||
BUILD_SVC="${SERVICES[$idx]%%|*}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ── Confirm ──
|
# ── Confirm ──
|
||||||
echo ""
|
echo ""
|
||||||
echo "$SEP"
|
echo "$SEP"
|
||||||
echo " Tag : $TAG"
|
echo " Tag : $TAG"
|
||||||
|
echo " Default : linux/amd64,linux/arm64"
|
||||||
echo " Images:"
|
echo " Images:"
|
||||||
for entry in "${SELECTED[@]}"; do
|
for entry in "${SELECTED[@]}"; do
|
||||||
IFS="|" read -r SVC IMG FLAG <<< "$entry"
|
IFS="|" read -r SVC IMG FLAG CTX DOC PLATFORMS <<< "$entry"
|
||||||
printf " - %s:%s\n" "$IMG" "$TAG"
|
if [ -n "$PLATFORMS" ]; then
|
||||||
|
printf " - %s:%s [%s]\n" "$IMG" "$TAG" "$PLATFORMS"
|
||||||
|
else
|
||||||
|
printf " - %s:%s\n" "$IMG" "$TAG"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
echo "$SEP"
|
echo "$SEP"
|
||||||
printf "Confirm? [y/N]: "
|
printf "Confirm? [y/N]: "
|
||||||
@@ -85,36 +90,64 @@ case "$confirm" in
|
|||||||
*) echo "Aborted." && exit 0 ;;
|
*) echo "Aborted." && exit 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# ── Prune ──
|
# ── Setup QEMU + Buildx ──
|
||||||
echo ""
|
echo ""
|
||||||
|
echo "$SEP"
|
||||||
|
echo "Removing existing buildx builder (if any)..."
|
||||||
|
docker buildx rm multi-builder 2>/dev/null || true
|
||||||
|
|
||||||
echo "$SEP"
|
echo "$SEP"
|
||||||
echo "Pruning Docker system..."
|
echo "Pruning Docker system..."
|
||||||
docker system prune -a
|
docker system prune -a
|
||||||
|
|
||||||
# ── Build ──
|
|
||||||
echo ""
|
|
||||||
echo "$SEP"
|
echo "$SEP"
|
||||||
echo "Building..."
|
if [ "$(uname)" = "Linux" ]; then
|
||||||
cat .gitignore > .dockerignore
|
echo "Setting up QEMU for ARM emulation..."
|
||||||
TAG=$TAG docker compose -f docker-compose-build.yml build $BUILD_SVC
|
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||||
if [ $? -ne 0 ]; then
|
echo "$SEP"
|
||||||
echo "Build failed." && exit 1
|
echo "Creating buildx builder..."
|
||||||
|
docker buildx create --name multi-builder --use
|
||||||
|
else
|
||||||
|
CURRENT_CONTEXT=$(docker context show)
|
||||||
|
echo "macOS detected — using existing builder: $CURRENT_CONTEXT"
|
||||||
|
docker buildx use "$CURRENT_CONTEXT"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ── Push ──
|
# ── .dockerignore ──
|
||||||
|
cat .gitignore > .dockerignore
|
||||||
|
|
||||||
|
# ── Build and push ──
|
||||||
|
DEFAULT_PLATFORMS="linux/amd64,linux/arm64"
|
||||||
echo ""
|
echo ""
|
||||||
echo "$SEP"
|
echo "$SEP"
|
||||||
echo "Pushing..."
|
echo "Building and pushing..."
|
||||||
for entry in "${SELECTED[@]}"; do
|
for entry in "${SELECTED[@]}"; do
|
||||||
IFS="|" read -r SVC IMAGE FLAG <<< "$entry"
|
IFS="|" read -r SVC IMG FLAG CTX DOC PLATFORMS <<< "$entry"
|
||||||
IMAGE="$IMAGE:$TAG"
|
FULL_IMAGE="$IMG:$TAG"
|
||||||
|
BUILD_PLATFORMS="${PLATFORMS:-$DEFAULT_PLATFORMS}"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "--- Pushing $IMAGE..."
|
echo "--- Building $FULL_IMAGE ($BUILD_PLATFORMS)..."
|
||||||
docker push "$IMAGE"
|
|
||||||
if [ $? -ne 0 ]; then
|
if [ -z "$DOC" ]; then
|
||||||
echo "ERROR pushing $IMAGE" && exit 1
|
docker buildx build \
|
||||||
|
--platform "$BUILD_PLATFORMS" \
|
||||||
|
-t "$FULL_IMAGE" \
|
||||||
|
--push \
|
||||||
|
"$CTX"
|
||||||
|
else
|
||||||
|
docker buildx build \
|
||||||
|
--platform "$BUILD_PLATFORMS" \
|
||||||
|
-t "$FULL_IMAGE" \
|
||||||
|
--push \
|
||||||
|
-f "$CTX/$DOC" \
|
||||||
|
"$CTX"
|
||||||
fi
|
fi
|
||||||
echo "--- $IMAGE pushed successfully."
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "ERROR building/pushing $FULL_IMAGE" && exit 1
|
||||||
|
fi
|
||||||
|
echo "--- $FULL_IMAGE built and pushed successfully."
|
||||||
done
|
done
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
Reference in New Issue
Block a user