container-action/scripts/run.sh
2025-03-19 20:38:18 +03:00

105 lines
No EOL
2.5 KiB
Bash
Executable file

#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
REGISTRY=${REGISTRY:-}
USERNAME=${USERNAME:-}
PASSWORD=${PASSWORD:-}
DOCKERFILE=${DOCKERFILE:-}
PUSH=${PUSH:-}
PODMAN_USER="podman"
chown $PODMAN_USER:$PODMAN_USER /home/$PODMAN_USER/auth
chown $PODMAN_USER:$PODMAN_USER /home/$PODMAN_USER/.local/share/containers/storage
run_cmd() {
local build_cmd=("$@")
cmd=$(printf "%q\t" "${build_cmd[@]}")
echo "Running: $cmd"
su "$PODMAN_USER" -c "$cmd"
}
### LOGIN
if [[ -n "$REGISTRY" && -n "$USERNAME" && -n "$PASSWORD" ]]; then
build_cmd=(podman login
--storage-driver=overlay
--authfile="$REGISTRY_AUTH_FILE"
"$REGISTRY"
--username="$USERNAME"
--password="$PASSWORD"
)
run_cmd "${build_cmd[@]}"
fi
# Function that splits on unescaped spaces (but not on escaped ones)
# and outputs each processed token on a new line.
generate_args() {
local input_args="$1"
local prefix="$2"
local output=()
local placeholder="__ESCAPED_SPACE__"
if [[ -n "$input_args" ]]; then
# Replace escaped spaces (\ ) with a unique placeholder.
local temp="${input_args//\\ /$placeholder}"
# Split on spaces (escaped ones are now hidden).
IFS=' ' read -r -a parts <<< "$temp"
for part in "${parts[@]}"; do
# Skip any empty parts.
[[ -z "$part" ]] && continue
# Restore escaped spaces.
part="${part//$placeholder/ }"
output+=("$prefix$part")
done
fi
printf "%s\n" "${output[@]}"
}
### BUILD
if [[ -n "$DOCKERFILE" ]]; then
CREATED="$(date '+%Y-%m-%dT%T')"
REVISION="$REVISION"
SOURCE="$SOURCE"
echo "Main labels: $CREATED $REVISION $SOURCE"
TAGS=$(generate_args "$ACTION_TAGS" "-t=")
echo "Tags: ${TAGS[@]}"
LABELS=$(generate_args "$ACTION_LABELS" "--label=")
echo "Labels: ${LABELS[@]}"
BUILD_ARGS=$(generate_args "$ACTION_BUILD_ARGS" "--build-arg=")
echo "Build args: ${BUILD_ARGS[@]}"
EXTRA_ARGS=$(generate_args "$ACTION_EXTRA_ARGS" "")
echo "Extra args: ${EXTRA_ARGS[@]}"
build_cmd=(podman build
--platform="linux/amd64"
--storage-driver=overlay
--authfile="$REGISTRY_AUTH_FILE"
--pull=true
--label=image.created="$CREATED"
--label=image.revision="$REVISION"
--label=image.source="$SOURCE"
$TAGS
$LABELS
$BUILD_ARGS
$EXTRA_ARGS
--file="$DOCKERFILE"
.
)
run_cmd "${build_cmd[@]}"
fi
if [[ -n "$PUSH" && "$PUSH" == "true" ]]; then
TAGS=$(generate_args "$ACTION_TAGS" "")
echo "Tags: ${TAGS[@]}"
build_cmd=(podman push
--storage-driver=overlay
--authfile="$REGISTRY_AUTH_FILE"
$TAGS
)
run_cmd "${build_cmd[@]}"
fi