pulsar 0.0.2 → 0.0.3
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/.rspec +3 -0
- data/Rakefile +7 -0
- data/bin/pulsar +1 -48
- data/lib/pulsar.rb +2 -0
- data/lib/pulsar/commands/all.rb +5 -0
- data/lib/pulsar/commands/cap.rb +42 -0
- data/lib/pulsar/commands/list.rb +26 -0
- data/lib/pulsar/commands/main.rb +21 -0
- data/lib/pulsar/helpers/clamp.rb +22 -1
- data/lib/pulsar/version.rb +1 -1
- data/pulsar.gemspec +5 -0
- data/spec/pulsar/commands_spec.rb +18 -0
- data/spec/spec_helper.rb +29 -0
- metadata +82 -3
data/.rspec
ADDED
data/Rakefile
CHANGED
data/bin/pulsar
CHANGED
@@ -2,51 +2,4 @@
|
|
2
2
|
|
3
3
|
require 'pulsar'
|
4
4
|
|
5
|
-
|
6
|
-
include Pulsar::Helpers::Clamp
|
7
|
-
|
8
|
-
option [ "-v", "--verbose" ], :flag,
|
9
|
-
"Print out all the things!!!",
|
10
|
-
:default => false
|
11
|
-
|
12
|
-
option [ "-k", "--keep-capfile" ], :flag,
|
13
|
-
"Dont't remove the generated capfile in the /tmp/ directory.",
|
14
|
-
:default => false
|
15
|
-
|
16
|
-
option [ "-l", "--log-level" ], "LOG LEVEL",
|
17
|
-
"How much output will Capistrano spit out. Can be any of: important, info, debug.",
|
18
|
-
:default => "important"
|
19
|
-
|
20
|
-
option [ "-c", "--conf-repo" ], "REPO URL",
|
21
|
-
"A git repository with deploy configurations, mainly apps and recipes.",
|
22
|
-
:required => true
|
23
|
-
|
24
|
-
option [ "-b", "--conf-branch" ], "REPO BRANCH",
|
25
|
-
"Specify a branch for the configuration repository.",
|
26
|
-
:default => "master"
|
27
|
-
|
28
|
-
parameter "APPLICATION", "The application which you would like to deploy. For example: nebulab"
|
29
|
-
parameter "ENVIRONMENT", "The environment on which you would like to deploy. For example: production" do |env|
|
30
|
-
%w(production staging development).include?(env) ? env : raise(ArgumentError)
|
31
|
-
end
|
32
|
-
parameter "[TASKS] ...", "The tasks that will be passed to the final `cap` command. For example: --tasks, deploy, deploy:check", :default => "deploy"
|
33
|
-
|
34
|
-
def execute
|
35
|
-
target = "#{application}:#{environment}"
|
36
|
-
|
37
|
-
::Bundler.with_clean_env do
|
38
|
-
fetch_repo
|
39
|
-
bundle_install
|
40
|
-
create_capfile
|
41
|
-
build_capfile(target)
|
42
|
-
|
43
|
-
cap_args = [tasks_list].flatten.join(" ")
|
44
|
-
run_capistrano(cap_args)
|
45
|
-
|
46
|
-
remove_capfile unless keep_capfile?
|
47
|
-
remove_repo
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
PulsarCommand.run
|
5
|
+
Pulsar::MainCommand.run
|
data/lib/pulsar.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Pulsar
|
2
|
+
class CapCommand < MainCommand
|
3
|
+
option [ "-k", "--keep-capfile" ], :flag,
|
4
|
+
"don't remove the generated capfile in the /tmp/ directory",
|
5
|
+
:default => false
|
6
|
+
|
7
|
+
option [ "-l", "--log-level" ], "LOG LEVEL",
|
8
|
+
"how much output will Capistrano print out. Can be any of: important, info, debug",
|
9
|
+
:default => "important"
|
10
|
+
|
11
|
+
option [ "-c", "--conf-repo" ], "REPO URL",
|
12
|
+
"a git repository with deploy configurations, mainly apps and recipes",
|
13
|
+
:required => true
|
14
|
+
|
15
|
+
option [ "-b", "--conf-branch" ], "REPO BRANCH",
|
16
|
+
"specify a branch for the configuration repository",
|
17
|
+
:default => "master"
|
18
|
+
|
19
|
+
parameter "APPLICATION", "the application which you would like to deploy"
|
20
|
+
parameter "ENVIRONMENT", "the environment on which you would like to deploy" do |env|
|
21
|
+
%w(production staging development).include?(env) ? env : raise(ArgumentError)
|
22
|
+
end
|
23
|
+
parameter "[TASKS] ...", "the tasks/args that will be passed to the final `cap` command", :default => "deploy"
|
24
|
+
|
25
|
+
def execute
|
26
|
+
target = "#{application}:#{environment}"
|
27
|
+
|
28
|
+
Bundler.with_clean_env do
|
29
|
+
fetch_repo
|
30
|
+
bundle_install
|
31
|
+
create_capfile
|
32
|
+
build_capfile(target)
|
33
|
+
|
34
|
+
cap_args = [tasks_list].flatten.join(" ")
|
35
|
+
run_capistrano(cap_args)
|
36
|
+
|
37
|
+
remove_capfile unless keep_capfile?
|
38
|
+
remove_repo
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Pulsar
|
2
|
+
class ListCommand < MainCommand
|
3
|
+
option [ "-k", "--keep-capfile" ], :flag,
|
4
|
+
"don't remove the generated capfile in the /tmp/ directory",
|
5
|
+
:default => false
|
6
|
+
|
7
|
+
option [ "-c", "--conf-repo" ], "REPO URL",
|
8
|
+
"a git repository with deploy configurations, mainly apps and recipes",
|
9
|
+
:required => true
|
10
|
+
|
11
|
+
option [ "-b", "--conf-branch" ], "REPO BRANCH",
|
12
|
+
"specify a branch for the configuration repository",
|
13
|
+
:default => "master"
|
14
|
+
|
15
|
+
def execute
|
16
|
+
Bundler.with_clean_env do
|
17
|
+
fetch_repo
|
18
|
+
|
19
|
+
list_apps
|
20
|
+
|
21
|
+
remove_capfile unless keep_capfile?
|
22
|
+
remove_repo
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Pulsar
|
2
|
+
class MainCommand < Clamp::Command
|
3
|
+
include Pulsar::Helpers::Clamp
|
4
|
+
|
5
|
+
#
|
6
|
+
# Global options
|
7
|
+
#
|
8
|
+
option [ "-V", "--version" ], :flag, "print out pulsar version" do
|
9
|
+
puts(VERSION)
|
10
|
+
exit(0)
|
11
|
+
end
|
12
|
+
|
13
|
+
option [ "-v", "--verbose" ], :flag, "print out what pulsar is doing", :default => false
|
14
|
+
|
15
|
+
#
|
16
|
+
# Sub commands
|
17
|
+
#
|
18
|
+
subcommand "cap", "build a capfile from configuration repo and execute the cap command on it", CapCommand
|
19
|
+
subcommand "list", "list all available apps and environments which you can deploy", ListCommand
|
20
|
+
end
|
21
|
+
end
|
data/lib/pulsar/helpers/clamp.rb
CHANGED
@@ -36,8 +36,9 @@ module Pulsar
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def fetch_repo
|
39
|
+
repo = !conf_repo.include?(':') ? "git@github.com:#{conf_repo}.git" : conf_repo
|
39
40
|
git_options = "--quiet --depth=1 --branch #{conf_branch}"
|
40
|
-
run_cmd("git clone #{git_options} #{
|
41
|
+
run_cmd("git clone #{git_options} #{repo} #{config_path}", :verbose => verbose?)
|
41
42
|
end
|
42
43
|
|
43
44
|
def include_app(app, stage=nil)
|
@@ -71,6 +72,26 @@ module Pulsar
|
|
71
72
|
run_cmd("cat #{config_path}/apps/base.rb >> #{capfile_path}", :verbose => verbose?)
|
72
73
|
end
|
73
74
|
|
75
|
+
def list_apps
|
76
|
+
apps = Dir["#{config_path}/apps/*"].each do |app|
|
77
|
+
if File.directory?(app)
|
78
|
+
app_name = File.basename(app)
|
79
|
+
app_envs = []
|
80
|
+
|
81
|
+
Dir["#{app}/*"].each do |env|
|
82
|
+
environments = %w(development staging production)
|
83
|
+
env_name = File.basename(env, '.rb')
|
84
|
+
|
85
|
+
if environments.include?(env_name)
|
86
|
+
app_envs << env_name
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
puts "#{app_name}: #{app_envs.join(', ')}"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
74
95
|
def remove_capfile
|
75
96
|
rm_rf(capfile_path, :verbose => verbose?)
|
76
97
|
end
|
data/lib/pulsar/version.rb
CHANGED
data/pulsar.gemspec
CHANGED
@@ -22,4 +22,9 @@ Gem::Specification.new do |gem|
|
|
22
22
|
gem.require_paths = ["lib"]
|
23
23
|
|
24
24
|
gem.add_dependency "clamp", "~> 0.5"
|
25
|
+
gem.add_dependency "bundler", "~> 1.2"
|
26
|
+
|
27
|
+
gem.add_development_dependency "rake"
|
28
|
+
gem.add_development_dependency "rspec", "~> 2.12"
|
29
|
+
gem.add_development_dependency "rr", "~> 1.0"
|
25
30
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Pulsar::MainCommand do
|
4
|
+
include OutputCapture
|
5
|
+
|
6
|
+
context "with required arguments" do
|
7
|
+
before do
|
8
|
+
@pulsar = Pulsar::CapCommand.new("cap")
|
9
|
+
@pulsar.parse(%w(-c repo.com project development))
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should set variables correctly" do
|
13
|
+
@pulsar.conf_repo.should == "repo.com"
|
14
|
+
@pulsar.application.should == "project"
|
15
|
+
@pulsar.environment.should == "development"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require "rspec"
|
2
|
+
require "pulsar"
|
3
|
+
require 'stringio'
|
4
|
+
|
5
|
+
RSpec.configure do |config|
|
6
|
+
config.mock_with :rr
|
7
|
+
end
|
8
|
+
|
9
|
+
module OutputCapture
|
10
|
+
def self.included(target)
|
11
|
+
target.before do
|
12
|
+
$stdout = @out = StringIO.new
|
13
|
+
$stderr = @err = StringIO.new
|
14
|
+
end
|
15
|
+
|
16
|
+
target.after do
|
17
|
+
$stdout = STDOUT
|
18
|
+
$stderr = STDERR
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def stdout
|
23
|
+
@out.string
|
24
|
+
end
|
25
|
+
|
26
|
+
def stderr
|
27
|
+
@err.string
|
28
|
+
end
|
29
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pulsar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-12-
|
13
|
+
date: 2012-12-27 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: clamp
|
@@ -28,6 +28,70 @@ dependencies:
|
|
28
28
|
- - ~>
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: '0.5'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: bundler
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ~>
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '1.2'
|
39
|
+
type: :runtime
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.2'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: rspec
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ~>
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '2.12'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ~>
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '2.12'
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: rr
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ~>
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '1.0'
|
87
|
+
type: :development
|
88
|
+
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ~>
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '1.0'
|
31
95
|
description: NebuLab's central capistrano deploy resource.
|
32
96
|
email:
|
33
97
|
- info@nebulab.it
|
@@ -37,6 +101,7 @@ extensions: []
|
|
37
101
|
extra_rdoc_files: []
|
38
102
|
files:
|
39
103
|
- .gitignore
|
104
|
+
- .rspec
|
40
105
|
- .rvmrc
|
41
106
|
- Gemfile
|
42
107
|
- LICENSE.txt
|
@@ -44,11 +109,17 @@ files:
|
|
44
109
|
- Rakefile
|
45
110
|
- bin/pulsar
|
46
111
|
- lib/pulsar.rb
|
112
|
+
- lib/pulsar/commands/all.rb
|
113
|
+
- lib/pulsar/commands/cap.rb
|
114
|
+
- lib/pulsar/commands/list.rb
|
115
|
+
- lib/pulsar/commands/main.rb
|
47
116
|
- lib/pulsar/helpers/capistrano.rb
|
48
117
|
- lib/pulsar/helpers/clamp.rb
|
49
118
|
- lib/pulsar/tasks/.gitkeep
|
50
119
|
- lib/pulsar/version.rb
|
51
120
|
- pulsar.gemspec
|
121
|
+
- spec/pulsar/commands_spec.rb
|
122
|
+
- spec/spec_helper.rb
|
52
123
|
homepage: https://github.com/nebulab/pulsar
|
53
124
|
licenses: []
|
54
125
|
post_install_message:
|
@@ -61,12 +132,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
61
132
|
- - ! '>='
|
62
133
|
- !ruby/object:Gem::Version
|
63
134
|
version: '0'
|
135
|
+
segments:
|
136
|
+
- 0
|
137
|
+
hash: 1849999196866319529
|
64
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
139
|
none: false
|
66
140
|
requirements:
|
67
141
|
- - ! '>='
|
68
142
|
- !ruby/object:Gem::Version
|
69
143
|
version: '0'
|
144
|
+
segments:
|
145
|
+
- 0
|
146
|
+
hash: 1849999196866319529
|
70
147
|
requirements: []
|
71
148
|
rubyforge_project:
|
72
149
|
rubygems_version: 1.8.24
|
@@ -75,4 +152,6 @@ specification_version: 3
|
|
75
152
|
summary: A simple gem that parses capistrano configuration froma another (private)
|
76
153
|
repository providing a simple solution to managing multiple systems without installing
|
77
154
|
capistrano configurations in each app.
|
78
|
-
test_files:
|
155
|
+
test_files:
|
156
|
+
- spec/pulsar/commands_spec.rb
|
157
|
+
- spec/spec_helper.rb
|