1
0
intel-media-ffmpeg/scripts/promote-image.sh
James Ketrenos 274dc3f597 Quote the USER:PASSWD so it can handle escapes
Signed-off-by: James Ketrenos <james.p.ketrenos@intel.com>
2020-01-28 14:33:59 -08:00

84 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
# Bring in the variables from SOLUTION file, supporting
# nested substitution
. SOLUTION
. MANIFEST
VARS=($(sed -nE "s,(^[^#][^=]*).*$,\1,pg" SOLUTION))
VARS+=($(sed -nE "s,(^[^#][^=]*).*$,\1,pg" MANIFEST))
for var in ${VARS[@]}; do
export ${var}
done
RELEASE_INFO=${RELEASE_INFO:-N/A}
[[ "${RELEASE_INFO}" == "N/A" ]] && {
TAG=${TAG:-${OS_DISTRO}-${PACKAGE_STREAM}-$(date +%Y%m%d)}
} || {
TAG=${TAG:-${OS_DISTRO}-${PACKAGE_STREAM}-${RELEASE_INFO}}
}
[[ "${TARGET_TAG}" != "" ]] || {
echo >&2 "TARGET_TAG needs to be set to the tag to push to Harbor"
exit 1
}
function fail {
>&2 echo "$*"
exit -1
}
cat << EOF
The following will publish latest rolling image:
1. Pull ${CONTAINER}:${TAG}
2. Tag #1 as ${CONTAINER}:${TARGET_TAG}
3. Tag #1 as ${CONTAINER}:latest-${TARGET_TAG}
4. Delete ${CONTAINER}:${TAG}
5. Push #2
6. Push #3
EOF
docker pull ${REGISTRY_URL}/${CONTAINER}:${TAG} ||
fail "Unable to pull image"
docker tag ${REGISTRY_URL}/${CONTAINER}:${TAG} \
${REGISTRY_URL}/${CONTAINER}:${TARGET_TAG} ||
fail "Unable to tag image (1/2)"
docker tag ${REGISTRY_URL}/${CONTAINER}:${TAG} \
${REGISTRY_URL}/${CONTAINER}:latest-${TARGET_TAG} ||
fail "Unable to tag image (2/2)"
# Parse out the FQDN from the REGISTRY_URL and escape
# the group/project/path
FQDN=${REGISTRY_URL%%/*}
PROJECT=$(echo ${REGISTRY_URL#*/}/${CONTAINER} | sed s,/,%2F,g)
echo -e "Deleting tag:\n ${CONTAINER}:${TAG}\nFrom:\n ${PROJECT}"
RESULTS=$(curl --noproxy '*' -s -k \
-u "${HARBOR_USER}:${HARBOR_PASSWD}" \
-i \
-X DELETE \
-H "accept: application/json" \
"https://${FQDN}/api/repositories/${PROJECT}/tags/${TAG}")
echo ${RESULTS} | grep -q "HTTP.*200" && {
echo "Tag deleted successfully."
} || {
>&2 echo "Error deleting tag:"
>&2 echo "${RESULTS}"
exit 1
}
docker push ${REGISTRY_URL}/${CONTAINER}:${TARGET_TAG} ||
fail "Unable to push ${CONTAINER}:${TARGET_TAG}"
docker push ${REGISTRY_URL}/${CONTAINER}:latest-${TARGET_TAG} ||
fail "Unable to push ${CONTAINER}:latest-${TARGET_TAG}"
echo "Done tagging and pushing ${CONTAINER} as ${TARGET_TAG}"