diff --git a/.travis.yml b/.travis.yml index 17ded23a..42664eb3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,28 @@ language: ruby cache: bundler -before_install: - - gem install bundler +install: +- script/rebund download +- bundle install --path vendor/bundle rvm: - - 2.1.0 - - 2.0.0 - - 1.9.3 - - 1.9.2 -script: bundle exec rake +- 2.1.0 +- 2.0.0 +- 1.9.3 +- 1.9.2 +script: script/cibuild +after_script: +- script/rebund upload notifications: irc: on_success: change on_failure: change channels: - - "irc.freenode.org#jekyll" - #on_success: change - #on_failure: change + - irc.freenode.org#jekyll template: - - "%{repository}#%{build_number} (%{branch}) %{message} %{build_url}" + - '%{repository}#%{build_number} (%{branch}) %{message} %{build_url}' email: on_success: never on_failure: never +env: + global: + - secure: DQ8RKNaeErucKnmOWKxWHQ76GBr50wNf2ywz/kQtriXpvXEhD3zVJus0jC34ykCK4CqW2WBha8nO4NtmPJRVII5qHyJB2+pxheMK++UZ2+mJ+8CVbqtcjpMZMkfRJj0C9rktG7Onk9QANZGIBf79HPnhZXjKqX9XFwI1tbyl3kw= + - secure: gG7GIWmdzbAv/qt9RyE96M/BNGMWhrVkQIL5cKZ0N4rwuAZzfqays9EE+jF9Nu1IwG6bfTUu7C75vzQnJkL8zBq5ddsQCJ+DIhh4o4QqsTwh4/0uiRMG87EBa2ASKn4afx181fXOUoGZtcbMqfEW0Eaidl4Z+8qEx4KxVghRlx8= diff --git a/script/rebund b/script/rebund new file mode 100755 index 00000000..7aa2db2c --- /dev/null +++ b/script/rebund @@ -0,0 +1,140 @@ +#!/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