aboutsummaryrefslogtreecommitdiff
path: root/scripts/wasabi.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/wasabi.sh')
-rwxr-xr-xscripts/wasabi.sh73
1 files changed, 73 insertions, 0 deletions
diff --git a/scripts/wasabi.sh b/scripts/wasabi.sh
new file mode 100755
index 00000000..95fb3ee9
--- /dev/null
+++ b/scripts/wasabi.sh
@@ -0,0 +1,73 @@
+#!/bin/bash
+# Updates the specified program manifest to a new archive and version
+# and uploads the new archive and manifest to S3/Wasabi.
+#
+# Requires:
+# MANIFEST: name of the manifest file
+# S3_ACCESS_KEY, S3_SECRET_KEY: S3 credentials
+# S3_MANIFESTS, S3_ARCHIVES: S3 paths to manifests and downloads
+# ARCHIVE_FULL: name of the full archive (if desired)
+# ARCHIVE_INCR: name of the incremental archive (if desired)
+# VERSION: name of the new version
+# EXECUTABLE: name of the executable (if program manifest)
+
+
+# -E: inherit ERR trap by shell functions
+# -e: stop script on ERR trap
+# -u: stop script on unbound variables
+# -x: print command before running it
+# -o pipefail: fail if any command in a pipeline fails
+set -Eeuxo pipefail
+
+aws configure set aws_access_key_id ${S3_ACCESS_KEY}
+aws configure set aws_secret_access_key ${S3_SECRET_KEY}
+aws configure set default.region us-east-1
+
+export S3_COPY="aws s3 cp --endpoint-url=https://s3.wasabisys.com"
+
+export ARCHIVE_FULL_ARG=""
+export ARCHIVE_INCR_ARG=""
+export EXECUTABLE_ARG=""
+
+export LAST_TAGGED_VERSION=$(git rev-list --tags --skip=1 --max-count=1)
+echo "Previous tagged version: ${LAST_TAGGED_VERSION}"
+echo "Current tagged version: ${VERSION}"
+
+if [[ -n $ARCHIVE_INCR && -n $LAST_TAGGED_VERSION ]]; then
+ echo "Incremental archive: ${ARCHIVE_INCR}"
+
+ # Get all files
+ export CHANGES_FILE="changes.txt"
+ git diff --name-status ${LAST_TAGGED_VERSION}..HEAD > ${CHANGES_FILE}
+
+ # Get added/modified files
+ git diff --name-only --diff-filter=dr ${LAST_TAGGED_VERSION}..HEAD | \
+ zip ${ARCHIVE_INCR} -@
+
+ export ARCHIVE_INCR_ARG="-i ${ARCHIVE_INCR} ${CHANGES_FILE}"
+elif [[ -n $ARCHIVE_INCR && -z $LAST_TAGGED_VERSION ]]; then
+ echo "Incremental archive was requested, but there is no previous version"
+fi
+
+if [[ -n $ARCHIVE_FULL ]]; then
+ echo "Full archive: ${ARCHIVE_INCR}"
+ export ARCHIVE_FULL_ARG="-f ${ARCHIVE_FULL}"
+fi
+
+if [[ -v EXECUTABLE ]]; then
+ export EXECUTABLE_ARG="-e ${EXECUTABLE}"
+fi
+
+${S3_COPY} ${S3_MANIFESTS}/${MANIFEST} .
+node $(dirname $0)/update_manifest.js ${MANIFEST} ${VERSION} \
+ ${ARCHIVE_FULL_ARG} ${ARCHIVE_INCR_ARG} ${EXECUTABLE_ARG}
+
+if [[ -n $ARCHIVE_INCR_ARG ]]; then
+ ${S3_COPY} ${ARCHIVE_INCR} ${S3_ARCHIVES}
+fi
+
+if [[ -n $ARCHIVE_FULL_ARG ]]; then
+ ${S3_COPY} ${ARCHIVE_FULL} ${S3_ARCHIVES}
+fi
+
+${S3_COPY} ${MANIFEST} ${S3_MANIFESTS}