aktion_cap 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md ADDED
@@ -0,0 +1,16 @@
1
+ # v0.1.1
2
+
3
+ * Remove harded stages in config/deploy.rb
4
+ * Improvements to interactive configuration
5
+ * Make ssh user configurable, defaults to deployer
6
+
7
+ # v0.1.0
8
+
9
+ Released *rake capify* task. Provides an interactive version of capify.
10
+
11
+ # v0.0.1
12
+
13
+ Initial release.
14
+
15
+ * Provides capistrano, multistage capistrano and rvm capistrano gems
16
+
data/README.md CHANGED
@@ -1,16 +1,16 @@
1
1
  # AktionCap
2
2
 
3
- TODO: Write a gem description
3
+ A metagem for use with capistrano. It includes capistrano with multistage extension, rvm integration and rake tasks to make capistrano management simpler.
4
4
 
5
5
  ## Installation
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
- gem 'aktion_cap'
9
+ gem 'aktion_cap', '~> 0.1.0'
10
10
 
11
11
  And then execute:
12
12
 
13
- $ bundle
13
+ $ bundle install
14
14
 
15
15
  Or install it yourself as:
16
16
 
@@ -18,7 +18,10 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ ### capify
22
+
23
+ The `rake capify` command acts as a replacement for `capify`. When run it will prompt a series of questions about the deployment and output files
24
+ fully configured for deployment. The prompts will attempt to supply defaults based on the application.
22
25
 
23
26
  ## Contributing
24
27
 
@@ -19,11 +19,13 @@ module AktionCap
19
19
  q.default = `git config --local remote.origin.url`.strip
20
20
  end
21
21
  end
22
+ options[:ssh_user] = ask("Enter the ssh username to deploy with: ") {|q| q.default = 'deployer'}
22
23
  options[:stages] = ask("Enter the deployment stages(separate with commas): ") {|q| q.default = 'production'}.split(',').map(&:to_sym)
23
24
  options[:stages].each do |stage|
25
+ say("\nConfigure #{stage.to_s}:")
24
26
  options[stage] = {}
25
- options[stage][:server_hostname] = ask("Enter the server hostname or IP: ") {|q| q.default = 'localhost'}
26
- options[stage][:server_port] = ask("Enter the ssh port to connect to: ", Integer) do |q|
27
+ options[stage][:server_hostname] = ask(" Enter the server hostname or IP: ") {|q| q.default = 'localhost'}
28
+ options[stage][:server_port] = ask(" Enter the ssh port to connect to: ", Integer) do |q|
27
29
  if options[stage][:server_hostname] == 'localhost'
28
30
  q.default = '2222'
29
31
  else
@@ -34,36 +36,31 @@ module AktionCap
34
36
  options
35
37
  end
36
38
 
37
- def install
38
- desc 'capify'
39
- task 'capify' do
40
- options = prompts_for_capify
41
-
42
- capfile = File.join(Dir.pwd, 'Capfile')
43
- File.open(capfile, 'w') do |f|
44
- f << <<FILE
39
+ def write_capfile
40
+ File.open('Capfile', 'w') do |file|
41
+ file << <<-FILE
45
42
  load 'deploy'
46
43
  load 'config/deploy'
47
- FILE
48
- end
49
-
44
+ FILE
45
+ end
46
+ end
50
47
 
51
- config_deploy = File.join(Dir.pwd, 'config', 'deploy.rb')
52
- File.open(config_deploy, 'w') do |f|
53
- f << <<FILE
54
- set :stages %w(production staging)
48
+ def write_config_deploy(opts)
49
+ File.open('config/deploy.rb', 'w') do |file|
50
+ file << <<-FILE
51
+ set :stages, %w(#{opts[:stages].map(&:to_s).join(' ')})
55
52
 
56
53
  require 'capistrano/ext/multistage'
57
54
  require 'bundler/capistrano'
58
55
  require 'rvm/capistrano'
59
56
  require './config/boot'
60
57
 
61
- ssh_options[:username] = 'deployer'
58
+ ssh_options[:username] = '#{opts[:ssh_user]}'
62
59
  ssh_options[:forward_agent] = true
63
60
 
64
- set :application, '#{options[:application]}'
65
- set :repository, '#{options[:repository]}'
66
- set :scm, :#{options[:scm]}
61
+ set :application, '#{opts[:application]}'
62
+ set :repository, '#{opts[:repository]}'
63
+ set :scm, :#{opts[:scm]}
67
64
  set :deploy_via, :remote_cache
68
65
  set :deploy_to, "/var/www/\#{application}/\#{stage}"
69
66
  set :rvm_type, :user
@@ -75,24 +72,30 @@ set :tasks_for_rake, %w(db:migrate)
75
72
  after 'deploy:update_code', 'deploy:create_shared_symlinks'
76
73
  before 'deploy:create_symlink', 'deploy:run_rake_tasks'
77
74
  after 'deploy', 'deploy:cleanup'
78
- FILE
79
- end
80
-
81
- deploy_dir = File.join(Dir.pwd, 'config', 'deploy')
82
- Dir.mkdir(deploy_dir) unless Dir.exists?(deploy_dir)
75
+ FILE
76
+ end
77
+ end
83
78
 
84
- options[:stages].each do |stage|
85
- deploy_file = File.join(Dir.pwd, 'config', 'deploy', "#{stage.to_s}.rb")
86
- File.open(deploy_file, 'w') do |f|
87
- f << <<FILE
88
- set :port, #{options[stage][:server_port]}
89
- set :server_hostname, '#{options[stage][:server_hostname]}'
79
+ def write_stage_config_deploy(stage, opts)
80
+ File.open("config/deploy/#{stage.to_s}.rb", 'w') do |file|
81
+ file << <<-FILE
82
+ set :port, #{opts[stage][:server_port]}
83
+ set :server_hostname, '#{opts[stage][:server_hostname]}'
90
84
  role :app, server_hostname
91
85
  role :web, server_hostname
92
86
  role :db, server_hostname, primary: true
93
- FILE
94
- end
95
- end
87
+ FILE
88
+ end
89
+ end
90
+
91
+ def install
92
+ desc 'capify'
93
+ task 'capify' do
94
+ opts = prompts_for_capify
95
+ Dir.mkdir('config/deploy') unless Dir.exists?('config/deploy')
96
+ write_capfile
97
+ write_config_deploy opts
98
+ opts[:stages].each{|stage| write_stage_config_deploy(stage, opts)}
96
99
  end
97
100
  end
98
101
  end
@@ -1,3 +1,3 @@
1
1
  module AktionCap
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/spec/capify_spec.rb CHANGED
@@ -29,7 +29,7 @@ RSpec::Matchers.define :contain_content do |expected_line|
29
29
  failure_message_for_should do |file|
30
30
  file = File.open(file) if file.is_a? String
31
31
  lines = file.lines.to_a
32
- best_match = [string_similarity(expected_line, lines.first)]
32
+ best_match = [string_similarity(expected_line, lines.first), lines.first]
33
33
  lines[1..-1].each do |l|
34
34
  score = string_similarity(expected_line, l)
35
35
  best_match = [score,l] if score > best_match[0]
@@ -64,9 +64,11 @@ describe 'capify' do
64
64
 
65
65
  describe "dummy/config/deploy.rb" do
66
66
  it { should be_a_file_that_exists }
67
+ it { should contain_content "set :stages, %w(production)" }
67
68
  it { should contain_content "set :application, 'dummy'" }
68
69
  it { should contain_content "set :repository, 'git@github.com:AktionLab/aktion_cap'" }
69
70
  it { should contain_content "set :scm, :git" }
71
+ it { should contain_content "ssh_options[:username] = 'deployer'" }
70
72
  end
71
73
 
72
74
  describe 'dummy/config/deploy/production.rb' do
@@ -83,8 +85,10 @@ describe 'capify' do
83
85
 
84
86
  describe 'dummy/config/deploy.rb' do
85
87
  it { should be_a_file_that_exists }
88
+ it { should contain_content "set :stages, %w(staging production)" }
86
89
  it { should contain_content "set :application, 'custom_application'" }
87
90
  it { should contain_content "set :repository, 'git@github.com:someone/custom_application'" }
91
+ it { should contain_content "ssh_options[:username] = 'www-data'" }
88
92
  end
89
93
 
90
94
  describe 'dummy/config/deploy/production.rb' do
@@ -1,6 +1,7 @@
1
1
  custom_application
2
2
  git
3
3
  git@github.com:someone/custom_application
4
+ www-data
4
5
  staging,production
5
6
  staging.customapp.com
6
7
  2323
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aktion_cap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -69,6 +69,7 @@ files:
69
69
  - .gitignore
70
70
  - .rspec
71
71
  - .rvmrc
72
+ - CHANGELOG.md
72
73
  - Gemfile
73
74
  - LICENSE
74
75
  - README.md
@@ -98,7 +99,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
99
  version: '0'
99
100
  segments:
100
101
  - 0
101
- hash: 742495597940047984
102
+ hash: 1872119278476282222
102
103
  required_rubygems_version: !ruby/object:Gem::Requirement
103
104
  none: false
104
105
  requirements:
@@ -107,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
108
  version: '0'
108
109
  segments:
109
110
  - 0
110
- hash: 742495597940047984
111
+ hash: 1872119278476282222
111
112
  requirements: []
112
113
  rubyforge_project:
113
114
  rubygems_version: 1.8.24