#!/bin/bash -e # upload_framework.sh # # Downloads an iOS framework from Artificatory. # # An API key from Artifcatory is required in the api_key.private file before uploading. # URL=$1 LOCALPATH="${2}" REMOTEPATH="${3}" LOGFILE=$3 LOCALDIR=$(dirname "${LOCALPATH}") LOCALBASE=$(basename "${LOCALPATH}") NEWFILEPATH="${LOCALDIR}"/$(basename "${REMOTEPATH}") VERSIONFILE=./Checksums/"${LOCALBASE}".txt if [ -z $URL ]; then echo "The artifactory instance url must be specified as the first argument!" exit 1 fi if [ -z $LOGFILE ]; then LOGFILE="/tmp/${LOCALBASE}.txt" fi #first argument is error message. exit_with_error () { echo "Error: $1" >> "${LOGFILE}" if [ -f "${NEWFILEPATH}" ]; then rm -rf "${NEWFILEPATH}" 2>>"${LOGFILE}" fi exit 1 } echo "----------------------------------------------------------" >> $LOGFILE echo "Logs for ${LOCALBASE}" >> $LOGFILE echo -e "Local Target: ${LOCALPATH}" >> $LOGFILE echo -e "Remote Source: ${REMOTEPATH}" >> $LOGFILE if [ -z "$LOCALPATH" ]; then exit_with_error "Missing local path argument" fi if [ -z "$REMOTEPATH" ]; then exit_with_error "Missing filename path argument" fi #get local and remote checksums for comparison echo -e "Getting checksums..." >> $LOGFILE echo -e "URL: ${URL}/api/storage/${REMOTEPATH}" >> $LOGFILE JSON=$(curl --header "X-JFrog-Art-Api: ${APITOKEN}" -X GET "${URL}/api/storage/${REMOTEPATH}" 2>>"${LOGFILE}") CHECKSUM=$(echo "$JSON" | python -c 'import sys, json; print json.load(sys.stdin)["checksums"]["sha1"]') 2>>"${LOGFILE}" if [[ -z "$CHECKSUM" ]]; then exit_with_error "No Checksum found in json: ${JSON}" fi echo "Remote checksum ${CHECKSUM}" >> "${LOGFILE}" OLDCHECKSUM=$(cat "${VERSIONFILE}" 2>/dev/null) echo "Local checksum ${OLDCHECKSUM}" >> "${LOGFILE}" #get new framework if no original framework, no local checksum, or remote checksum is different from local. if [ ! -e "${LOCALPATH}" ] || [ -z "$OLDCHECKSUM" ] || [ "$CHECKSUM" != "$OLDCHECKSUM" ]; then echo "Downloading..." >> "${LOGFILE}" echo -e "URL: ${URL}/${REMOTEPATH}" >> $LOGFILE curl --header "X-JFrog-Art-Api: ${APITOKEN}" -f -X GET "$URL/$REMOTEPATH" --output "${NEWFILEPATH}" 2>>"${LOGFILE}" if [ $? -eq 0 ] && [ -e "${NEWFILEPATH}" ]; then echo "Finished Downloading, begin unzip" >> "${LOGFILE}" unzip -q -o "${NEWFILEPATH}" -d "${LOCALDIR}" 2>>"${LOGFILE}" if [ $? -eq 0 ]; then echo "Finished unzipping, remove zip" >> "${LOGFILE}" rm -rf "${NEWFILEPATH}" 2>>"${LOGFILE}" echo "Writing new checksum to file" >> "${LOGFILE}" echo "${CHECKSUM}" > "${VERSIONFILE}" 2>>"${LOGFILE}" echo "Successfully downloaded and unzipped archive." >> "${LOGFILE}" else exit_with_error "Error unzipping" fi else exit_with_error "Failed to download" fi else echo "Successful, No New Version" >> "${LOGFILE}" fi