#! /bin/sh # vim:sw=4 ts=4 et: BUCKET=releases.wagtail.io REGION=eu-west-1 CF_DISTRIBUTION=E283SZ5CB4MDM0 # Find the location of the AWS CLI binary. MacPorts sometimes put it in a # weird place, so to be helpful we check those locations as well. if [ -z "${AWS_CLI}" ]; then for d in $(echo "${PATH}" | tr ':' ' ') \ /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin \ /opt/local/Library/Frameworks/Python.framework/Versions/3.4/bin \ ; do if [ -x "${d}/aws" ]; then AWS_CLI="${d}/aws" break fi done if [ -z "${AWS_CLI}" ]; then printf >&2 -- '%s: cannot find AWS CLI binary "aws"\n' "$0" printf >&2 -- '%s: please install AWS from http://aws.amazon.com/documentation/cli/\n' "$0" exit 1 fi fi # CloudFront support in the CLI is still in beta. $AWS_CLI configure set preview.cloudfront true _usage() { printf >&2 -- 'usage: %s get [output-filename]\n' "$0" printf >&2 -- ' %s put [input-filename]\n' "$0" printf >&2 -- ' %s \n' "$0" } if [ "$#" -lt 1 ]; then _usage exit 1 fi _get() { if ! $AWS_CLI s3 cp --region "${REGION}" "s3://${BUCKET}/latest.txt" "$1"; then printf >&2 -- "%s: failed to download latest.txt; see above messages\\n" "$0" exit 1 fi } _put() { if ! $AWS_CLI s3 cp --acl public-read --region "${REGION}" "$1" "s3://${BUCKET}/latest.txt"; then printf >&2 -- "%s: failed to upload latest.txt; see above messages\\n" "$0" exit 1 fi $AWS_CLI >/dev/null cloudfront create-invalidation \ --distribution-id "$CF_DISTRIBUTION" \ --invalidation-batch \ '{ "Paths": { "Items": [ "/latest.txt" ], "Quantity": 1 }, "CallerReference": "latest.sh" }' } if [ "$1" = "get" ]; then if [ "$#" -lt 2 ]; then _usage exit 1 fi shift if [ -e "$2" ]; then printf >&2 -- "%s: \"%s\": already exists, won't overwrite\\n" "$0" exit 1 fi _get "$@" elif [ "$1" = "put" ]; then if [ "$#" -lt 2 ]; then _usage exit 1 fi shift _put "$@" elif [ "$1" = "edit" -o "$1" = "vi" ]; then LTMP=$(mktemp "${TMPDIR:-/tmp}/latest.XXXXXX") if [ "$?" -ne 0 ]; then printf >&2 -- '%s: cannot create temporary file\n' "$0" exit 1 fi trap 'rm -f "${LTMP}"' 0 TERM INT LTMP2=$(mktemp "${TMPDIR:-/tmp}/latest.XXXXXX") if [ "$?" -ne 0 ]; then printf >&2 -- '%s: cannot create temporary file\n' "$0" exit 1 fi trap 'rm -f "${LTMP2}"' 0 TERM INT if ! _get "${LTMP}"; then exit 1 fi cp "${LTMP}" "${LTMP2}" if [ ! -z "${VISUAL}" ]; then editor="${VISUAL}" elif [ ! -z "${EDITOR}" ]; then editor="${EDITOR}" else editor='vi' fi $editor "${LTMP}" if cmp "${LTMP}" "${LTMP2}" >/dev/null; then printf >&2 -- '%s: no changes; exiting\n' "$0" exit fi diff -u "${LTMP2}" "${LTMP}" _put "${LTMP}" fi