thincloud-deployment 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +18 -0
- data/.ruby-version +1 -0
- data/.travis.yml +12 -0
- data/Gemfile +4 -0
- data/Guardfile +8 -0
- data/LICENSE +22 -0
- data/README.md +84 -0
- data/Rakefile +1 -0
- data/TODO.md +3 -0
- data/bin/thincloud-capify +5 -0
- data/bin/thincloud-deployment +60 -0
- data/lib/thincloud-deployment.rb +8 -0
- data/lib/thincloud/capistrano.rb +20 -0
- data/lib/thincloud/deployment.rb +1 -0
- data/lib/thincloud/deployment/deployment_generator.rb +60 -0
- data/lib/thincloud/deployment/templates/Capfile +7 -0
- data/lib/thincloud/deployment/templates/Procfile +1 -0
- data/lib/thincloud/deployment/templates/deploy.rb +11 -0
- data/lib/thincloud/deployment/templates/foreman +2 -0
- data/lib/thincloud/deployment/templates/stages/production.rb +3 -0
- data/lib/thincloud/deployment/templates/stages/staging.rb +3 -0
- data/lib/thincloud/deployment/version.rb +5 -0
- data/lib/thincloud/recipes/bundler.rb +8 -0
- data/lib/thincloud/recipes/deploy.rb +78 -0
- data/lib/thincloud/recipes/fast_remote_cache.rb +5 -0
- data/lib/thincloud/recipes/flowdock.rb +5 -0
- data/lib/thincloud/recipes/foreman.rb +27 -0
- data/lib/thincloud/recipes/git.rb +6 -0
- data/lib/thincloud/recipes/log.rb +19 -0
- data/lib/thincloud/recipes/new_relic.rb +4 -0
- data/lib/thincloud/recipes/rvm.rb +6 -0
- data/test/ci/before_script.sh +6 -0
- data/test/ci/ci_runner.sh +8 -0
- data/test/minitest_helper.rb +18 -0
- data/test/support/minitest_reporters.rb +4 -0
- data/test/support/mocha.rb +1 -0
- data/test/thincloud-deployment_test.rb +5 -0
- data/thincloud-deployment.gemspec +32 -0
- metadata +215 -0
data/.gitignore
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.9.3@thincloud-deployment
|
data/.travis.yml
ADDED
@@ -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
data/Guardfile
ADDED
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.
|
data/README.md
ADDED
@@ -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)
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/TODO.md
ADDED
@@ -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,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 @@
|
|
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,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,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,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,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 @@
|
|
1
|
+
require "mocha/setup"
|
@@ -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
|