#!/bin/bash # # rebund(1) # # Author: Julien Letessier # Homepage: https://github.com/mezis/rebund # License: # # Copyright (c) 2014 HouseTrip Ltd # # MIT License # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # Configuration : ${REBUND_CREDENTIALS:=user:secret} : ${REBUND_ENDPOINT=http://keyfile-production.herokuapp.com} : ${REBUND_TARBALL:=bundle.tbz} : ${REBUND_BUNDLE_DIR:=vendor/bundle} log() { echo "rebund: $*" > /dev/stderr } die() { echo "fatal: $*" > /dev/stderr exit 1 } success() { log "$*" exit 0 } on_error() { die 'unknown error.' } get_ruby_version() { bundle exec ruby --version } get_gemfile() { bundle exec sh -c 'echo $BUNDLE_GEMFILE' } calculate_hash() { (get_ruby_version ; cat $(get_gemfile)) | openssl sha256 | sed -e 's/.* //' } build_tarball() { test -e $REBUND_BUNDLE_DIR || die "cannot find bundle directory in ${REBUND_BUNDLE_DIR}" test -e $REBUND_TARBALL && success 'bundle already uploaded' tar jcf $REBUND_TARBALL $REBUND_BUNDLE_DIR } upload_tarball() { curl --fail \ -F filedata=@${REBUND_TARBALL} \ --digest --user $REBUND_CREDENTIALS \ ${REBUND_ENDPOINT}/$(calculate_hash) \ || success "could not upload bundle" } expand_tarball() { test -e $REBUND_TARBALL || success "no tarball" tar jxf $REBUND_TARBALL } download_tarball() { curl --fail \ --location \ -o ${REBUND_TARBALL} \ --digest --user $REBUND_CREDENTIALS \ ${REBUND_ENDPOINT}/$(calculate_hash) \ || success "could not download bundle" } rebund_upload() { build_tarball upload_tarball } rebund_download() { download_tarball expand_tarball } rebund_usage() { success "usage: $0 [-v] [upload|download]" } # cath errors trap on_error ERR # inherit the ERR trap in subprocesses set -E while test $# -gt 0 ; do case $1 in -v) set -x ;; upload) rebund_upload exit 0 ;; download) rebund_download exit 0 ;; *) rebund_usage exit 1 ;; esac shift done rebund_usage