#!/bin/sh beginsWith() { case $2 in "$1"*) true;; *) false;; esac; } PATH=$(pwd)/bin:$PATH export PATH ENABLE_UPLOAD=$1 BITBUCKET_AUTH=$2 BITBUCKET_TESTING=$3 if [ "$BITBUCKET_TESTING" = "1" ]; then REPOSITORY=repertory-testing else REPOSITORY=repertory-ui fi PRIVATE_KEY=../../blockstorage_dev_private.pem PUBLIC_KEY=../blockstorage_dev_public.pem APP_VER=$(grep -m1 -a version package.json|sed -e "s/\"//g" -e "s/version: //g" -e "s/,//g" -e "s/ //g") if beginsWith darwin "$OSTYPE"; then DISTRO_LIST="darwin" OUT_FILE=repertory-ui_${APP_VER}_mac.dmg BASE64_EXEC=base64 JQ_EXEC=jq-osx-amd64 SHA256_EXEC="shasum -a 256 -b" else DISTRO_LIST="centos7 linux solus" OUT_FILE=repertory-ui_${APP_VER}_linux_x86_64.AppImage BASE64_EXEC="base64 -w0" JQ_EXEC=jq-linux64 SHA256_EXEC="sha256sum -b" fi exit_script() { echo $1 exit 1 } upload_to_bitbucket() { SOURCE_FILE=$1 echo "Uploading ${SOURCE_FILE} to Bitbucket ${REPOSITORY}" curl --fail -u "${BITBUCKET_AUTH}" -X POST https://api.bitbucket.org/2.0/repositories/blockstorage/${REPOSITORY}/downloads -F files=@${SOURCE_FILE} > upload_response.json || exit_script "Upload to Bitbucket failed: ${SOURCE_FILE}" } chmod +x "bin/${JQ_EXEC}" || exit_script "chmod +x ${JQ_EXEC} failed" npm install if npm run dist; then cd dist ${SHA256_EXEC} ${OUT_FILE} > ${OUT_FILE}.sha256 || exit_script "Create sha256 failed" openssl dgst -sha256 -sign "${PRIVATE_KEY}" -out "${OUT_FILE}.sig" "${OUT_FILE}" || exit_script "Create signature failed" openssl dgst -sha256 -verify "${PUBLIC_KEY}" -signature "${OUT_FILE}.sig" "${OUT_FILE}" || exit_script "Verify signature failed" ${BASE64_EXEC} "${OUT_FILE}.sig" > "${OUT_FILE}.sig.b64" || exit_script "Create base64 failed" if [ "$ENABLE_UPLOAD" = "1" ]; then APP_SIG=$(cat ${OUT_FILE}.sig.b64) APP_SHA256=$(cat ${OUT_FILE}.sha256 | awk '{print $1;}') rm -f upload_response.json 1>/dev/null 2>&1 upload_to_bitbucket "${OUT_FILE}" upload_to_bitbucket "${OUT_FILE}.sha256" upload_to_bitbucket "${OUT_FILE}.sig" BITBUCKET_LOCATION=https://bitbucket.org/blockstorage/${REPOSITORY}/downloads/${OUT_FILE} cp -f ../releases.json ./releases.json for DISTRONAME in ${DISTRO_LIST}; do ${JQ_EXEC} ".Versions[\"${DISTRONAME}\"]|=(.+ [\"${APP_VER}\"]|unique)" releases.json > releases_temp.json || exit_script "Update releases.json Versions failed" ${JQ_EXEC} ".Locations[\"${DISTRONAME}\"].\"${APP_VER}\".sig=\"${APP_SIG}\"" releases_temp.json > releases.json || exit_script "Update releases.json sig failed" ${JQ_EXEC} ".Locations[\"${DISTRONAME}\"].\"${APP_VER}\".sha256=\"${APP_SHA256}\"" releases.json > releases_temp.json || exit_script "Update releases.json sha256 failed" ${JQ_EXEC} ".Locations[\"${DISTRONAME}\"].\"${APP_VER}\".urls=[\"${BITBUCKET_LOCATION}\"]" releases_temp.json > releases.json || exit_script "Update releases.json URL failed" done rm -f releases_temp.json fi cd - else exit_script "Create dist failed" fi