blob: 331a85ce1870c29520c0af034594fd59d926efb9 [file] [log] [blame]
Dmitry Burmistrov4dc07192025-09-01 14:19:16 +04001#!/bin/bash
2
3#
4# :mod: `upload.sh` -- Artifactory upload helper
5# =========================================================================
6#
7# .. module:: upload.sh
8# :platform: Unix
9# :synopsys: this script uploads files to JFrog Artifactory
10# instance
11#
12# .. envvar::
13# :var ARTIFACTORY_USERNAME: Access username
14# :var ARTIFACTORY_PASSWORD: Access password
15# :var ARTIFACTORY_URL: Artifactory api url
16# :var ARTIFACTORY_TARGET: Path at the repository for uploading
17# including repository name
18# :var ARTIFACTORY_PROPS: Optional artifact properties
19# :var FILE_TO_UPLOAD: Path to local file to upload
20#
21# .. requirements::
22# * ``awk``
23# * ``cat``
24# * ``curl``
25# * ``echo``
26# * ``grep``
27# * ``mktemp``
28# * ``sed``
29# * ``sha1sum``
30# * ``touch``
31#
32
33cleanup_tmpfiles() {
34 trap EXIT
35 [ -d "${TMP_DIR}" ] && rm -rf "${TMP_DIR}"
36 exit 0
37}
38
39TMP_DIR=$(mktemp -d)
40trap cleanup_tmpfiles EXIT
41
42STDOUT_FILE=${TMP_DIR}/stdout
43STDERR_FILE=${TMP_DIR}/stderr
44HEADERS_FILE=${TMP_DIR}/headers
45touch "${STDOUT_FILE}" "${STDERR_FILE}" "${HEADERS_FILE}"
46
47exec 2>${STDERR_FILE}
48
49UPLOAD_PREFIX=${FILE_TO_UPLOAD%/*}
50FILE_NAME=${FILE_TO_UPLOAD##*/}
51
52EFFECTIVE_URL="${ARTIFACTORY_URL}/${ARTIFACTORY_TARGET}/${UPLOAD_PREFIX}/${FILE_NAME};${ARTIFACTORY_PROPS}"
53
54FILE_SHA1_CHECKSUM=$(sha1sum "${FILE_TO_UPLOAD}" | awk '{print $1}')
55
56curl \
57 --silent \
58 --show-error \
59 --location \
dbiletskiyb8ed1ba2025-09-06 12:03:30 +020060 --globoff \
Dmitry Burmistrov4dc07192025-09-01 14:19:16 +040061 --dump-header "${HEADERS_FILE}" \
62 --output "${STDOUT_FILE}" \
63 --user "${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD}" \
64 --request PUT \
65 --header "X-Checksum-Sha1:${FILE_SHA1_CHECKSUM}" \
66 --upload-file "${FILE_TO_UPLOAD}" \
67 --url "${EFFECTIVE_URL}"
68
69EXIT_CODE=$?
70HTTP_RESPONSE_CODE=$(cat "${HEADERS_FILE}" | grep '^HTTP' | awk '{print $2}')
71
72if [ "${HTTP_RESPONSE_CODE:0:1}" != "2" ]; then
73 >&2 echo "Failed at ${EFFECTIVE_URL}"
74fi
75
76for outfile in "${STDOUT_FILE}" "${STDERR_FILE}"; do
77 sed -z -i \
78 -e 's|\n|\\n|g' \
79 -e 's|"|\\"|g' \
80 -e 's|\r||g' \
81 "${outfile}"
82done
83
84cat << EOF
85{
86 "stdout": "$(cat ${STDOUT_FILE})",
87 "stderr": "$(cat ${STDERR_FILE})",
88 "exit_code": ${EXIT_CODE},
89 "response_code": ${HTTP_RESPONSE_CODE:-null},
90}
91EOF