From 8345924a368b8e70daa6fb3d0e3d4ef9d234e37f Mon Sep 17 00:00:00 2001 From: vista Date: Tue, 21 Mar 2023 12:51:05 +0100 Subject: [PATCH] wip [skip ci] --- check.sh | 92 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 68 insertions(+), 24 deletions(-) diff --git a/check.sh b/check.sh index 6e7e006..2b76121 100644 --- a/check.sh +++ b/check.sh @@ -23,52 +23,96 @@ if [ -z "${TARGET}" ]; then exit 1 fi -if [ -z "${REPO_URL}" ]; 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 +if [ -z "${BASE_REGISTRY_USERNAME}" && -n "${REGISTRY_USERNAME}" ]; then BASE_REPO_USERNAME="${REPO_USERNAME}" fi -if [ -z "${BASE_REPO_PASSWORD}" && -n "${REPO_PASSWORD}" ]; then +if [ -z "${BASE_REGISTRY_PASSWORD}" && -n "${REGISTRY_PASSWORD}" ]; then BASE_REPO_PASSWORD="${REPO_PASSWORD}" fi - -if [ -z "${TARGET_REPO_USERNAME}" && -n "${REPO_USERNAME}" ]; then +if [ -z "${TARGET_REGISTRY_USERNAME}" && -n "${REGISTRY_USERNAME}" ]; then TARGET_REPO_USERNAME="${REPO_USERNAME}" fi -if [ -z "${TARGET_REPO_PASSWORD}" && -n "${REPO_PASSWORD}" ]; then +if [ -z "${TARGET_REGISTRY_PASSWORD}" && -n "${REGISTRY_PASSWORD}" ]; then BASE_REPO_PASSWORD="${REPO_PASSWORD}" 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 "${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 "${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 -BASE_TAG=$(echo "${BASE}" | sed 's/[^:]*://') -TARGET_TAG=$(echo "${TARGET}" | sed 's/[^:]*://') +read -ra parts <<< "${TARGET_REPO}" +TARGET_REPO_USER="${parts[0]}" +TARGET_REPO_NAME="${parts[1]}" +TARGET_REPO_TAG="${parts[2]}" -BASE_REPO=$(echo "${BASE}" | sed 's/:.*//') -TARGET_REPO=$(echo "${TARGET}" | sed 's/:.*//') +if [ -n "${BASE_REGISTRY_USERNAME}" && -n "${BASE_REGISTRY_PASSWORD}" \ ] +# 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 BASE_URL="${BASE_REPO_URL}/${BASE_REPO}/tags/${BASE_TAG}"