wip
[skip ci]
This commit is contained in:
92
check.sh
92
check.sh
@@ -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}"
|
||||||
|
|||||||
Reference in New Issue
Block a user