aktion_cap 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.rspec +2 -0
- data/Gemfile +8 -0
- data/Rakefile +1 -0
- data/lib/aktion_cap/railtie.rb +10 -0
- data/lib/aktion_cap/tasks.rb +101 -0
- data/lib/aktion_cap/version.rb +1 -1
- data/lib/aktion_cap.rb +1 -1
- data/lib/dummy_rails_template.rb +27 -0
- data/lib/tasks/test.rake +39 -0
- data/spec/capify_spec.rb +102 -0
- data/spec/fixtures/custom_capify_responses +9 -0
- data/spec/fixtures/default_capify_responses +7 -0
- data/spec/spec_helper.rb +17 -0
- metadata +22 -3
data/.gitignore
CHANGED
data/.rspec
ADDED
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'highline/import'
|
2
|
+
|
3
|
+
module AktionCap
|
4
|
+
class Tasks
|
5
|
+
include Rake::DSL
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def install_tasks
|
9
|
+
new.install
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def prompts_for_capify
|
14
|
+
options = {}
|
15
|
+
options[:application] = ask("Enter the application name: ") {|q| q.default = File.basename(Dir.pwd)}
|
16
|
+
options[:scm] = ask("Enter type of version control: ") {|q| q.default = "git"}
|
17
|
+
options[:repository] = ask("Enter the git repository to deploy from: ") do |q|
|
18
|
+
if options[:scm] == 'git'
|
19
|
+
q.default = `git config --local remote.origin.url`.strip
|
20
|
+
end
|
21
|
+
end
|
22
|
+
options[:stages] = ask("Enter the deployment stages(separate with commas): ") {|q| q.default = 'production'}.split(',').map(&:to_sym)
|
23
|
+
options[:stages].each do |stage|
|
24
|
+
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
|
+
if options[stage][:server_hostname] == 'localhost'
|
28
|
+
q.default = '2222'
|
29
|
+
else
|
30
|
+
q.default = '22'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
options
|
35
|
+
end
|
36
|
+
|
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
|
45
|
+
load 'deploy'
|
46
|
+
load 'config/deploy'
|
47
|
+
FILE
|
48
|
+
end
|
49
|
+
|
50
|
+
|
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)
|
55
|
+
|
56
|
+
require 'capistrano/ext/multistage'
|
57
|
+
require 'bundler/capistrano'
|
58
|
+
require 'rvm/capistrano'
|
59
|
+
require './config/boot'
|
60
|
+
|
61
|
+
ssh_options[:username] = 'deployer'
|
62
|
+
ssh_options[:forward_agent] = true
|
63
|
+
|
64
|
+
set :application, '#{options[:application]}'
|
65
|
+
set :repository, '#{options[:repository]}'
|
66
|
+
set :scm, :#{options[:scm]}
|
67
|
+
set :deploy_via, :remote_cache
|
68
|
+
set :deploy_to, "/var/www/\#{application}/\#{stage}"
|
69
|
+
set :rvm_type, :user
|
70
|
+
set :use_sudo, false
|
71
|
+
|
72
|
+
set :shared_symlinks, %w(config/database.yml)
|
73
|
+
set :tasks_for_rake, %w(db:migrate)
|
74
|
+
|
75
|
+
after 'deploy:update_code', 'deploy:create_shared_symlinks'
|
76
|
+
before 'deploy:create_symlink', 'deploy:run_rake_tasks'
|
77
|
+
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)
|
83
|
+
|
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]}'
|
90
|
+
role :app, server_hostname
|
91
|
+
role :web, server_hostname
|
92
|
+
role :db, server_hostname, primary: true
|
93
|
+
FILE
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
AktionCap::Tasks.install_tasks
|
data/lib/aktion_cap/version.rb
CHANGED
data/lib/aktion_cap.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
application_name = "dummy"
|
2
|
+
|
3
|
+
run "echo > Gemfile"
|
4
|
+
|
5
|
+
add_source :rubygems
|
6
|
+
gem 'rails'
|
7
|
+
gem 'aktion_cap', path: '..'
|
8
|
+
|
9
|
+
run "bundle install"
|
10
|
+
|
11
|
+
run "rm public/index.html"
|
12
|
+
run "rm -rf doc"
|
13
|
+
run "rm README.rdoc"
|
14
|
+
run "rm -rf app/assets"
|
15
|
+
run "echo \"\\n\\n\\n\\n\\n\\n\\n\" > spec/capify_responses"
|
16
|
+
|
17
|
+
rakefile 'clean.rake' do
|
18
|
+
<<-TASK
|
19
|
+
require 'fileutils'
|
20
|
+
|
21
|
+
task :clean do
|
22
|
+
files = %w(Capfile config/deploy.rb config/deploy/staging.rb config/deploy/production.rb)
|
23
|
+
files.map{|f| File.join(Dir.pwd, f)}.each{|f| FileUtils.rm_f f}
|
24
|
+
end
|
25
|
+
TASK
|
26
|
+
end
|
27
|
+
|
data/lib/tasks/test.rake
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'colored'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
namespace :test do
|
5
|
+
desc 'Setup the test environment'
|
6
|
+
task :setup => %w(setup:rails setup:vagrant)
|
7
|
+
|
8
|
+
desc 'Teardown the test enviornment'
|
9
|
+
task :clean => %w(clean:rails clean:vagrant)
|
10
|
+
|
11
|
+
namespace :setup do
|
12
|
+
desc 'Setup the dummy rails application'
|
13
|
+
task :rails do
|
14
|
+
puts 'Setting up the dummy rails application'.green
|
15
|
+
pipe = IO.popen('rails new dummy -m lib/dummy_rails_template.rb -T -G -O -S -J --skip-gemfile --skip-bundle')
|
16
|
+
while line = pipe.gets
|
17
|
+
puts line
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
desc 'Setup the vagrant deployment VM'
|
22
|
+
task :vagrant do
|
23
|
+
puts 'Setting up the vagrant deployment VM'.green
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
namespace :clean do
|
28
|
+
desc 'Teardown the dummy rails application'
|
29
|
+
task :rails do
|
30
|
+
puts 'Tearing down the dummy rails application'.green
|
31
|
+
FileUtils.rm_rf './dummy'
|
32
|
+
end
|
33
|
+
|
34
|
+
desc 'Teardown the vagrant deployment VM'
|
35
|
+
task :vagrant do
|
36
|
+
puts 'Tearing down the vagrant deployment VM'.green
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/spec/capify_spec.rb
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'colored'
|
3
|
+
|
4
|
+
def string_similarity(str1, str2)
|
5
|
+
str1.downcase!
|
6
|
+
str2.downcase!
|
7
|
+
pairs1 = (0..str1.length-2).map{|i| str1[i,2]}.reject{|pair| pair.include? " "}
|
8
|
+
pairs2 = (0..str2.length-2).map{|i| str2[i,2]}.reject{|pair| pair.include? " "}
|
9
|
+
union = pairs1.size + pairs2.size
|
10
|
+
intersection = 0
|
11
|
+
pairs1.each do |p1|
|
12
|
+
0.upto(pairs2.size-1) do |i|
|
13
|
+
if p1 === pairs2[i]
|
14
|
+
intersection += 1
|
15
|
+
pairs2.slice!(i)
|
16
|
+
break
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
(2.0 * intersection) / union
|
21
|
+
end
|
22
|
+
|
23
|
+
RSpec::Matchers.define :contain_content do |expected_line|
|
24
|
+
match do |file|
|
25
|
+
file = File.open(file) if file.is_a? String
|
26
|
+
file.lines.any? {|l| l == "#{expected_line}\n"}
|
27
|
+
end
|
28
|
+
|
29
|
+
failure_message_for_should do |file|
|
30
|
+
file = File.open(file) if file.is_a? String
|
31
|
+
lines = file.lines.to_a
|
32
|
+
best_match = [string_similarity(expected_line, lines.first)]
|
33
|
+
lines[1..-1].each do |l|
|
34
|
+
score = string_similarity(expected_line, l)
|
35
|
+
best_match = [score,l] if score > best_match[0]
|
36
|
+
end
|
37
|
+
"Expected:\n#{expected_line}\nClosest match:\n#{best_match[1].yellow}\n#{lines.map(&:blue).join('')}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
RSpec::Matchers.define :be_a_file_that_exists do
|
42
|
+
match do |filename|
|
43
|
+
File.exists?(filename)
|
44
|
+
end
|
45
|
+
|
46
|
+
failure_message_for_should do |filename|
|
47
|
+
"expected #{filename} to exist"
|
48
|
+
end
|
49
|
+
|
50
|
+
failure_message_for_should_not do |filename|
|
51
|
+
"expected #{filename} to not exist"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe 'capify' do
|
56
|
+
context 'default' do
|
57
|
+
before(:each) do
|
58
|
+
`cd dummy && cat ../spec/fixtures/default_capify_responses | rake clean capify`
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'dummy/Capfile' do
|
62
|
+
it { should be_a_file_that_exists }
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "dummy/config/deploy.rb" do
|
66
|
+
it { should be_a_file_that_exists }
|
67
|
+
it { should contain_content "set :application, 'dummy'" }
|
68
|
+
it { should contain_content "set :repository, 'git@github.com:AktionLab/aktion_cap'" }
|
69
|
+
it { should contain_content "set :scm, :git" }
|
70
|
+
end
|
71
|
+
|
72
|
+
describe 'dummy/config/deploy/production.rb' do
|
73
|
+
it { should be_a_file_that_exists }
|
74
|
+
it { should contain_content "set :port, 2222" }
|
75
|
+
it { should contain_content "set :server_hostname, 'localhost'" }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context 'custom' do
|
80
|
+
before(:each) do
|
81
|
+
`cd dummy && cat ../spec/fixtures/custom_capify_responses | rake clean capify`
|
82
|
+
end
|
83
|
+
|
84
|
+
describe 'dummy/config/deploy.rb' do
|
85
|
+
it { should be_a_file_that_exists }
|
86
|
+
it { should contain_content "set :application, 'custom_application'" }
|
87
|
+
it { should contain_content "set :repository, 'git@github.com:someone/custom_application'" }
|
88
|
+
end
|
89
|
+
|
90
|
+
describe 'dummy/config/deploy/production.rb' do
|
91
|
+
it { should be_a_file_that_exists }
|
92
|
+
it { should contain_content "set :port, 2424" }
|
93
|
+
it { should contain_content "set :server_hostname, 'www.customapp.com'" }
|
94
|
+
end
|
95
|
+
|
96
|
+
describe 'dummy/config/deploy/staging.rb' do
|
97
|
+
it { should be_a_file_that_exists }
|
98
|
+
it { should contain_content "set :port, 2323" }
|
99
|
+
it { should contain_content "set :server_hostname, 'staging.customapp.com'" }
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
2
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
3
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
4
|
+
# loaded once.
|
5
|
+
#
|
6
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
9
|
+
config.run_all_when_everything_filtered = true
|
10
|
+
config.filter_run :focus
|
11
|
+
|
12
|
+
# Run specs in random order to surface order dependencies. If you find an
|
13
|
+
# order dependency and want to debug it, you can fix the order by providing
|
14
|
+
# the seed, which is printed after each run.
|
15
|
+
# --seed 1234
|
16
|
+
config.order = 'random'
|
17
|
+
end
|
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.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capistrano
|
@@ -67,6 +67,7 @@ extensions: []
|
|
67
67
|
extra_rdoc_files: []
|
68
68
|
files:
|
69
69
|
- .gitignore
|
70
|
+
- .rspec
|
70
71
|
- .rvmrc
|
71
72
|
- Gemfile
|
72
73
|
- LICENSE
|
@@ -74,7 +75,15 @@ files:
|
|
74
75
|
- Rakefile
|
75
76
|
- aktion_cap.gemspec
|
76
77
|
- lib/aktion_cap.rb
|
78
|
+
- lib/aktion_cap/railtie.rb
|
79
|
+
- lib/aktion_cap/tasks.rb
|
77
80
|
- lib/aktion_cap/version.rb
|
81
|
+
- lib/dummy_rails_template.rb
|
82
|
+
- lib/tasks/test.rake
|
83
|
+
- spec/capify_spec.rb
|
84
|
+
- spec/fixtures/custom_capify_responses
|
85
|
+
- spec/fixtures/default_capify_responses
|
86
|
+
- spec/spec_helper.rb
|
78
87
|
homepage: http://aktionlab.com
|
79
88
|
licenses: []
|
80
89
|
post_install_message:
|
@@ -87,16 +96,26 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
87
96
|
- - ! '>='
|
88
97
|
- !ruby/object:Gem::Version
|
89
98
|
version: '0'
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
hash: 742495597940047984
|
90
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
103
|
none: false
|
92
104
|
requirements:
|
93
105
|
- - ! '>='
|
94
106
|
- !ruby/object:Gem::Version
|
95
107
|
version: '0'
|
108
|
+
segments:
|
109
|
+
- 0
|
110
|
+
hash: 742495597940047984
|
96
111
|
requirements: []
|
97
112
|
rubyforge_project:
|
98
113
|
rubygems_version: 1.8.24
|
99
114
|
signing_key:
|
100
115
|
specification_version: 3
|
101
116
|
summary: Deployment gem
|
102
|
-
test_files:
|
117
|
+
test_files:
|
118
|
+
- spec/capify_spec.rb
|
119
|
+
- spec/fixtures/custom_capify_responses
|
120
|
+
- spec/fixtures/default_capify_responses
|
121
|
+
- spec/spec_helper.rb
|