deploy-recipes 0.0.1 → 0.0.2

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/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.3-p194
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Deploy::Recipes
2
2
 
3
- TODO: Write a gem description
3
+ This Gem provides deployment helpers and task used by [The Beans Group][1].
4
4
 
5
5
  ## Installation
6
6
 
@@ -17,8 +17,37 @@ Or install it yourself as:
17
17
  $ gem install deploy-recipes
18
18
 
19
19
  ## Usage
20
+ Some tasks and helpers require extra configuration. At the moment the only way of providing the extra configuration options is to set those in the `deploy.rb` sript.
21
+ The way of setting them is as follows:
20
22
 
21
- TODO: Write usage instructions here
23
+ set :option_name, option_value
24
+
25
+ ## Capistrano Helper Usage
26
+ This Gem contains some helpers that can be used with capistrano. Helpers generally need to be loaded at the top of the `deploy.rb` script, if not otherwise stated.
27
+
28
+ ### AWS EC2
29
+ The AWS EC2 task is used to dynamically set the web, app and db server valiables in your deploy.rb file.
30
+ For this helper to work properly you need to set the following vaiables in your `deploy.rb` file:
31
+
32
+ * `access_key_id` (required) - Your AWS access key id
33
+ * `secret_access_key` (required) - You AWS secret access key
34
+
35
+ ## Capistrano Tasks Usage
36
+ This section describes the tasks made available by this Gem. Tasks are generally (if not otherwise stated) loaded at the end of the `deploy.rb` script.
37
+
38
+ ### Database
39
+ This task can be used to generate the database configuration file for a project. During the execution of this taks it will ask you to enter the password of the database.
40
+ This tasks will be executed once required in the `deploy.rb` file. For more information when this task will be run please look towards the end of this taks.
41
+
42
+ ### Deploy Automation
43
+ The deploy automation task can be used with Pivotal Tracker and Git to make deployment and managing deploys easier.
44
+ For this task to work properly you need to set the following vaiables in your `deploy.rb` file:
45
+
46
+ * `pivotal_tracker_token` (required) - This is the API token needed to interact with your PT account
47
+ * `changelog_location` (optional) - Define the location at which you would like the changelog to be stored. At the moment this has to be within
48
+ the scope of the Git repository because this task expects to be able to commit the changelog and push it to the remote branch.
49
+
50
+ This tasks will be executed after the `deploy:cleanup` task, once required in the `deploy.rb` file.
22
51
 
23
52
  ## Contributing
24
53
 
@@ -27,3 +56,5 @@ TODO: Write usage instructions here
27
56
  3. Commit your changes (`git commit -am 'Added some feature'`)
28
57
  4. Push to the branch (`git push origin my-new-feature`)
29
58
  5. Create new Pull Request
59
+
60
+ [1]: http://www.thebeansgroup.com "The Beans Group"
data/Rakefile CHANGED
@@ -1,2 +1,4 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
+ require "bundler/setup"
4
+ Bundler::GemHelper.install_tasks
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/deploy-recipes/version', __FILE__)
2
+ require File.expand_path('../lib/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Vincent Siebert"]
@@ -14,4 +14,10 @@ Gem::Specification.new do |gem|
14
14
  gem.name = "deploy-recipes"
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Deploy::Recipes::VERSION
17
+
18
+ gem.add_dependency "capistrano", ">= 2.5.9"
19
+ gem.add_dependency "pivotal-tracker", ">= 0.5.4"
20
+ gem.add_dependency "grit", ">= 2.5.0"
21
+ gem.add_dependency "tinder", ">= 1.8.0"
22
+ gem.add_dependency "aws-sdk", ">= 1.5.3"
17
23
  end
@@ -0,0 +1,17 @@
1
+ def _cset(name, *args, &block)
2
+ unless exists?(name)
3
+ set(name, *args, &block)
4
+ end
5
+ end
6
+
7
+ def _cdefault_run_options(key, value)
8
+ unless default_run_options.has_key? key
9
+ default_run_options[key] = value
10
+ end
11
+ end
12
+
13
+ def _cssh_options(key, value)
14
+ unless ssh_options.has_key? key
15
+ ssh_options[key] = value
16
+ end
17
+ end
@@ -1,7 +1,5 @@
1
- require "deploy-recipes/version"
1
+ require 'capistrano'
2
+ require 'capistrano/cli'
3
+ require 'common'
2
4
 
3
- module Deploy
4
- module Recipes
5
- # Your code goes here...
6
- end
7
- end
5
+ Dir.glob(File.join(File.dirname(__FILE__), '/deploy-recipes/*.rb')).sort.each { |f| load f }
@@ -0,0 +1,50 @@
1
+ # load the libraries
2
+ require 'aws'
3
+ # # log requests using the default rails logger
4
+ # AWS.config(:logger => Rails.logger)
5
+
6
+ def aws_ec2_role(which, *args, &block)
7
+
8
+ options = args.last.is_a?(Hash) ? args.pop : {}
9
+
10
+ # validate EC2 settings
11
+ _cset(:access_key_id) { Capistrano::CLI.ui.ask("Enter your AWS access key ID: ") }
12
+ _cset(:secret_access_key) { Capistrano::CLI.ui.ask("Enter your AWS secret key: ") }
13
+
14
+ AWS.config :access_key_id => access_key_id, :secret_access_key => secret_access_key
15
+
16
+ ec2 = AWS::EC2.new
17
+ # optionally switch to a non-default region
18
+ if region = options[:region]
19
+ region = ec2.regions[region]
20
+ unless region.exists?
21
+ raise "Requested region '#{region.name}' does not exist. Valid regions: \n #{ec2.regions.map(&:name).join("\n ")}"
22
+ end
23
+ # a region acts like the main EC2 interface
24
+ ec2 = region
25
+ end
26
+
27
+ query = {}
28
+
29
+ instances = AWS.memoize do
30
+ query = {}
31
+ # Filter by tags
32
+ if tags = options[:tags]
33
+ args.delete :tags
34
+ ec2.instances.select do |i|
35
+ r = false
36
+ tags.each do |key, value|
37
+ if value
38
+ r = i.tags.to_h[key.to_s] == value
39
+ else
40
+ r = i.tags.to_h.has_key? key.to_s
41
+ end
42
+ end
43
+ r
44
+ end
45
+ end
46
+ end
47
+ # @TODO we need to make sure we merge the dns names with the other args
48
+ args = instances.map {|i| i.dns_name}
49
+ role which, *args
50
+ end
@@ -0,0 +1,38 @@
1
+ unless Capistrano::Configuration.respond_to?(:instance)
2
+ abort "capistrano/tbg/deploy requires Capistrano 2"
3
+ end
4
+
5
+ Capistrano::Configuration.instance.load do
6
+ # User details
7
+ _cset :user, "deploy"
8
+ _cset(:group) { user }
9
+
10
+ # @TODO utilise a deployment config file outside the project to be able to DRY the deploy config system
11
+ _cset :config_file, "~/.deployment-configs.yml"
12
+
13
+ # Application details
14
+ _cset(:application) { abort "Please specify the short name of your application, set :application, 'foo'" }
15
+ _cset :use_sudo, false
16
+
17
+ # SCM settings
18
+ _cset(:deploy_to) { "/var/www/apps/#{application}" }
19
+ _cset :scm, "git"
20
+ _cset :branch, "master"
21
+ _cset :deploy_via, "remote_cache"
22
+
23
+ # Git settings for Capistrano
24
+ _cdefault_run_options :pty, true # needed for git password prompts
25
+ _cssh_options :forward_agent, true # use the keys for the person running the cap command to check out the append
26
+ _cssh_options :auth_methods, ["publickey"]
27
+ _cssh_options :keys, [File.join(ENV["HOME"], ".ssh", user)]
28
+
29
+ # If you are using Passenger mod_rails uncomment this:
30
+ namespace :deploy do
31
+ task :start do ; end
32
+ task :stop do ; end
33
+ task :restart, :roles => :app, :except => { :no_release => true } do
34
+ run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
35
+ end
36
+ end
37
+
38
+ end
@@ -0,0 +1,168 @@
1
+ #
2
+ # = Capistrano database.yml task
3
+ #
4
+ # Provides a couple of tasks for creating the database.yml
5
+ # configuration file dynamically when deploy:setup is run.
6
+ #
7
+ # Category:: Capistrano
8
+ # Package:: Database
9
+ # Author:: Simone Carletti <weppos@weppos.net>
10
+ # Copyright:: 2007-2010 The Authors
11
+ # License:: MIT License
12
+ # Link:: http://www.simonecarletti.com/
13
+ # Source:: http://gist.github.com/2769
14
+ #
15
+ #
16
+ # == Requirements
17
+ #
18
+ # This extension requires the original <tt>config/database.yml</tt> to be excluded
19
+ # from source code checkout. You can easily accomplish this by renaming
20
+ # the file (for example to database.example.yml) and appending <tt>database.yml</tt>
21
+ # value to your SCM ignore list.
22
+ #
23
+ # # Example for Subversion
24
+ #
25
+ # $ svn mv config/database.yml config/database.example.yml
26
+ # $ svn propset svn:ignore 'database.yml' config
27
+ #
28
+ # # Example for Git
29
+ #
30
+ # $ git mv config/database.yml config/database.example.yml
31
+ # $ echo 'config/database.yml' >> .gitignore
32
+ #
33
+ #
34
+ # == Usage
35
+ #
36
+ # Include this file in your <tt>deploy.rb</tt> configuration file.
37
+ # Assuming you saved this recipe as capistrano_database_yml.rb:
38
+ #
39
+ # require "capistrano_database_yml"
40
+ #
41
+ # Now, when <tt>deploy:setup</tt> is called, this script will automatically
42
+ # create the <tt>database.yml</tt> file in the shared folder.
43
+ # Each time you run a deploy, this script will also create a symlink
44
+ # from your application <tt>config/database.yml</tt> pointing to the shared configuration file.
45
+ #
46
+ # == Custom template
47
+ #
48
+ # By default, this script creates an exact copy of the default
49
+ # <tt>database.yml</tt> file shipped with a new Rails 2.x application.
50
+ # If you want to overwrite the default template, simply create a custom Erb template
51
+ # called <tt>database.yml.erb</tt> and save it into <tt>config/deploy</tt> folder.
52
+ #
53
+ # Although the name of the file can't be changed, you can customize the directory
54
+ # where it is stored defining a variable called <tt>:template_dir</tt>.
55
+ #
56
+ # # store your custom template at foo/bar/database.yml.erb
57
+ # set :template_dir, "foo/bar"
58
+ #
59
+ # # example of database template
60
+ #
61
+ # base: &base
62
+ # adapter: sqlite3
63
+ # timeout: 5000
64
+ # development:
65
+ # database: #{shared_path}/db/development.sqlite3
66
+ # <<: *base
67
+ # test:
68
+ # database: #{shared_path}/db/test.sqlite3
69
+ # <<: *base
70
+ # production:
71
+ # adapter: mysql
72
+ # database: #{application}_production
73
+ # username: #{user}
74
+ # password: #{Capistrano::CLI.ui.ask("Enter MySQL database password: ")}
75
+ # encoding: utf8
76
+ # timeout: 5000
77
+ #
78
+ # Because this is an Erb template, you can place variables and Ruby scripts
79
+ # within the file.
80
+ # For instance, the template above takes advantage of Capistrano CLI
81
+ # to ask for a MySQL database password instead of hard coding it into the template.
82
+ #
83
+ # === Password prompt
84
+ #
85
+ # For security reasons, in the example below the password is not
86
+ # hard coded (or stored in a variable) but asked on setup.
87
+ # I don't like to store passwords in files under version control
88
+ # because they will live forever in your history.
89
+ # This is why I use the Capistrano::CLI utility.
90
+ #
91
+
92
+ unless Capistrano::Configuration.respond_to?(:instance)
93
+ abort "This extension requires Capistrano 2"
94
+ end
95
+
96
+ Capistrano::Configuration.instance.load do
97
+
98
+ namespace :deploy do
99
+
100
+ namespace :db do
101
+
102
+ desc <<-DESC
103
+ Creates the database.yml configuration file in shared path.
104
+
105
+ By default, this task uses a template unless a template \
106
+ called database.yml.erb is found either is :template_dir \
107
+ or /config/deploy folders. The default template matches \
108
+ the template for config/database.yml file shipped with Rails.
109
+
110
+ When this recipe is loaded, db:setup is automatically configured \
111
+ to be invoked after deploy:setup. You can skip this task setting \
112
+ the variable :skip_db_setup to true. This is especially useful \
113
+ if you are using this recipe in combination with \
114
+ capistrano-ext/multistaging to avoid multiple db:setup calls \
115
+ when running deploy:setup for all stages one by one.
116
+ DESC
117
+ task :setup, :except => { :no_release => true } do
118
+ default_template = <<-EOF
119
+ # store your custom template at foo/bar/database.yml.erb
120
+ #set :template_dir, "foo/bar"
121
+ #
122
+ # example of database template
123
+ production:
124
+ adapter: mysql2
125
+ encoding: utf8
126
+ timeout: 5000
127
+ database: #{application}
128
+ host: db.thebeansgroup.com
129
+ pool: 5
130
+ username: tbg
131
+ password: #{Capistrano::CLI.ui.ask("Enter MySQL database password: ")}
132
+ EOF
133
+
134
+ location = fetch(:template_dir, "config/deploy") + '/database.yml.erb'
135
+ template = File.file?(location) ? File.read(location) : default_template
136
+
137
+ config = ERB.new(template)
138
+
139
+ run "mkdir -p #{shared_path}/db"
140
+ run "mkdir -p #{shared_path}/config"
141
+ put config.result, "#{shared_path}/config/database.yml"
142
+ end
143
+
144
+ desc <<-DESC
145
+ [internal] Updates the symlink for database.yml file to the just deployed release.
146
+ DESC
147
+ task :symlink, :except => { :no_release => true } do
148
+ run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
149
+ end
150
+
151
+ desc <<-DESC
152
+ [internal] Removes the database.yml file after code_update in order for the symlink to work
153
+ DESC
154
+ task :remove_config, :except => { :no_release => true } do
155
+ f = "#{release_path}/config/database.yml"
156
+ if File.file?(f) then FileUtils.rm_rf(f) end
157
+ end
158
+
159
+
160
+ end
161
+
162
+ after "deploy:setup", "deploy:db:setup" unless fetch(:skip_db_setup, false)
163
+ after "deploy:code_update", "deploy:db:remove_config"
164
+ after "deploy:finalize_update", "deploy:db:symlink"
165
+
166
+ end
167
+
168
+ end
@@ -0,0 +1,115 @@
1
+ require "pivotal-tracker"
2
+ require "grit"
3
+ require "tinder"
4
+
5
+ unless Capistrano::Configuration.respond_to?(:instance)
6
+ abort "This extension requires Capistrano 2"
7
+ end
8
+
9
+ Capistrano::Configuration.instance.load do
10
+ namespace :deploy do
11
+ namespace :automation do
12
+ desc "Get all referenced pivotal tracker stories"
13
+ task :create_changelog do
14
+
15
+ # validate Pivotal Tracker settings
16
+ _cset(:pivotal_tracker_token) { Capistrano::CLI.ui.ask("Enter your Pivotal Tracker tocken: ") }
17
+
18
+ # validate Campfire settings
19
+ _cset(:pivotal_tracker_token) { Capistrano::CLI.ui.ask("Enter your Pivotal Tracker tocken: ") }
20
+ _cset(:pivotal_tracker_token) { Capistrano::CLI.ui.ask("Enter your Pivotal Tracker tocken: ") }
21
+
22
+ _cset(:changelog_location) { "#{Rails.root}/CHANGELOG.md" }
23
+
24
+ changelog = {:features => [], :bugs => [], :chores => []}
25
+ # get current repo
26
+ repo = Grit::Repo.new Rails.root
27
+ # last release
28
+ # last_rel = "REL-2012-06-12_10-38-04"
29
+ last_rel = repo.git.describe({'abbrev' => 0, 'tags' => true, 'match' => 'REL-*'}).gsub!("\n","")
30
+ p "LAST RELEASE: #{last_rel}"
31
+ # validate
32
+ raise "Could not find previous release tag" unless last_rel
33
+
34
+ # lets tag the new release
35
+ time = Time.new
36
+ tag_name = time.to_formatted_s :release_tag
37
+ repo.git.tag({ 'a' => true, 'm' => "creating release tag for #{tag_name}"}, tag_name)
38
+ repo.git.push({'tags' => true})
39
+
40
+ # current release
41
+ cur_rel = repo.git.describe({'abbrev' => 0, 'tags' => true, 'match' => 'REL-*'}).gsub!("\n","")
42
+ p "CURRENT RELEASE: #{cur_rel}"
43
+ # validate
44
+ raise "Could not find latest release tag" unless cur_rel
45
+ # Now lets get all the commit messages with PT story references
46
+ commits = repo.git.log({'grep' => "\[[ a-z]*[ ]*#[0-9]+[ ]*\]", 'E' => true, 'i' => true, 'format' => 'format:%s'}, "#{last_rel}...#{cur_rel}")
47
+ p commits
48
+ # Only if we have commit do we need to carry on
49
+ if not commits.blank?
50
+ # Lets extract the sory references
51
+ story_ids = commits.scan(/\[[ a-z]*[ ]*#([0-9]+)[ ]*\]/).flatten!.uniq
52
+ p story_ids
53
+ # Pivotal Tracker
54
+ accepted_status = [:started, :finished, :delivered, :accepted]
55
+ # Manually set API Token
56
+ PivotalTracker::Client.token = Rails.application.config.pivotal_tracker_token
57
+ # return all projects
58
+ projects = PivotalTracker::Project.all
59
+ # We need to order the projects by the likelyhood of stories being contained within them to speed up the process
60
+ projects = projects.sort { |p1, p2| p2.last_activity_at <=> p1.last_activity_at }
61
+ projects.map do |project|
62
+ break unless story_ids
63
+ p "checking project #{project.name} for stories"
64
+ story_ids.each do |id|
65
+ story = project.stories.find id
66
+ if story
67
+ if accepted_status.include? story.current_state.to_sym
68
+ changelog[story.story_type.pluralize.to_sym] << story.name
69
+ story.update :current_state => :accepted
70
+ story.notes.create(:text => "This #{story.story_type} was deployed with release #{tag_name}")
71
+ end
72
+ end
73
+ end
74
+ end
75
+ # Now lets assemble the changelog
76
+ head = "\n## Release #{tag_name}\nPlease find all changes below.\n"
77
+ # assemble the features
78
+ features = "\n### New features deployed:\n"
79
+ if changelog[:features]
80
+ changelog[:features].each do |feature|
81
+ features << "* #{feature}\n"
82
+ end
83
+ else
84
+ features << "**No new features deployed**\n"
85
+ end
86
+ # Assemble the bug fixes
87
+ bugs = "\n### Bug fixes deployed:\n"
88
+ if changelog[:bugs]
89
+ changelog[:bugs].each do |bug|
90
+ bugs << "* #{bug}\n"
91
+ end
92
+ else
93
+ bugs << "**No bug fixes deployed**\n"
94
+ end
95
+ # Write the changelog to the changelog file
96
+ open(changelog_location, 'a') do |f|
97
+ f << head
98
+ f << features
99
+ f << bugs
100
+ end
101
+ # And commit them to the remote
102
+ # p changelog_location
103
+ repo.git.add({}, changelog_location)
104
+ c = repo.git.commit({'m' => "updating changelog for release #{tag_name}"}, changelog_location).scan(/^\[(\w+)[\s]{1}([a-zA-Z0-9]+)\]/).flatten
105
+ if c.first and c.last
106
+ repo.git.push({}, "origin", "#{c.last}:#{c.first}")
107
+ end
108
+ else
109
+ p "No commits with story references identified"
110
+ end
111
+ end
112
+ end
113
+ after "deploy:cleanup", "deploy:automation"
114
+ end
115
+ end
@@ -1,5 +1,5 @@
1
1
  module Deploy
2
2
  module Recipes
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deploy-recipes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,88 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-14 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2012-07-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: capistrano
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 2.5.9
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 2.5.9
30
+ - !ruby/object:Gem::Dependency
31
+ name: pivotal-tracker
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 0.5.4
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 0.5.4
46
+ - !ruby/object:Gem::Dependency
47
+ name: grit
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 2.5.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.5.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: tinder
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 1.8.0
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.8.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: aws-sdk
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: 1.5.3
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.5.3
14
94
  description: Collection of capistrano deploy recipes
15
95
  email:
16
96
  - vincent@siebert.im
@@ -19,13 +99,19 @@ extensions: []
19
99
  extra_rdoc_files: []
20
100
  files:
21
101
  - .gitignore
102
+ - .rvmrc
22
103
  - Gemfile
23
104
  - LICENSE
24
105
  - README.md
25
106
  - Rakefile
26
107
  - deploy-recipes.gemspec
108
+ - lib/common.rb
27
109
  - lib/deploy-recipes.rb
28
- - lib/deploy-recipes/version.rb
110
+ - lib/deploy-recipes/aws-ec2.rb
111
+ - lib/deploy-recipes/base.rb
112
+ - lib/deploy-recipes/database.rb
113
+ - lib/deploy-recipes/deploy-automation.rb
114
+ - lib/version.rb
29
115
  homepage: ''
30
116
  licenses: []
31
117
  post_install_message:
@@ -38,12 +124,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
38
124
  - - ! '>='
39
125
  - !ruby/object:Gem::Version
40
126
  version: '0'
127
+ segments:
128
+ - 0
129
+ hash: 3176994864263131959
41
130
  required_rubygems_version: !ruby/object:Gem::Requirement
42
131
  none: false
43
132
  requirements:
44
133
  - - ! '>='
45
134
  - !ruby/object:Gem::Version
46
135
  version: '0'
136
+ segments:
137
+ - 0
138
+ hash: 3176994864263131959
47
139
  requirements: []
48
140
  rubyforge_project:
49
141
  rubygems_version: 1.8.19