diff --git a/.travis.yml b/.travis.yml index af5732a70..5b3795ac5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,34 @@ ---- +sudo: false language: ruby - -env: GROWSTUFF_SITE_NAME="Growstuff (travis)" RAILS_SECRET_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' -bundler_args: --without development production staging +cache: bundler +env: + matrix: + - GROWSTUFF_SITE_NAME="Growstuff (travis)" RAILS_SECRET_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' + global: + secure: "Z5TpM2jEX4UCvNePnk/LwltQX48U2u9BRc+Iypr1x9QW2o228QJhPIOH39a8RMUrepGnkQIq9q3ZRUn98RfrJz1yThtlNFL3NmzdQ57gKgjGwfpa0e4Dwj/ZJqV2D84tDGjvdVYLP7zzaYZxQcwk/cgNpzKf/jq97HLNP7CYuf4=" +bundler_args: "--without development production staging" rvm: - - 2.1.5 +- 2.1.5 before_script: - - psql -c 'create database growstuff_test;' -U postgres +- psql -c 'create database growstuff_test;' -U postgres script: - - bundle exec rake db:migrate --trace - - bundle exec rspec spec/ +- bundle exec rake db:migrate --trace +- bundle exec rspec spec/ +before_deploy: + - bundle exec script/heroku_maintenance.rb on +deploy: + provider: heroku + api_key: + secure: WrQxf0fEKkCdXrjcejurobOnNNz3he4dDwjBbToXbQTQNDObPp7NetJrLsfM8FiUFEeOuvhIHHiDQtMvY720zGGAGxDptvgFS+0QHCUqoTRZA/yFfUmHlG2jROXTzk5uVK0AE4k6Ion5kX8+mM0EnMT/7u+MTFiukrJctSiEXfg= + on: + repo: Growstuff/growstuff + app: + dev: growstuff-staging + travis_deploy: tranquil-basin-3130 + travis_containers: tranquil-basin-3130 + run: + - "rake db:migrate" + - "script/deploy-tasks.sh" + - restart +after_deploy: + - bundle exec script/heroku_maintenance.rb off diff --git a/Gemfile b/Gemfile index da976e671..fcf7b39d4 100644 --- a/Gemfile +++ b/Gemfile @@ -110,3 +110,7 @@ group :development, :test do gem 'poltergeist', '~> 1.5.1' # for headless JS testing gem 'i18n-tasks' # adds tests for finding missing and unused translations end + +group :travis do + gem 'heroku-api' +end diff --git a/Gemfile.lock b/Gemfile.lock index 9fb7a67bd..d54873d81 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -110,6 +110,7 @@ GEM thread thread_safe erubis (2.7.0) + excon (0.43.0) execjs (2.2.2) factory_girl (4.5.0) activesupport (>= 3.0.0) @@ -136,6 +137,9 @@ GEM html2haml (>= 1.0.1) railties (>= 4.0.1) hashie (3.3.2) + heroku-api (0.3.22) + excon (~> 0.38) + multi_json (~> 1.8) highline (1.6.21) hike (1.2.3) hpricot (0.8.6) @@ -358,6 +362,7 @@ DEPENDENCIES gravatar-ultimate haml haml-rails + heroku-api i18n-tasks jquery-rails jquery-ui-rails (~> 5.0.2) diff --git a/script/heroku_maintenance.rb b/script/heroku_maintenance.rb new file mode 100755 index 000000000..cf23b398f --- /dev/null +++ b/script/heroku_maintenance.rb @@ -0,0 +1,25 @@ +#!/usr/bin/env ruby + +require 'heroku-api' +require 'yaml' + +heroku = Heroku::API.new(:api_key => ENV['HEROKU_API_KEY']) +branch = ENV['TRAVIS_BRANCH'] +travis_config = YAML.load_file('.travis.yml') +if travis_config['deploy']['app'].has_key? branch + app = travis_config['deploy']['app'][branch] +else + abort "No Heroku app found for branch #{branch}" +end + +case ARGV[0] +when "on" + maintenance_state = 1 +when "off" + maintenance_state = 0 +else + abort "usage: #{$0} (on|off)" +end + +puts "Turning #{maintenance_state} maintenance mode on app #{app}" +heroku.post_app_maintenance(app, maintenance_state)