blob: 331a85ce1870c29520c0af034594fd59d926efb9 [file] [log] [blame]
#!/bin/bash
#
# :mod: `upload.sh` -- Artifactory upload helper
# =========================================================================
#
# .. module:: upload.sh
# :platform: Unix
# :synopsys: this script uploads files to JFrog Artifactory
# instance
#
# .. envvar::
# :var ARTIFACTORY_USERNAME: Access username
# :var ARTIFACTORY_PASSWORD: Access password
# :var ARTIFACTORY_URL: Artifactory api url
# :var ARTIFACTORY_TARGET: Path at the repository for uploading
# including repository name
# :var ARTIFACTORY_PROPS: Optional artifact properties
# :var FILE_TO_UPLOAD: Path to local file to upload
#
# .. requirements::
# * ``awk``
# * ``cat``
# * ``curl``
# * ``echo``
# * ``grep``
# * ``mktemp``
# * ``sed``
# * ``sha1sum``
# * ``touch``
#
cleanup_tmpfiles() {
trap EXIT
[ -d "${TMP_DIR}" ] && rm -rf "${TMP_DIR}"
exit 0
}
TMP_DIR=$(mktemp -d)
trap cleanup_tmpfiles EXIT
STDOUT_FILE=${TMP_DIR}/stdout
STDERR_FILE=${TMP_DIR}/stderr
HEADERS_FILE=${TMP_DIR}/headers
touch "${STDOUT_FILE}" "${STDERR_FILE}" "${HEADERS_FILE}"
exec 2>${STDERR_FILE}
UPLOAD_PREFIX=${FILE_TO_UPLOAD%/*}
FILE_NAME=${FILE_TO_UPLOAD##*/}
EFFECTIVE_URL="${ARTIFACTORY_URL}/${ARTIFACTORY_TARGET}/${UPLOAD_PREFIX}/${FILE_NAME};${ARTIFACTORY_PROPS}"
FILE_SHA1_CHECKSUM=$(sha1sum "${FILE_TO_UPLOAD}" | awk '{print $1}')
curl \
--silent \
--show-error \
--location \
--globoff \
--dump-header "${HEADERS_FILE}" \
--output "${STDOUT_FILE}" \
--user "${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD}" \
--request PUT \
--header "X-Checksum-Sha1:${FILE_SHA1_CHECKSUM}" \
--upload-file "${FILE_TO_UPLOAD}" \
--url "${EFFECTIVE_URL}"
EXIT_CODE=$?
HTTP_RESPONSE_CODE=$(cat "${HEADERS_FILE}" | grep '^HTTP' | awk '{print $2}')
if [ "${HTTP_RESPONSE_CODE:0:1}" != "2" ]; then
>&2 echo "Failed at ${EFFECTIVE_URL}"
fi
for outfile in "${STDOUT_FILE}" "${STDERR_FILE}"; do
sed -z -i \
-e 's|\n|\\n|g' \
-e 's|"|\\"|g' \
-e 's|\r||g' \
"${outfile}"
done
cat << EOF
{
"stdout": "$(cat ${STDOUT_FILE})",
"stderr": "$(cat ${STDERR_FILE})",
"exit_code": ${EXIT_CODE},
"response_code": ${HTTP_RESPONSE_CODE:-null},
}
EOF