thincloud-deployment 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/.gitignore +18 -0
  2. data/.ruby-version +1 -0
  3. data/.travis.yml +12 -0
  4. data/Gemfile +4 -0
  5. data/Guardfile +8 -0
  6. data/LICENSE +22 -0
  7. data/README.md +84 -0
  8. data/Rakefile +1 -0
  9. data/TODO.md +3 -0
  10. data/bin/thincloud-capify +5 -0
  11. data/bin/thincloud-deployment +60 -0
  12. data/lib/thincloud-deployment.rb +8 -0
  13. data/lib/thincloud/capistrano.rb +20 -0
  14. data/lib/thincloud/deployment.rb +1 -0
  15. data/lib/thincloud/deployment/deployment_generator.rb +60 -0
  16. data/lib/thincloud/deployment/templates/Capfile +7 -0
  17. data/lib/thincloud/deployment/templates/Procfile +1 -0
  18. data/lib/thincloud/deployment/templates/deploy.rb +11 -0
  19. data/lib/thincloud/deployment/templates/foreman +2 -0
  20. data/lib/thincloud/deployment/templates/stages/production.rb +3 -0
  21. data/lib/thincloud/deployment/templates/stages/staging.rb +3 -0
  22. data/lib/thincloud/deployment/version.rb +5 -0
  23. data/lib/thincloud/recipes/bundler.rb +8 -0
  24. data/lib/thincloud/recipes/deploy.rb +78 -0
  25. data/lib/thincloud/recipes/fast_remote_cache.rb +5 -0
  26. data/lib/thincloud/recipes/flowdock.rb +5 -0
  27. data/lib/thincloud/recipes/foreman.rb +27 -0
  28. data/lib/thincloud/recipes/git.rb +6 -0
  29. data/lib/thincloud/recipes/log.rb +19 -0
  30. data/lib/thincloud/recipes/new_relic.rb +4 -0
  31. data/lib/thincloud/recipes/rvm.rb +6 -0
  32. data/test/ci/before_script.sh +6 -0
  33. data/test/ci/ci_runner.sh +8 -0
  34. data/test/minitest_helper.rb +18 -0
  35. data/test/support/minitest_reporters.rb +4 -0
  36. data/test/support/mocha.rb +1 -0
  37. data/test/thincloud-deployment_test.rb +5 -0
  38. data/thincloud-deployment.gemspec +32 -0
  39. metadata +215 -0
@@ -0,0 +1,18 @@
1
+ .DS_Store
2
+ *.gem
3
+ *.rbc
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
@@ -0,0 +1 @@
1
+ 1.9.3@thincloud-deployment
@@ -0,0 +1,12 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - jruby-19mode
6
+ - rbx-19mode
7
+ env:
8
+ - CI=true RAILS_ENV=test JRUBY_OPTS=--1.9 RBXOPT=-X19
9
+ before_script: "./test/ci/before_script.sh"
10
+ script: "./test/ci/ci_runner.sh"
11
+ notifications:
12
+ flowdock: 1ec5c0efa5a264c67c6ba3b2e6574a70
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in thincloud-deployment.gemspec
4
+ gemspec
@@ -0,0 +1,8 @@
1
+ guard "minitest" do
2
+ # with Minitest::Spec
3
+ watch(%r|^test/(.*)_test\.rb|)
4
+ watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "test/#{m[1]}#{m[2]}_test.rb" }
5
+ watch(%r|^test/minitest_helper\.rb|) { "test" }
6
+ watch(%r|^test/support/|) { "test" }
7
+ end
8
+
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 New Leaders
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,84 @@
1
+ # Thincloud::Deployment
2
+
3
+ Opinionated framework dependencies, configuration, and recipes for Capistrano-based deployments.
4
+
5
+ [New Leaders](https://newleaders.com) uses this gem to manage the following dependencies:
6
+
7
+ * [capistrano](https://github.com/capistrano/capistrano)
8
+ * [capistrano-fast_remote_cache](https://github.com/newleaders/capistrano-fast_remote_cache)
9
+ * [flowdock](https://github.com/flowdock/flowdock-api)
10
+ * [grit](https://github.com/mojombo/grit)
11
+ * [rvm-capistrano](https://github.com/wayneeseguin/rvm-capistrano)
12
+
13
+ ## Requirements
14
+
15
+ This gem has been test against the following Ruby versions:
16
+
17
+ * 1.9.3
18
+
19
+ ## Installation
20
+
21
+ Add this line to your application's Gemfile:
22
+
23
+ gem 'thincloud-deployment'
24
+
25
+ And then execute:
26
+
27
+ $ bundle
28
+
29
+ Or install it yourself as:
30
+
31
+ $ gem install thincloud-deployment
32
+
33
+ ## Usage
34
+
35
+ This gem manages the deployment framework dependencies for you, provides a default set of `capistrano` recipes, and provides a `Thor` generator to bootstrap application deployment.
36
+
37
+ This is typically used in `Rails` applications so a rails-like folder structure is assumed when running the generator.
38
+
39
+ To enable the default New Leaders conventions, run the following command:
40
+
41
+ ```
42
+ $ thincloud-capify
43
+ ```
44
+
45
+ If you are running this from the provided Rails generator, run:
46
+
47
+ ```
48
+ $ rails g thincloud:deployment
49
+ ```
50
+
51
+ This generator will do the following:
52
+
53
+ * Add `Capfile` at the root of your project
54
+ * Add `config/deploy.rb` for application-level deployment settings
55
+ * Add `config/deploy/staging.rb` and `config/deploy/production.rb` for stage-level deployment settings.
56
+ * Add the `lib/recipes` directory to store project specific recipes.
57
+ * Set up `foreman`
58
+
59
+ ### Configuration
60
+
61
+ All conventional settings are contained in the gem recipes and are loaded into the `Capistrano` configuration during startup.
62
+
63
+ `thincloud-deployment` follows the `Capistrano` multistage deployment strategy. As you can see in the generator description above, we create an application `deploy.rb` as well as individual stage files (`staging.rb`, `production.rb`).
64
+
65
+ Any of the tasks or settings can be overriden in these files.
66
+
67
+ #### Adding stages
68
+
69
+ Just add a new `Ruby` file under `config/deploy`. To add a `demo` stage you would create `config/deploy/demo.rb`.
70
+
71
+ ## Contributing
72
+
73
+ 1. [Fork it](https://github.com/newleaders/thincloud-deployment/fork_select)
74
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
75
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
76
+ 4. Push to the branch (`git push origin my-new-feature`)
77
+ 5. [Create a Pull Request](https://github.com/newleaders/thincloud-deployment/pull/new)
78
+
79
+
80
+ ## License
81
+
82
+ * Freely distributable and licensed under the [MIT license](http://newleaders.mit-license.org/2013/license.html).
83
+ * Copyright (c) 2013 New Leaders ([opensource@newleaders.com](opensource@newleaders.com))
84
+ * [https://newleaders.com](https://newleaders.com)
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/TODO.md ADDED
@@ -0,0 +1,3 @@
1
+ # TODO
2
+
3
+ * Would be awesome to create a quick helper to view a list of recipes, and then view a specific recipe.
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "thincloud/deployment/deployment_generator"
4
+
5
+ Thincloud::Deployment::DeploymentGenerator.new.deployment
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "thor"
4
+ require File.expand_path("../../lib/thincloud/deployment/version", __FILE__)
5
+
6
+ module Thincloud
7
+ module Deployment
8
+ class CLI < ::Thor
9
+ include ::Thor::Actions
10
+
11
+ desc "version", "Show the thincloud-deployment version"
12
+ def version
13
+ say gem_version
14
+ end
15
+
16
+ desc "list", "List recipes included in thincloud-deployment"
17
+ def list
18
+ say "Recipes included in thincloud-deployment (v#{gem_version}):"
19
+ say ""
20
+ print_table recipes.map { |r| ["*", r] }, indent: 2
21
+ say ""
22
+ end
23
+
24
+ desc "show RECIPE", "Show the contents of a specific recipe"
25
+ def show(recipe)
26
+ path = File.expand_path("#{source_root}/#{recipe}.rb")
27
+ found = recipe_paths.grep(%r{#{path}}).first
28
+ say "Recipe `#{recipe}` not found." and return unless found
29
+
30
+ say ""
31
+ say "-- Recipe: #{recipe} --"
32
+ say ""
33
+ say File.read(found).strip
34
+ say ""
35
+ say "-- END OF LINE --"
36
+ end
37
+
38
+ private
39
+
40
+ def source_root
41
+ path = "../../lib/thincloud/recipes"
42
+ self.class.source_root File.expand_path(path, __FILE__)
43
+ end
44
+
45
+ def recipe_paths
46
+ Dir[File.expand_path("#{source_root}/*.rb", __FILE__)]
47
+ end
48
+
49
+ def recipes
50
+ recipe_paths.map { |recipe| File.basename(recipe, ".rb") }
51
+ end
52
+
53
+ def gem_version
54
+ Thincloud::Deployment::VERSION
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ Thincloud::Deployment::CLI.start
@@ -0,0 +1,8 @@
1
+ require "thincloud/deployment"
2
+ require "thincloud/deployment/deployment_generator" if defined?(Rails)
3
+
4
+ module Thincloud
5
+ module Deployment
6
+
7
+ end
8
+ end
@@ -0,0 +1,20 @@
1
+ module Capistrano
2
+ if const_defined? :Configuration
3
+
4
+ Configuration.instance(true).load do
5
+ load "deploy"
6
+ load "deploy/assets"
7
+
8
+ require "capistrano/ext/multistage"
9
+
10
+ set :stages, %w(staging production)
11
+ set :default_stage, "staging"
12
+ end
13
+
14
+ # Load recipes into the Capistrano::Configuration instance
15
+ recipes = Dir[File.expand_path("../recipes/*.rb", __FILE__)]
16
+ recipes.each do |recipe|
17
+ Configuration.instance(true).load(recipe)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1 @@
1
+ require "thincloud/deployment/version"
@@ -0,0 +1,60 @@
1
+ require "thor"
2
+
3
+ module Thincloud
4
+
5
+ # Public: Inherit Thor actions
6
+ class ThorBase < ::Thor::Group
7
+ include ::Thor::Actions
8
+ end
9
+
10
+ GeneratorBase = if defined?(Rails)
11
+ require "rails/generators" # Handle Rails load order explicitly
12
+ ::Rails::Generators::Base
13
+ else
14
+ ThorBase
15
+ end
16
+
17
+
18
+ # Public: Make thincloud:deployment generator available to Rails
19
+ class DeploymentGenerator < GeneratorBase
20
+ source_root File.expand_path("../templates", __FILE__)
21
+
22
+ desc "Generates thincloud deployment configuration."
23
+ def deployment
24
+ capify
25
+
26
+ copy_stages
27
+
28
+ stub_recipes
29
+
30
+ setup_foreman
31
+
32
+ say_status "", ""
33
+ say_status "success", "thincloud-deployment has finished."
34
+ say_status "", "Edit config/deploy.rb for your application."
35
+ end
36
+
37
+ private
38
+
39
+ def capify
40
+ copy_file "Capfile", "Capfile"
41
+ empty_directory "config"
42
+ copy_file "deploy.rb", "config/deploy.rb"
43
+ end
44
+
45
+ def copy_stages
46
+ empty_directory "config/deploy"
47
+ directory "stages", "config/deploy"
48
+ end
49
+
50
+ def stub_recipes
51
+ empty_directory "lib/recipes"
52
+ create_file "lib/recipes/.gitkeep"
53
+ end
54
+
55
+ def setup_foreman
56
+ copy_file "foreman", ".foreman"
57
+ copy_file "Procfile", "Procfile"
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,7 @@
1
+ require "capistrano/version"
2
+ require "thincloud/capistrano"
3
+
4
+ Dir["lib/recipes/*.rb"].each { |recipe| load(recipe) } # local overrides
5
+
6
+ load "config/deploy"
7
+
@@ -0,0 +1 @@
1
+ web: bundle exec thin -p $PORT -e $RAILS_ENV start
@@ -0,0 +1,11 @@
1
+ # thincloud-deployment
2
+ #
3
+ # Application specific deployment settings. To make changes for a specific
4
+ # stage, please see `config/deploy/*.rb`
5
+ #
6
+ # This is a standard Capistrano deploy.rb. All the power remains.
7
+
8
+ set :domain, "DOMAIN_NAME.com"
9
+ set :application, "APPLICATION_NAME"
10
+ set :repository, "git@github.com:ORGANIZATION/APPLICATION_NAME.git"
11
+ set :flowdock_api_token, "FLOWDOCK_API_TOKEN"
@@ -0,0 +1,2 @@
1
+ port: 3000
2
+ concurrency: web=2
@@ -0,0 +1,3 @@
1
+ # thincloud-deployment
2
+ #
3
+ # Stage specific deployment settings.
@@ -0,0 +1,3 @@
1
+ # thincloud-deployment
2
+ #
3
+ # Stage specific deployment settings.
@@ -0,0 +1,5 @@
1
+ module Thincloud
2
+ module Deployment
3
+ VERSION = "1.0.0"
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+ require "bundler/capistrano"
2
+
3
+ set :bundle_without do
4
+ [:development, :test].tap do |gem_groups|
5
+ gem_groups += [:staging] if stage == :production
6
+ end
7
+ end
8
+
@@ -0,0 +1,78 @@
1
+ set(:fqdn) { "#{application}-#{stage}.#{domain}" }
2
+ set(:rails_env) { stage.to_s }
3
+
4
+ # Server roles
5
+ # server fqdn, :app, :web, :cron, :worker
6
+ [:app, :web, :cron, :worker].each do |name|
7
+ role(name) { fqdn }
8
+ end
9
+
10
+ # Run DB migrations from the :db role
11
+ role(:db, primary: true) { fqdn }
12
+
13
+ set :user, "deploy"
14
+ set :use_sudo, false
15
+ set(:deploy_to) { "/applications/#{application}/#{stage}" }
16
+
17
+ # SSH
18
+ set :default_run_options, { pty: true }
19
+ set :ssh_options, { forward_agent: true }
20
+
21
+ set :keep_releases, 5
22
+ after "deploy:restart", "deploy:cleanup"
23
+
24
+ set :shared_directories do
25
+ %w[
26
+ assets attachments backup cache certificates config log pids
27
+ sockets system tmp
28
+ ]
29
+ end
30
+
31
+ set :shared_resources do
32
+ [
33
+ { shared: "config/database.yml", release: "config/database.yml" },
34
+ { shared: "sockets", release: "tmp/sockets" },
35
+ { shared: "pids", release: "tmp/pids" }
36
+ ]
37
+ end
38
+
39
+
40
+ # Deploy methods
41
+ namespace :deploy do
42
+ desc "Setup our custom shared directories"
43
+ task :setup_shared_directories, roles: :app do
44
+ dirs = fetch(:shared_directories, []).map do |dir|
45
+ "#{shared_path}/#{dir}"
46
+ end.join(" ")
47
+
48
+ run "mkdir -p -m 775 #{dirs}" unless dirs.empty?
49
+ end
50
+
51
+ desc "Tasks to execute after code update"
52
+ task :link_to_shared, roles: :app do
53
+ link_command = fetch(:shared_resources, []).map do |dirs|
54
+ "rm -rf #{release_path}/#{dirs[:release]}; " <<
55
+ "ln -fs #{shared_path}/#{dirs[:shared]} #{release_path}/#{dirs[:release]}"
56
+ end.join(" && ")
57
+
58
+ run link_command unless link_command.empty?
59
+ end
60
+
61
+ desc "Restart the application"
62
+ task :restart, roles: :app do
63
+ foreman.restart
64
+ end
65
+
66
+ desc "Start the application"
67
+ task :start, roles: :app do
68
+ foreman.start
69
+ end
70
+
71
+ desc "Stop the application"
72
+ task :stop, roles: :app do
73
+ foreman.stop
74
+ end
75
+ end
76
+
77
+ after "deploy:setup", "deploy:setup_shared_directories"
78
+ after "deploy:finalize_update", "deploy:link_to_shared"
@@ -0,0 +1,5 @@
1
+ require "capistrano/fast_remote_cache"
2
+
3
+ set :deploy_via, :fast_remote_cache
4
+ set :local_cache, "tmp/.rsync_cache"
5
+ set :copy_exclude, %w(test spec .git config/database.yml)
@@ -0,0 +1,5 @@
1
+ require "flowdock/capistrano"
2
+
3
+ set(:flowdock_project_name) { application }
4
+ set(:flowdock_deploy_tags) { [application, stage] }
5
+ set :flowdock_api_token, ""
@@ -0,0 +1,27 @@
1
+ after "deploy:create_symlink", "foreman:export"
2
+
3
+ namespace :foreman do
4
+ desc "Export the Procfile to Ubuntu's upstart scripts"
5
+ task :export, roles: :app do
6
+ run "cd #{release_path} && sudo /usr/local/rvm/bin/rvm default exec " <<
7
+ "bundle exec foreman export upstart /etc/init " <<
8
+ "-a #{application}-#{rails_env} -u #{user} -l #{shared_path}/log"
9
+ end
10
+
11
+ desc "Start the application services"
12
+ task :start, roles: :app do
13
+ sudo "/sbin/start #{application}-#{rails_env}"
14
+ end
15
+
16
+ desc "Stop the application services"
17
+ task :stop, roles: :app do
18
+ sudo "/sbin/stop #{application}-#{rails_env}"
19
+ end
20
+
21
+ desc "Restart the application services"
22
+ task :restart, roles: :app do
23
+ run "sudo /sbin/start #{application}-#{rails_env} || " <<
24
+ "sudo /sbin/restart #{application}-#{rails_env}"
25
+ end
26
+ end
27
+
@@ -0,0 +1,6 @@
1
+ # Git settings
2
+ set :repository, ""
3
+ set :scm, :git
4
+ set :git_shallow_clone, 1
5
+ set :git_enable_submodules, 1
6
+ set :branch, "master"
@@ -0,0 +1,19 @@
1
+ # logfile management
2
+ namespace :log do
3
+ desc "Tail last ENV['LINES'] of the application logfile"
4
+ task :tail, roles: :app do
5
+ lines = ENV["LINES"] || 50
6
+ stream "tail -n #{lines} #{shared_path}/log/#{rails_env}.log"
7
+ end
8
+
9
+ desc "Stream the application logfile"
10
+ task :tail_f, roles: :app do
11
+ lines = ENV["LINES"] || 50
12
+ stream "tail -fn #{lines} #{shared_path}/log/#{rails_env}.log"
13
+ end
14
+
15
+ desc "Download the log application file"
16
+ task :scp, roles: :app do
17
+ system "scp #{user}@#{domain}:#{shared_path}/log/#{rails_env}.log log/"
18
+ end
19
+ end
@@ -0,0 +1,4 @@
1
+ require "new_relic/recipes"
2
+
3
+ # Notify NewRelic
4
+ after "deploy:create_symlink", "newrelic:notice_deployment"
@@ -0,0 +1,6 @@
1
+ require "rvm/capistrano"
2
+
3
+ set :rvm_type, :system
4
+
5
+ # RVM environment
6
+ set(:rvm_ruby_string) { "ruby-1.9.3-perf@#{application}" }
@@ -0,0 +1,6 @@
1
+ # Add instructions to execute before your CI run here.
2
+ #
3
+ # The following is used for testing a Rails Engine with a dummy test app.
4
+ #
5
+ # cd test/dummy
6
+ # RAILS_ENV=test bundle exec rake db:setup
@@ -0,0 +1,8 @@
1
+ engine=$(ruby -e 'puts RUBY_ENGINE')
2
+
3
+ case $engine in
4
+ "ruby" )
5
+ bundle exec rake test && bundle exec cane;;
6
+ * )
7
+ bundle exec rake test;;
8
+ esac
@@ -0,0 +1,18 @@
1
+ if RUBY_ENGINE == "ruby"
2
+ begin
3
+ require "simplecov"
4
+ SimpleCov.start do
5
+ add_filter "test"
6
+ add_filter "config"
7
+ command_name "MiniTest"
8
+ end
9
+ rescue LoadError
10
+ warn "unable to load SimpleCov"
11
+ end
12
+ end
13
+
14
+ require "thincloud/test"
15
+
16
+ # Requires supporting ruby files with custom matchers and macros, etc,
17
+ # in spec/support/ and its subdirectories.
18
+ Dir[File.join("./test/support/**/*.rb")].sort.each { |f| require f }
@@ -0,0 +1,4 @@
1
+ unless ENV["CI"]
2
+ require "minitest/reporters"
3
+ MiniTest::Reporters.use! MiniTest::Reporters::ProgressReporter.new
4
+ end
@@ -0,0 +1 @@
1
+ require "mocha/setup"
@@ -0,0 +1,5 @@
1
+ require "minitest_helper"
2
+
3
+ describe Thincloud::Deployment do
4
+ it { Thincloud::Deployment.must_be_kind_of Module }
5
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'thincloud/deployment/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "thincloud-deployment"
8
+ gem.version = Thincloud::Deployment::VERSION
9
+ gem.authors = ["Phil Cohen", "Don Morrison", "Sean Williamson"]
10
+ gem.email = ["pcohen@newleaders.com", "dmorrison@newleaders.com",
11
+ "swilliamson@newleaders.com"]
12
+ gem.description = "Opinionated framework dependencies, configuration, " <<
13
+ "and recipes for Capistrano-based deployments. "
14
+ gem.summary = "Opinionated framework dependencies, configuration, " <<
15
+ "and recipes for Capistrano-based deployments. "
16
+ gem.homepage = "http://newleaders.github.com/thincloud-deployment"
17
+
18
+ gem.files = `git ls-files`.split($/)
19
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
20
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
21
+ gem.require_paths = ["lib"]
22
+
23
+
24
+ gem.add_dependency "capistrano", "~> 2.14.1"
25
+ gem.add_dependency "capistrano-fast_remote_cache", "~> 1.0.0"
26
+ gem.add_dependency "flowdock", "~> 0.2.2"
27
+ gem.add_dependency "grit", "~> 2.5.0"
28
+ gem.add_dependency "rvm-capistrano", "~> 1.2.7"
29
+
30
+ gem.add_development_dependency "rake"
31
+ gem.add_development_dependency "thincloud-test"
32
+ end
metadata ADDED
@@ -0,0 +1,215 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: thincloud-deployment
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Phil Cohen
9
+ - Don Morrison
10
+ - Sean Williamson
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2013-03-04 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: capistrano
18
+ requirement: !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: 2.14.1
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ~>
30
+ - !ruby/object:Gem::Version
31
+ version: 2.14.1
32
+ - !ruby/object:Gem::Dependency
33
+ name: capistrano-fast_remote_cache
34
+ requirement: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ version: 1.0.0
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0
48
+ - !ruby/object:Gem::Dependency
49
+ name: flowdock
50
+ requirement: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 0.2.2
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ~>
62
+ - !ruby/object:Gem::Version
63
+ version: 0.2.2
64
+ - !ruby/object:Gem::Dependency
65
+ name: grit
66
+ requirement: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ~>
70
+ - !ruby/object:Gem::Version
71
+ version: 2.5.0
72
+ type: :runtime
73
+ prerelease: false
74
+ version_requirements: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: 2.5.0
80
+ - !ruby/object:Gem::Dependency
81
+ name: rvm-capistrano
82
+ requirement: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 1.2.7
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ~>
94
+ - !ruby/object:Gem::Version
95
+ version: 1.2.7
96
+ - !ruby/object:Gem::Dependency
97
+ name: rake
98
+ requirement: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: thincloud-test
114
+ requirement: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ description: ! 'Opinionated framework dependencies, configuration, and recipes for
129
+ Capistrano-based deployments. '
130
+ email:
131
+ - pcohen@newleaders.com
132
+ - dmorrison@newleaders.com
133
+ - swilliamson@newleaders.com
134
+ executables:
135
+ - thincloud-capify
136
+ - thincloud-deployment
137
+ extensions: []
138
+ extra_rdoc_files: []
139
+ files:
140
+ - .gitignore
141
+ - .ruby-version
142
+ - .travis.yml
143
+ - Gemfile
144
+ - Guardfile
145
+ - LICENSE
146
+ - README.md
147
+ - Rakefile
148
+ - TODO.md
149
+ - bin/thincloud-capify
150
+ - bin/thincloud-deployment
151
+ - lib/thincloud-deployment.rb
152
+ - lib/thincloud/capistrano.rb
153
+ - lib/thincloud/deployment.rb
154
+ - lib/thincloud/deployment/deployment_generator.rb
155
+ - lib/thincloud/deployment/templates/Capfile
156
+ - lib/thincloud/deployment/templates/Procfile
157
+ - lib/thincloud/deployment/templates/deploy.rb
158
+ - lib/thincloud/deployment/templates/foreman
159
+ - lib/thincloud/deployment/templates/stages/production.rb
160
+ - lib/thincloud/deployment/templates/stages/staging.rb
161
+ - lib/thincloud/deployment/version.rb
162
+ - lib/thincloud/recipes/bundler.rb
163
+ - lib/thincloud/recipes/deploy.rb
164
+ - lib/thincloud/recipes/fast_remote_cache.rb
165
+ - lib/thincloud/recipes/flowdock.rb
166
+ - lib/thincloud/recipes/foreman.rb
167
+ - lib/thincloud/recipes/git.rb
168
+ - lib/thincloud/recipes/log.rb
169
+ - lib/thincloud/recipes/new_relic.rb
170
+ - lib/thincloud/recipes/rvm.rb
171
+ - test/ci/before_script.sh
172
+ - test/ci/ci_runner.sh
173
+ - test/minitest_helper.rb
174
+ - test/support/minitest_reporters.rb
175
+ - test/support/mocha.rb
176
+ - test/thincloud-deployment_test.rb
177
+ - thincloud-deployment.gemspec
178
+ homepage: http://newleaders.github.com/thincloud-deployment
179
+ licenses: []
180
+ post_install_message:
181
+ rdoc_options: []
182
+ require_paths:
183
+ - lib
184
+ required_ruby_version: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ segments:
191
+ - 0
192
+ hash: 2768778508406863992
193
+ required_rubygems_version: !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ! '>='
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ segments:
200
+ - 0
201
+ hash: 2768778508406863992
202
+ requirements: []
203
+ rubyforge_project:
204
+ rubygems_version: 1.8.25
205
+ signing_key:
206
+ specification_version: 3
207
+ summary: Opinionated framework dependencies, configuration, and recipes for Capistrano-based
208
+ deployments.
209
+ test_files:
210
+ - test/ci/before_script.sh
211
+ - test/ci/ci_runner.sh
212
+ - test/minitest_helper.rb
213
+ - test/support/minitest_reporters.rb
214
+ - test/support/mocha.rb
215
+ - test/thincloud-deployment_test.rb