Files
ssh/docker/ssh-server/scripts/build.sh
Márcio Fernandes f6e6d4dba9
Some checks failed
/ build-docker-image (push) Failing after 23s
ssh server alpha
2025-09-06 23:32:31 +00:00

93 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ 🐳 Podman Build Script with Layered .env Configuration ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
#
# This script builds a Podman image using a specified Dockerfile,
# dynamically injecting build-time environment variables from a
# prioritized set of `.env` files.
#
# ──────────────── Behavior ────────────────
# - Loads variables from the following files (in order):
# build.env
# build.env.${BUILD_ENV}
# build.local.env
#
# - Later files override earlier ones (last-write-wins)
# - Variables starting with `BUILD_ENV` are excluded from build args
#
# ──────────────── Required Environment Variables ────────────────
# - BUILD_ENV: (optional) Environment name (e.g. dev, prod)
# - BUILD_ENV_DOCKER_FILE: Dockerfile to use (default: Dockerfile)
# - BUILD_ENV_IMAGE_TAG: Tag to assign to the built image
#
# ──────────────── Example Usage ────────────────
# BUILD_ENV=dev BUILD_ENV_IMAGE_TAG=myapp:dev ./build.sh
# BUILD_ENV=prod BUILD_ENV_DOCKER_FILE=Dockerfile.prod BUILD_ENV_IMAGE_TAG=myapp:prod ./build.sh
#
# ──────────────── Output ────────────────
# - Logs each loaded file
# - Displays the final build command
# - Executes the podman build with all resolved --build-arg flags
#
# Author: Márcio
# Last Updated: September 2025
POSSIBLE_BUILD_ARGS_FILES="\
build.env \
"
if [ -n "${BUILD_ENV+x}" ]; then
POSSIBLE_BUILD_ARGS_FILES="$POSSIBLE_BUILD_ARGS_FILES \
build.env.${BUILD_ENV} \
"
fi
POSSIBLE_BUILD_ARGS_FILES="$POSSIBLE_BUILD_ARGS_FILES \
.build.local"
# load variables into this context
declare -A build_args_map
BUILD_ARGS=""
for file in $POSSIBLE_BUILD_ARGS_FILES; do
if [ -f "$file" ]; then
echo "🔧 Loading variables from $file"
set -a
source "$file"
set +a
while IFS= read -r line || [ -n "$line" ]; do
# Skip comments and empty lines
[[ "$line" =~ ^#.*$ || -z "$line" ]] && continue
# Extract key and value
key="$(echo "$line" | cut -d= -f1 | xargs)"
value="$(echo "$line" | cut -d= -f2- | xargs)"
# Skip keys that start with BUILD_ENV
if [[ "$key" == BUILD_ENV* ]]; then
echo "Skipping key starting with BUILD_ENV: $key"
continue
fi
build_args_map["$key"]="$value"
done < "$file"
else
echo "⚠️ Skipping missing file: $file"
fi
done
for key in "${!build_args_map[@]}"; do
BUILD_ARGS+=" --build-arg $key=${build_args_map[$key]}"
done
# sets default docker file
BUILD_ENV_DOCKER_FILE="${BUILD_ENV_DOCKER_FILE:-Dockerfile}"
echo "Build env: $BUILD_ENV"
echo "Build DockerFile: $BUILD_ENV_DOCKER_FILE"
echo "Build Tag: $BUILD_ENV_IMAGE_TAG"
echo "Running: podman build -f $BUILD_ENV_DOCKER_FILE $BUILD_ARGS -t $BUILD_ENV_IMAGE_TAG ."
podman build -f $BUILD_ENV_DOCKER_FILE $BUILD_ARGS -t $BUILD_ENV_IMAGE_TAG .