init
This commit is contained in:
commit
1c8064ebf0
110
parse_image_ref.sh
Normal file
110
parse_image_ref.sh
Normal file
@ -0,0 +1,110 @@
|
||||
#!/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
|
||||
Loading…
Reference in New Issue
Block a user