[skip ci]
This commit is contained in:
2023-03-21 12:51:05 +01:00
parent 2fa59436a2
commit 8345924a36

View File

@@ -23,52 +23,96 @@ if [ -z "${TARGET}" ]; then
exit 1 exit 1
fi fi
if [ -z "${REPO_URL}" ]; then if [ -z "${BASE_REGISTRY_USERNAME}" && -n "${REGISTRY_USERNAME}" ]; then
REPO_URL="https://hub.docker.com/v2/repositories"
fi
if [ -z "${BASE_REPO_URL}" ]; then
BASE_REPO_URL="${REPO_URL}"
fi
if [ -z "${TARGET_REPO_URL}" ]; then
TARGET_REPO_URL="${REPO_URL}"
fi
if [ -z "${BASE_REPO_USERNAME}" && -n "${REPO_USERNAME}" ]; then
BASE_REPO_USERNAME="${REPO_USERNAME}" BASE_REPO_USERNAME="${REPO_USERNAME}"
fi fi
if [ -z "${BASE_REPO_PASSWORD}" && -n "${REPO_PASSWORD}" ]; then if [ -z "${BASE_REGISTRY_PASSWORD}" && -n "${REGISTRY_PASSWORD}" ]; then
BASE_REPO_PASSWORD="${REPO_PASSWORD}" BASE_REPO_PASSWORD="${REPO_PASSWORD}"
fi fi
if [ -z "${TARGET_REGISTRY_USERNAME}" && -n "${REGISTRY_USERNAME}" ]; then
if [ -z "${TARGET_REPO_USERNAME}" && -n "${REPO_USERNAME}" ]; then
TARGET_REPO_USERNAME="${REPO_USERNAME}" TARGET_REPO_USERNAME="${REPO_USERNAME}"
fi fi
if [ -z "${TARGET_REPO_PASSWORD}" && -n "${REPO_PASSWORD}" ]; then if [ -z "${TARGET_REGISTRY_PASSWORD}" && -n "${REGISTRY_PASSWORD}" ]; then
BASE_REPO_PASSWORD="${REPO_PASSWORD}" BASE_REPO_PASSWORD="${REPO_PASSWORD}"
fi fi
if [ -z "${REGISTRY_API}" ]; then
REGISTRY_API = 'docker'
fi
# add "library/" if its a "official" docker image (it has no username) if [ -z "${BASE_REGISTRY_API}" ]; then
BASE_REGISTRY_API = '${REGISTRY_API}'
fi
if [ -z "${TARGET_REGISTRY_API}" ]; then
TARGET_REGISTRY_API = '${REGISTRY_API}'
fi
if [ -z "${REGISTRY_URL}" ]; then
REGISTRY_URL="https://hub.docker.com/v2"
# repositories
fi
if [ -z "${BASE_REPO_URL}" ]; then
BASE_REGISTRY_URL="${REPO_URL}"
fi
if [ -z "${TARGET_REPO_URL}" ]; then
TARGET_REGISTRY_URL="${REPO_URL}"
fi
# remove trailing /
BASE_REGISTRY_URL="${BASE_REGISTRY_URL%/}"
TARGET_REGISTRY_URL="${TARGET_REGISTRY_URL%/}"
# add "library/" if its a "official" docker image (no username is provided)
echo "${BASE}" | grep -q "/" || BASE="library/${BASE}" echo "${BASE}" | grep -q "/" || BASE="library/${BASE}"
echo "${TARGET}" | grep -q "/" || TARGET="library/${TARGET}" echo "${TARGET}" | grep -q "/" || TARGET="library/${TARGET}"
# if no tag is give default to latest # if no tag is given default to latest
echo "${BASE}" | grep -q ":" || BASE="${BASE}:latest" echo "${BASE}" | grep -q ":" || BASE="${BASE}:latest"
echo "${TARGET}" | grep -q ":" || TARGET="${TARGET}:latest" echo "${TARGET}" | grep -q ":" || TARGET="${TARGET}:latest"
# split repo into user reponame and tag
IFS='/:'
read -ra parts <<< "${BASE_REPO}"
BASE_REPO_USER="${parts[0]}"
BASE_REPO_NAME="${parts[1]}"
BASE_REPO_TAG="${parts[2]}"
# move the tag to its own var and remove it from the repo name read -ra parts <<< "${TARGET_REPO}"
BASE_TAG=$(echo "${BASE}" | sed 's/[^:]*://') TARGET_REPO_USER="${parts[0]}"
TARGET_TAG=$(echo "${TARGET}" | sed 's/[^:]*://') TARGET_REPO_NAME="${parts[1]}"
TARGET_REPO_TAG="${parts[2]}"
BASE_REPO=$(echo "${BASE}" | sed 's/:.*//') if [ -n "${BASE_REGISTRY_USERNAME}" && -n "${BASE_REGISTRY_PASSWORD}" \ ]
TARGET_REPO=$(echo "${TARGET}" | sed 's/:.*//')
# make a shared login header if REGISTRY_API REGISTRY_USERNAME and REGISTRY_PASSWORD are the same for BASE and TARGET
if [ "${BASE_REGISTRY_API}" == "${TARGET_REGISTRY_API}" \
&& "${BASE_REGISTRY_USERNAME}" == "${TARGET_REGISTRY_USERNAME}" \
&& "${BASE_REGISTRY_PASSWORD}" == "${TARGET_REGISTRY_PASSWORD}" \
&& "${BASE_REGISTRY_URL}" == "${TARGET_REGISTRY_URL}" \
&& -n "${BASE_REGISTRY_USERNAME}" \
&& -n "${BASE_REGISTRY_PASSWORD}" \
]; then
if [ "${BASE_REGISTRY_API}" == "docker" ]; then
TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d "{\"username\": \"${BASE_REGISTRY_USERNAME}\", \"password\": \"${BASE_REGISTRY_PASSWORD}\"}" ${BASE_REGISTRY_URL}/users/login/ | jq -r .token)
BASE_HEADER="Authorization: JWT ${TOKEN}"
TARGET_HEADER="Authorization: JWT ${TOKEN}"
elif [ "${BASE_REGISTRY_API}" == "gitea" ]; then
BASE_HEADER="Authorization: token ${BASE_REGISTRY_PASSWORD}"
TARGET_HEADER="Authorization: token ${TARGET_REGISTRY_PASSWORD}"
fi
fi
if [ "${BASE_REGISTRY_API}" == "docker" ]; then
BASE_URL="${BASE_REPO_URL}/${BASE_REPO_USER}/${BASE_REPO_NAME}/tags/${BASE_REPO_TAG}"
elif [ "${BASE_REGISTRY_API}" == "gitea" ]; then
fi
# build the url to the repo # build the url to the repo
BASE_URL="${BASE_REPO_URL}/${BASE_REPO}/tags/${BASE_TAG}" BASE_URL="${BASE_REPO_URL}/${BASE_REPO}/tags/${BASE_TAG}"