141 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/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
 |