111 lines
2.9 KiB
Bash
111 lines
2.9 KiB
Bash
#!/usr/bin/env bash
|
|
# parse_image_ref.sh
|
|
|
|
DEFAULT_REGISTRY="registry.tm0.app"
|
|
DEFAULT_TAG="latest"
|
|
|
|
parse_image_ref() {
|
|
local input="$1"
|
|
|
|
local image_ref registry repo tag label
|
|
|
|
if [[ $input == */* ]]; then
|
|
local prefix="${input%%/*}"
|
|
if [[ "$prefix" == "docker" ]]; then
|
|
input="docker.io/library/${input#*/}"
|
|
elif [[ "$prefix" == "tm0" ]]; then
|
|
input="${DEFAULT_REGISTRY}/${input#*/}"
|
|
fi
|
|
|
|
registry="${input%%/*}"
|
|
input=${input#*/}
|
|
else
|
|
registry="$DEFAULT_REGISTRY"
|
|
fi
|
|
|
|
if [[ "${input##*/}" == *:* ]]; then
|
|
tag="${input##*:}"
|
|
input="${input%:*}"
|
|
else
|
|
tag="$DEFAULT_TAG"
|
|
fi
|
|
|
|
repo="${registry}/${input}"
|
|
repo="${repo#*/}"
|
|
image_ref="${registry}/${repo}:${tag}"
|
|
|
|
label="${registry%.*}"
|
|
label="${label##*.}/${repo##*/}"
|
|
|
|
echo "$image_ref $repo $tag $label"
|
|
}
|
|
|
|
# -------------------------------------------------------------------
|
|
# Test harness
|
|
# -------------------------------------------------------------------
|
|
test_case() {
|
|
local input="$1"
|
|
local expected="$2"
|
|
local output
|
|
output="$(parse_image_ref "$input")"
|
|
|
|
if [[ "$output" == "$expected" ]]; then
|
|
printf "✅ PASS: %-35s => %s\n" "$input" "$output"
|
|
else
|
|
printf "❌ FAIL: %-35s\n" "$input"
|
|
printf " expected: %s\n" "$expected"
|
|
printf " got: %s\n" "$output"
|
|
fi
|
|
}
|
|
|
|
run_tests() {
|
|
echo "Running test cases..."
|
|
echo
|
|
|
|
test_case "tm0/nginx" \
|
|
"registry.tm0.app/nginx:latest nginx latest tm0/nginx"
|
|
|
|
test_case "tm0/dev/api" \
|
|
"registry.tm0.app/dev/api:latest dev/api latest tm0/api"
|
|
|
|
test_case "registry.tm0.app/nginx" \
|
|
"registry.tm0.app/nginx:latest nginx latest tm0/nginx"
|
|
|
|
test_case "registry.tm0.app:2525/nginx" \
|
|
"registry.tm0.app:2525/nginx:latest nginx latest tm0/nginx"
|
|
|
|
test_case "registry.tm0.app/dev/api" \
|
|
"registry.tm0.app/dev/api:latest dev/api latest tm0/api"
|
|
|
|
test_case "a.b.c.registry.tm0.app/dev/api" \
|
|
"a.b.c.registry.tm0.app/dev/api:latest dev/api latest tm0/api"
|
|
|
|
test_case "docker/nginx" \
|
|
"docker.io/library/nginx:latest library/nginx latest docker/nginx"
|
|
|
|
test_case "docker/nginx:1.25" \
|
|
"docker.io/library/nginx:1.25 library/nginx 1.25 docker/nginx"
|
|
|
|
test_case "docker.io/library/nginx:1.25" \
|
|
"docker.io/library/nginx:1.25 library/nginx 1.25 docker/nginx"
|
|
|
|
test_case "docker/redis" \
|
|
"docker.io/library/redis:latest library/redis latest docker/redis"
|
|
|
|
test_case "custom-registry.io/team/api:2.3.1" \
|
|
"custom-registry.io/team/api:2.3.1 team/api 2.3.1 custom-registry/api"
|
|
|
|
test_case "custom-registry.io:2525/team/api:2.3.1" \
|
|
"custom-registry.io:2525/team/api:2.3.1 team/api 2.3.1 custom-registry/api"
|
|
|
|
test_case "custom-registry.io:2525/api:2.3.1" \
|
|
"custom-registry.io:2525/api:2.3.1 api 2.3.1 custom-registry/api"
|
|
|
|
test_case "custom-registry.io/app" \
|
|
"custom-registry.io/app:latest app latest custom-registry/app"
|
|
}
|
|
|
|
if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
|
|
run_tests
|
|
fi
|