pushwagner 0.0.2.2 → 0.0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +7 -7
- data/README.md +10 -10
- data/bin/pw +19 -7
- data/lib/pushwagner/main.rb +6 -1
- data/lib/pushwagner/version.rb +1 -1
- data/spec/environment_spec.rb +3 -3
- data/spec/hooks_spec.rb +24 -30
- data/spec/maven_spec.rb +7 -7
- data/spec/spec_helper.rb +4 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe236d345b1c2f032602d5223892be7ed6cdd787
|
4
|
+
data.tar.gz: 81c0457531861318a266868ee36f546d780e0a24
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2aa8d1dea5ceb4e4d83b1c0135919889c191f74358c823ecb921d5d218af19322130fdf14ff5ed6c2cb8052cc26f3276fe6123794d4c41ffff9365ddd38c3e12
|
7
|
+
data.tar.gz: 5005a2be5701ca4e1d5b6ddf75bffb3bdeedb34ba0e9496c22966f7c0b0e0ca6f78ee28a58b4e98eda961839fb98dc80ba620a5eb2addcccde9d6ace5de2c588
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
pushwagner (0.0.2.
|
4
|
+
pushwagner (0.0.2.3)
|
5
5
|
colorize (~> 0.7)
|
6
6
|
net-scp (~> 1.2, >= 1.2.1)
|
7
7
|
net-ssh (~> 3.1, >= 3.1.1)
|
@@ -11,15 +11,15 @@ GEM
|
|
11
11
|
remote: https://rubygems.org/
|
12
12
|
specs:
|
13
13
|
coderay (1.1.1)
|
14
|
-
colorize (0.
|
14
|
+
colorize (0.8.1)
|
15
15
|
diff-lcs (1.2.5)
|
16
16
|
method_source (0.8.2)
|
17
|
-
mini_portile2 (2.
|
17
|
+
mini_portile2 (2.2.0)
|
18
18
|
net-scp (1.2.1)
|
19
19
|
net-ssh (>= 2.6.5)
|
20
|
-
net-ssh (3.
|
21
|
-
nokogiri (1.
|
22
|
-
mini_portile2 (~> 2.
|
20
|
+
net-ssh (3.2.0)
|
21
|
+
nokogiri (1.8.0)
|
22
|
+
mini_portile2 (~> 2.2.0)
|
23
23
|
pry (0.10.3)
|
24
24
|
coderay (~> 1.1.0)
|
25
25
|
method_source (~> 0.8.1)
|
@@ -51,4 +51,4 @@ DEPENDENCIES
|
|
51
51
|
rspec
|
52
52
|
|
53
53
|
BUNDLED WITH
|
54
|
-
1.
|
54
|
+
1.15.1
|
data/README.md
CHANGED
@@ -89,16 +89,16 @@ Sudo support, automatically prompts for passwd, or use: `env PUSHWAGNER_SUDO=sud
|
|
89
89
|
|
90
90
|
````yaml
|
91
91
|
hooks:
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
92
|
+
local:
|
93
|
+
before:
|
94
|
+
- mvn package
|
95
|
+
after:
|
96
|
+
- mvn test -Pint
|
97
|
+
remote:
|
98
|
+
before:
|
99
|
+
- /usr/sbin/service foo stop
|
100
|
+
after:
|
101
|
+
- /usr/sbin/service foo start
|
102
102
|
````
|
103
103
|
|
104
104
|
### Environments
|
data/bin/pw
CHANGED
@@ -2,18 +2,31 @@
|
|
2
2
|
|
3
3
|
require 'pushwagner'
|
4
4
|
require 'pushwagner/version'
|
5
|
+
require 'optparse'
|
6
|
+
require 'ostruct'
|
5
7
|
|
6
8
|
def get_version
|
7
9
|
Pushwagner.info "You must specify which version you wish to deploy"
|
8
10
|
STDIN.gets.strip
|
9
11
|
end
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
+
options = OpenStruct.new
|
14
|
+
options.environment = 'default'
|
15
|
+
options.version = '1'
|
16
|
+
options.config_file = '.pw.yml'
|
17
|
+
options.command = 'todo'
|
13
18
|
|
14
|
-
|
19
|
+
OptionParser.new do |opts|
|
20
|
+
opts.banner = 'Usage: pw <deploy> [options]'
|
21
|
+
opts.on('deploy') { |v| options.command = 'deploy'}
|
22
|
+
opts.on('-c FILE', 'Use config file') { |v| options.config_file = v }
|
23
|
+
opts.on('-e ENV', 'Set environment') { |v| options.environment = v }
|
24
|
+
opts.on('-V VERSION', 'Set version') { |v| options.version = v }
|
25
|
+
opts.on('-v', '--version', 'Show version') { |v| puts Pushwagner::VERSION; exit }
|
26
|
+
opts.on('-h', '--help', 'Show help') { |v| puts puts opts; exit }
|
27
|
+
end.parse!
|
15
28
|
|
16
|
-
main = Pushwagner::Main.new(
|
29
|
+
main = Pushwagner::Main.new(options.to_h)
|
17
30
|
|
18
31
|
puts (
|
19
32
|
%q{
|
@@ -27,10 +40,9 @@ puts (
|
|
27
40
|
puts
|
28
41
|
|
29
42
|
|
30
|
-
|
31
|
-
case ARGV[0]
|
43
|
+
case options.command
|
32
44
|
when "deploy"
|
33
45
|
main.deploy
|
34
46
|
else
|
35
|
-
Pushwagner.warning "Usage: pw <
|
47
|
+
Pushwagner.warning "Usage: pw <command> [options]"
|
36
48
|
end
|
data/lib/pushwagner/main.rb
CHANGED
@@ -2,7 +2,12 @@ module Pushwagner
|
|
2
2
|
|
3
3
|
class Main
|
4
4
|
def initialize(opts = {})
|
5
|
-
|
5
|
+
begin
|
6
|
+
@environment = Pushwagner::Environment.new(opts)
|
7
|
+
rescue => e
|
8
|
+
Pushwagner.severe e.message
|
9
|
+
raise e
|
10
|
+
end
|
6
11
|
end
|
7
12
|
|
8
13
|
def set_environment(env)
|
data/lib/pushwagner/version.rb
CHANGED
data/spec/environment_spec.rb
CHANGED
@@ -4,7 +4,7 @@ require 'pushwagner/environment'
|
|
4
4
|
describe Pushwagner::Environment do
|
5
5
|
describe "#initialize" do
|
6
6
|
it "requires config_file" do
|
7
|
-
expect { Pushwagner::Environment.new('config_file' => File.join(config_root, 'nonexisting.yml'))}.to raise_error
|
7
|
+
expect { Pushwagner::Environment.new('config_file' => File.join(config_root, 'nonexisting.yml'))}.to raise_error(RuntimeError, /Couldn't find config file in locations: (.*)/)
|
8
8
|
end
|
9
9
|
|
10
10
|
it "supports config_file" do
|
@@ -30,14 +30,14 @@ describe Pushwagner::Environment do
|
|
30
30
|
|
31
31
|
it "returns empty hash when not configured" do
|
32
32
|
env = Pushwagner::Environment.new(:config_file => File.join(config_root, 'static.yml'), :version => "1foo" )
|
33
|
-
expect(env.maven?).to
|
33
|
+
expect(env.maven?).to be false
|
34
34
|
expect(env.maven).to eq({})
|
35
35
|
end
|
36
36
|
end
|
37
37
|
describe "static files" do
|
38
38
|
it "returns empty hash when not configured" do
|
39
39
|
env = Pushwagner::Environment.new(:config_file => File.join(config_root, 'maven.yml'), :version => "1foo" )
|
40
|
-
expect(env.static?).to
|
40
|
+
expect(env.static?).to be false
|
41
41
|
expect(env.static).to eq({})
|
42
42
|
end
|
43
43
|
it "parses to a hash of files" do
|
data/spec/hooks_spec.rb
CHANGED
@@ -8,7 +8,7 @@ describe Pushwagner::Hooks do
|
|
8
8
|
|
9
9
|
describe "#initialize" do
|
10
10
|
it "raises error if invalid environment" do
|
11
|
-
expect { Pushwagner::Hooks.new(nil) }.to raise_exception
|
11
|
+
expect { Pushwagner::Hooks.new(nil) }.to raise_exception(StandardError, /Invalid environment/)
|
12
12
|
end
|
13
13
|
|
14
14
|
it "returns an empty config with an empty environment" do
|
@@ -30,14 +30,16 @@ describe Pushwagner::Hooks do
|
|
30
30
|
describe "#run" do
|
31
31
|
it "requires an argument" do
|
32
32
|
sut = Pushwagner::Hooks.new(env)
|
33
|
-
expect { sut.run() }.to raise_exception
|
33
|
+
expect { sut.run() }.to raise_exception(ArgumentError, /wrong number of arguments/)
|
34
34
|
end
|
35
35
|
|
36
36
|
it "accepts run :after target" do
|
37
37
|
sut = Pushwagner::Hooks.new(env)
|
38
38
|
|
39
|
-
sut.stub_chain("local.run").with(:after).once
|
40
|
-
sut.stub_chain("remote.run").with(:after).once
|
39
|
+
#sut.stub_chain("local.run").with(:after).once
|
40
|
+
#sut.stub_chain("remote.run").with(:after).once
|
41
|
+
expect(sut.local).to receive(:run).with(:after).once
|
42
|
+
expect(sut.remote).to receive(:run).with(:after).once
|
41
43
|
|
42
44
|
sut.run(:after)
|
43
45
|
end
|
@@ -45,8 +47,10 @@ describe Pushwagner::Hooks do
|
|
45
47
|
it "accepts run :before target" do
|
46
48
|
sut = Pushwagner::Hooks.new(env)
|
47
49
|
|
48
|
-
sut.stub_chain("local.run").with(:before).once
|
49
|
-
sut.
|
50
|
+
#sut.stub_chain("local.run").with(:before).once
|
51
|
+
expect(sut.local).to receive(:run).with(:before).once
|
52
|
+
expect(sut.remote).to receive(:run).with(:before).once
|
53
|
+
#sut.stub_chain("remote.run").with(:before).once
|
50
54
|
|
51
55
|
sut.run(:before)
|
52
56
|
end
|
@@ -69,27 +73,19 @@ describe Pushwagner::Hooks::Local do
|
|
69
73
|
it "requires an argument" do
|
70
74
|
sut = Pushwagner::Hooks::Local.new(env, env.hooks['local'])
|
71
75
|
|
72
|
-
expect { sut.run() }.to raise_exception
|
76
|
+
expect { sut.run() }.to raise_exception(ArgumentError, /wrong number of arguments/)
|
73
77
|
end
|
74
78
|
it "supports :before hooks" do
|
75
79
|
sut = Pushwagner::Hooks::Local.new(env, env.hooks['local'])
|
76
80
|
|
77
|
-
|
78
|
-
Pushwagner.stub(:begin_info)
|
79
|
-
Pushwagner.stub(:ok)
|
80
|
-
|
81
|
-
sut.should_receive(:system).with('echo "one"').once
|
81
|
+
expect(sut).to receive(:system).with('echo "one"').once
|
82
82
|
sut.run(:before)
|
83
83
|
end
|
84
84
|
it "supports :after hooks" do
|
85
85
|
sut = Pushwagner::Hooks::Local.new(env, env.hooks['local'])
|
86
86
|
|
87
|
-
|
88
|
-
|
89
|
-
Pushwagner.stub(:ok)
|
90
|
-
|
91
|
-
sut.should_receive(:system).with('echo "two"').once
|
92
|
-
sut.should_receive(:system).with('echo "three"').once
|
87
|
+
expect(sut).to receive(:system).with('echo "two"').once
|
88
|
+
expect(sut).to receive(:system).with('echo "three"').once
|
93
89
|
sut.run(:after)
|
94
90
|
end
|
95
91
|
end
|
@@ -111,21 +107,19 @@ describe Pushwagner::Hooks::Remote do
|
|
111
107
|
it "requires an argument" do
|
112
108
|
sut = Pushwagner::Hooks::Remote.new(env, env.hooks['remote'])
|
113
109
|
|
114
|
-
expect { sut.run() }.to raise_exception
|
110
|
+
expect { sut.run() }.to raise_exception(ArgumentError, /wrong number of arguments/)
|
115
111
|
end
|
116
112
|
|
117
113
|
it "supports :before hooks" do
|
118
114
|
sut = Pushwagner::Hooks::Remote.new(env, env.hooks['remote'])
|
119
115
|
|
120
|
-
Pushwagner.stub(:info)
|
121
|
-
Pushwagner.stub(:begin_info)
|
122
|
-
Pushwagner.stub(:ok)
|
123
|
-
|
124
116
|
# Mock Net::SSH inner interaction smoke test
|
125
|
-
ssh =
|
126
|
-
|
127
|
-
ssh.
|
128
|
-
|
117
|
+
ssh = double()
|
118
|
+
|
119
|
+
expect(ssh).to receive(:open_channel).exactly(4).times
|
120
|
+
expect(ssh).to receive(:loop).exactly(4).times
|
121
|
+
|
122
|
+
expect(Net::SSH).to receive(:start).and_yield(ssh).exactly(4).times
|
129
123
|
|
130
124
|
sut.run(:before)
|
131
125
|
end
|
@@ -134,9 +128,9 @@ describe Pushwagner::Hooks::Remote do
|
|
134
128
|
sut = Pushwagner::Hooks::Remote.new(env, env.hooks['remote'])
|
135
129
|
|
136
130
|
# Mock Net::SSH inner interaction smoke
|
137
|
-
ssh =
|
138
|
-
ssh.
|
139
|
-
Net::SSH.
|
131
|
+
ssh = double()
|
132
|
+
expect(ssh).to receive(:open_channel).never
|
133
|
+
expect(Net::SSH).to receive(:start).and_yield(ssh).never
|
140
134
|
|
141
135
|
sut.run(:after)
|
142
136
|
end
|
data/spec/maven_spec.rb
CHANGED
@@ -43,15 +43,15 @@ describe Pushwagner::Maven do
|
|
43
43
|
describe "repositories" do
|
44
44
|
it "requires repositories configuration element" do
|
45
45
|
cfg.delete('repositories')
|
46
|
-
expect {Pushwagner::Maven.new(cfg, "1")}.to raise_error(StandardError)
|
46
|
+
expect {Pushwagner::Maven.new(cfg, "1")}.to raise_error(StandardError, /repositories configuration required/)
|
47
47
|
end
|
48
48
|
it "requires 'snapshots' repository" do
|
49
49
|
cfg['repositories'].delete('snapshots')
|
50
|
-
expect {Pushwagner::Maven.new(cfg, "1")}.to raise_error(StandardError)
|
50
|
+
expect {Pushwagner::Maven.new(cfg, "1")}.to raise_error(StandardError, /snapshots repository required/)
|
51
51
|
end
|
52
52
|
it "requires 'releases' repository" do
|
53
53
|
cfg['repositories'].delete('releases')
|
54
|
-
expect {Pushwagner::Maven.new(cfg, "1")}.to raise_error(StandardError)
|
54
|
+
expect {Pushwagner::Maven.new(cfg, "1")}.to raise_error(StandardError, /releases repository required/)
|
55
55
|
end
|
56
56
|
it "parses repositories" do
|
57
57
|
m = Pushwagner::Maven.new(cfg, "1")
|
@@ -66,7 +66,7 @@ describe Pushwagner::Maven do
|
|
66
66
|
|
67
67
|
it "reads releases authentication from maven settings.xml" do
|
68
68
|
m = Pushwagner::Maven.new(cfg, "1")
|
69
|
-
m.repository.
|
69
|
+
expect(m.repository).to receive(:open).
|
70
70
|
with(/.*settings.xml$/).
|
71
71
|
and_return(settings)
|
72
72
|
|
@@ -75,7 +75,7 @@ describe Pushwagner::Maven do
|
|
75
75
|
|
76
76
|
it "reads snapshots authentication from maven settings.xml" do
|
77
77
|
m = Pushwagner::Maven.new(cfg, "1")
|
78
|
-
m.repository.
|
78
|
+
expect(m.repository).to receive(:open).
|
79
79
|
with(/.*settings.xml$/).
|
80
80
|
and_return(settings)
|
81
81
|
|
@@ -88,8 +88,8 @@ describe Pushwagner::Maven do
|
|
88
88
|
it "builds maven2-repo-style urls and retrieves metadata" do
|
89
89
|
m = Pushwagner::Maven.new(cfg, "1")
|
90
90
|
|
91
|
-
m.repository.
|
92
|
-
m.repository.
|
91
|
+
expect(m.repository).to receive(:authentication).and_return("")
|
92
|
+
expect(m.repository).to receive(:open).and_return(metadata)
|
93
93
|
|
94
94
|
snapshot = Pushwagner::Maven::Artifact.new("foo", "bar", "1.0-SNAPSHOT")
|
95
95
|
expect(m.repository.absolute_url(snapshot)).to eq("http://w00t.uppercase.no/nexus/content/repositories/snapshots/bar/foo/1.0-SNAPSHOT/foo-1.0-20121114.152717-3.jar")
|
data/spec/spec_helper.rb
CHANGED
@@ -11,6 +11,10 @@ RSpec.configure do |config|
|
|
11
11
|
end
|
12
12
|
|
13
13
|
config.expect_with(:rspec) { |c| c.syntax = :expect }
|
14
|
+
#config.mock_with :rspec do |mocks|
|
15
|
+
# mocks.syntax = :should
|
16
|
+
# mocks.yield_receiver_to_any_instance_implementation_blocks = false
|
17
|
+
#end
|
14
18
|
|
15
19
|
def config_root
|
16
20
|
File.join(File.dirname(__FILE__), 'configs')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pushwagner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.2.
|
4
|
+
version: 0.0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ole Christian Rynning
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-07-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-ssh
|