first commit

This commit is contained in:
2025-11-06 03:25:44 -06:00
commit 38a9fb2789
17 changed files with 1153 additions and 0 deletions

108
build_push_image.sh Normal file
View File

@@ -0,0 +1,108 @@
#!/usr/bin/env bash
set -euo pipefail
########################################
# Config (edit these)
########################################
REGISTRY="git.sneakygeek.net"
NAMESPACE="sneakygeek"
IMAGE_NAME="sneakyscan"
# A helpful pointer/reference for your repo URL. Not used by docker commands,
# but kept for clarity and future automation if you want to clone/build elsewhere.
GIT_REPO_URL="https://git.sneakygeek.net/sneakygeek/sneakyscan.git"
# If you prefer to override the tag manually sometimes:
# export DOCKER_TAG=my-custom-tag
########################################
# Colors
BOLD='\033[1m'; DIM='\033[2m'; GREEN='\033[32m'; YELLOW='\033[33m'; RED='\033[31m'; NC='\033[0m'
# Helpers
confirm() {
# Usage: confirm "Question?" default_yes|default_no
local prompt response default
if [[ "${2:-default_no}" == "default_yes" ]]; then
prompt=" [Y/n] "
default="y"
else
prompt=" [y/N] "
default="n"
fi
read -r -p "$1$prompt" response || true
response="${response:-$default}"
[[ "$response" =~ ^[Yy]$ ]]
}
docker_tag_sanitize() {
# Docker tag must be <=128 chars, allowed: [A-Za-z0-9_.-], usually lowercase for sanity
local raw="$1"
local lower="${raw,,}"
local safe
safe="$(printf '%s' "$lower" | tr -c 'a-z0-9_.-' '-')"
printf '%.128s' "$safe"
}
detect_git_tag() {
if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
# Branch name or fallback to describe if detached
local ref
ref="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || true)"
if [[ "$ref" == "HEAD" || -z "$ref" ]]; then
# detached HEAD → use nearest tag or short commit
ref="$(git describe --tags --always --dirty 2>/dev/null || git rev-parse --short HEAD 2>/dev/null || echo 'detached')"
fi
docker_tag_sanitize "$ref"
else
# Not a git repo → default to "latest" unless DOCKER_TAG is set
echo "latest"
fi
}
main() {
local image_repo="${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}"
local tag latest_tag push_it push_latest
# Determine tag
if [[ -n "${DOCKER_TAG:-}" ]]; then
tag="$(docker_tag_sanitize "$DOCKER_TAG")"
else
tag="$(detect_git_tag)"
fi
echo -e "${BOLD}Image:${NC} ${image_repo}"
echo -e "${BOLD}Tag: ${NC} ${GREEN}${tag}${NC}"
echo -e "${DIM}(git: $(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo 'n/a'), repo: ${GIT_REPO_URL})${NC}"
# Build
echo -e "\n${BOLD}==> Building ${image_repo}:${tag}${NC}"
docker build -t "${image_repo}:${tag}" .
# Ask about :latest
if confirm "Also tag as :latest?" default_no; then
latest_tag="latest"
echo -e "${BOLD}Tagging:${NC} ${image_repo}:${latest_tag}"
docker tag "${image_repo}:${tag}" "${image_repo}:${latest_tag}"
push_latest="yes"
else
push_latest="no"
fi
# Ask about pushing
if confirm "Push the built image(s) now?" default_yes; then
echo -e "\n${BOLD}==> Pushing ${image_repo}:${tag}${NC}"
docker push "${image_repo}:${tag}"
if [[ "$push_latest" == "yes" ]]; then
echo -e "${BOLD}==> Pushing ${image_repo}:latest${NC}"
docker push "${image_repo}:latest"
fi
echo -e "${GREEN}Done.${NC}"
else
echo -e "${YELLOW}Skipping push. Local images created:${NC}"
echo " - ${image_repo}:${tag}"
[[ "$push_latest" == "yes" ]] && echo " - ${image_repo}:latest"
fi
}
main "$@"