#!/bin/bash # Bring in the variables from SOLUTION file, supporting # nested substitution . SOLUTION VARS=($(sed -nE "s,(^[^#][^=]*).*$,\1,pg" SOLUTION)) 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}" HEADER="Authorization:Basic $(echo -n "${HARBOR_USER}:${HARBOR_PASSWD}" | base64)" RESULTS=$(curl --noproxy '*' -s -k \ -i \ -X DELETE \ -H "${HEADER}" \ -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}"