+load_docker_images () {
+ for ARCHIVE in $(sed $'s/\r// ; /^#/d ; s/\:/\_/g ; s/\//\_/g ; s/$/\.tar/g' ${1} | awk '{ print $1 }'); do
+ docker load -i ${NXS_SRC_DOCKER_IMG_DIR}/${ARCHIVE}
+ done
+}
+
+prepare_npm () {
+ # Configure NPM registry to our Nexus repository
+ echo "Configure NPM registry to ${NPM_REGISTRY}"
+ npm config set registry "${NPM_REGISTRY}"
+
+ # Login to NPM registry
+ /usr/bin/expect <<- EOF
+ spawn npm login
+ expect "Username:"
+ send "${NEXUS_USERNAME}\n"
+ expect "Password:"
+ send "${NEXUS_PASSWORD}\n"
+ expect Email:
+ send "${NEXUS_EMAIL}\n"
+ expect eof
+ EOF
+}
+
+patch_npm () {
+ # Patch problematic package
+ PATCHED_NPM="$(grep tsscmp ${1} | sed $'s/\r// ; s/\\@/\-/ ; s/$/\.tgz/')"
+ if [[ ! -z "${PATCHED_NPM}" ]] && ! zgrep -aq "${NPM_REGISTRY}" "${PATCHED_NPM}" 2>/dev/null
+ then
+ tar xzf "${PATCHED_NPM}"
+ rm -f "${PATCHED_NPM}"
+ sed -i 's|\"registry\":\ \".*\"|\"registry\":\ \"'"${NPM_REGISTRY}"'\"|g' package/package.json
+ tar -zcf "${PATCHED_NPM}" package
+ rm -rf package
+ fi
+}
+
+push_npm () {
+ for ARCHIVE in $(sed $'s/\r// ; s/\\@/\-/g ; s/$/\.tgz/g' ${1}); do
+ npm publish --access public ${ARCHIVE} > /dev/null
+ echo "NPM ${ARCHIVE} pushed to Nexus"
+ done
+}
+
+push_pip () {
+ for PACKAGE in $(sed $'s/\r//; s/==/-/' ${1}); do
+ twine upload -u "${NEXUS_USERNAME}" -p "${NEXUS_PASSWORD}" --repository-url ${PYPI_REGISTRY} ${PACKAGE}* > /dev/null
+ echo "PYPI ${PACKAGE} pushed to Nexus"
+ done
+}
+
+docker_login () {
+ echo "Docker login to ${DOCKER_REGISTRY}"
+ echo -n "${NEXUS_PASSWORD}" | docker --config "${DOCKER_CONFIG_DIR}" login -u "${NEXUS_USERNAME}" --password-stdin ${DOCKER_REGISTRY} > /dev/null
+}
+
+push_docker () {
+ for IMAGE in $(sed $'s/\r// ; /^#/d' ${1} | awk '{ print $1 }'); do
+ PUSH=""
+ if [[ ${IMAGE} != *"/"* ]]; then
+ PUSH="${DOCKER_REGISTRY}/library/${IMAGE}"
+ elif [[ ${IMAGE} == *"${DEFAULT_REGISTRY}"* ]]; then
+ if [[ ${IMAGE} == *"/"*"/"* ]]; then
+ PUSH="$(sed 's/'"${DEFAULT_REGISTRY}"'/'"${DOCKER_REGISTRY}"'/' <<< ${IMAGE})"
+ else
+ PUSH="$(sed 's/'"${DEFAULT_REGISTRY}"'/'"${DOCKER_REGISTRY}"'\/library/' <<< ${IMAGE})"
+ fi
+ elif [[ -z $(sed -n '/\.[^/].*\//p' <<< ${IMAGE}) ]]; then
+ PUSH="${DOCKER_REGISTRY}/${IMAGE}"
+ else
+ # substitute all host names with $DOCKER_REGISTRY
+ repo_host=$(sed -e 's/\/.*$//' <<< ${IMAGE})
+ PUSH="$(sed -e 's/'"${repo_host}"'/'"${DOCKER_REGISTRY}"'/' <<< ${IMAGE})"
+ fi
+ docker tag ${IMAGE} ${PUSH}
+ docker --config "${DOCKER_CONFIG_DIR}" push ${PUSH}
+ # Remove created tag
+ docker rmi ${PUSH}
+ echo "${IMAGE} pushed as ${PUSH} to Nexus"
+ done
+}
+
+validate_container_name () {
+ # Verify $1 is a valid hostname
+ if ! echo "${1}" | egrep -q "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$";
+ then
+ echo "ERROR: ${1} is not a valid name!"
+ exit 1;
+ fi
+}
+
+while [ "${1}" != "" ]; do
+ case ${1} in
+ -d | --docker ) shift
+ NXS_DOCKER_IMG_LISTS+=("$(realpath ${1})")
+ ;;