jenkins_pipeline_builder 0.14.0 → 0.15.0
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.
- checksums.yaml +8 -8
- data/.simplecov +2 -2
- data/circle.yml +8 -0
- data/lib/jenkins_pipeline_builder/cli/helper.rb +45 -16
- data/lib/jenkins_pipeline_builder/version.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/cli/helper_spec.rb +83 -3
- data/spec/lib/jenkins_pipeline_builder/fixtures/sample_creds.rb +6 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjAwOGQ5NDM1MmMyYTkzNjExNzViMWYyMzRlMzFiYTYwMTc0ZTU3MA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MzlmOGIxNmRhYWFiYjYyMDUxNmIzNzZjOGFhZTIxNmUxNmE2NjhmMA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzMwNWQzZjliNGFkZTY5ZjY5NzgzMzY1MTdmZThjZjI5MjhkNDAwNzVhNzE3
|
10
|
+
YTI2ZGY5ZWVhNWRhMDliOWVmNGE1NGIwNDdhYjEwNTdiNjM5MGVmYzExOTY5
|
11
|
+
YmU1NmJmZGYxZjlhMTJmZWRlNTU2OWY0ZGQ1MWVjOWY5YjI1OTE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZGMwNjliZDJiNWQ4YWJlZTlmOWQxZjVlMTQxNjQwOTgwYjc5YTUyMDA2NWU1
|
14
|
+
NDdlZDgzMjg5YmJhY2U1NTY2NWM3YWI1NzhhZmU5OGQ1Y2M3ZTBjOTQ1NjU0
|
15
|
+
MmY5N2E5Zjc5NzNjMTExYmIwYjNkOWM4NDcwZGIzOTU2NGFlNjE=
|
data/.simplecov
CHANGED
@@ -3,10 +3,10 @@ SimpleCov.profiles.define 'spec' do
|
|
3
3
|
add_group 'jenkins_pipeline_builder', '/lib/'
|
4
4
|
add_filter 'spec'
|
5
5
|
coverage_dir 'out/coverage'
|
6
|
-
formatter SimpleCov::Formatter::MultiFormatter[
|
6
|
+
formatter SimpleCov::Formatter::MultiFormatter.new([
|
7
7
|
SimpleCov::Formatter::Console,
|
8
8
|
SimpleCov::Formatter::RcovFormatter,
|
9
|
-
]
|
9
|
+
])
|
10
10
|
end
|
11
11
|
|
12
12
|
class SimpleCov::Formatter::Console
|
data/circle.yml
ADDED
@@ -34,6 +34,12 @@ module JenkinsPipelineBuilder
|
|
34
34
|
# This is the helper class that sets up the credentials from the command
|
35
35
|
# line parameters given and initializes the Jenkins Pipeline Builder.
|
36
36
|
class Helper
|
37
|
+
class << self
|
38
|
+
attr_accessor :jenkins_api_creds
|
39
|
+
end
|
40
|
+
|
41
|
+
DEFAULT_FILE_FORMATS = %w(rb json yaml).freeze
|
42
|
+
|
37
43
|
# Sets up the credentials and initializes the Jenkins Pipeline Builder
|
38
44
|
#
|
39
45
|
# @param [Hash] options Options obtained from the command line
|
@@ -41,23 +47,24 @@ module JenkinsPipelineBuilder
|
|
41
47
|
# @return [JenkinsPipelineBuilder::Generator] A new Client object
|
42
48
|
#
|
43
49
|
def self.setup(options)
|
44
|
-
|
50
|
+
process_creds options
|
45
51
|
|
46
|
-
JenkinsPipelineBuilder.credentials =
|
52
|
+
JenkinsPipelineBuilder.credentials = jenkins_api_creds
|
47
53
|
generator = JenkinsPipelineBuilder.generator
|
48
54
|
JenkinsPipelineBuilder.debug! if options[:debug]
|
49
55
|
generator
|
50
56
|
end
|
51
57
|
|
52
58
|
def self.process_creds(options)
|
53
|
-
|
59
|
+
default_file = find_default_file
|
60
|
+
if options[:debug]
|
61
|
+
self.jenkins_api_creds = { username: :foo, password: :bar, server_ip: :baz }
|
62
|
+
elsif valid_cli_creds? options
|
54
63
|
process_cli_creds(options)
|
55
64
|
elsif options[:creds_file]
|
56
65
|
process_creds_file options[:creds_file]
|
57
|
-
elsif
|
58
|
-
|
59
|
-
elsif options[:debug]
|
60
|
-
{ username: :foo, password: :bar, server_ip: :baz }
|
66
|
+
elsif default_file
|
67
|
+
process_creds_file default_file
|
61
68
|
else
|
62
69
|
msg = 'Credentials are not set. Please pass them as parameters or'
|
63
70
|
msg << ' set them in the default credentials file'
|
@@ -71,23 +78,45 @@ module JenkinsPipelineBuilder
|
|
71
78
|
end
|
72
79
|
|
73
80
|
def self.process_creds_file(file)
|
74
|
-
return
|
75
|
-
|
81
|
+
return load File.expand_path(file) if file.end_with? 'rb'
|
82
|
+
return self.jenkins_api_creds = JSON.parse(IO.read(File.expand_path(file))) if file.end_with? 'json'
|
83
|
+
self.jenkins_api_creds = YAML.load_file(File.expand_path(file))
|
76
84
|
end
|
77
85
|
|
78
86
|
def self.process_cli_creds(options)
|
79
|
-
|
80
|
-
if
|
81
|
-
|
82
|
-
elsif
|
83
|
-
|
87
|
+
self.jenkins_api_creds = {}.with_indifferent_access.merge options
|
88
|
+
if jenkins_api_creds[:server] =~ Resolv::AddressRegex
|
89
|
+
jenkins_api_creds[:server_ip] = jenkins_api_creds.delete :server
|
90
|
+
elsif jenkins_api_creds[:server] =~ URI.regexp
|
91
|
+
jenkins_api_creds[:server_url] = jenkins_api_creds.delete :server
|
84
92
|
else
|
85
|
-
msg = "server given (#{
|
93
|
+
msg = "server given (#{jenkins_api_creds[:server]}) is neither a URL nor an IP."
|
86
94
|
msg << ' Please pass either a valid IP address or valid URI'
|
87
95
|
$stderr.puts msg
|
88
96
|
exit 1
|
89
97
|
end
|
90
|
-
|
98
|
+
end
|
99
|
+
|
100
|
+
private_class_method
|
101
|
+
|
102
|
+
def self.find_default_file
|
103
|
+
default_file_name = "#{ENV['HOME']}/.jenkins_api_client/login"
|
104
|
+
|
105
|
+
found_suffix = nil
|
106
|
+
DEFAULT_FILE_FORMATS.each do |suffix|
|
107
|
+
next unless File.exist?("#{default_file_name}.#{suffix}")
|
108
|
+
if !found_suffix
|
109
|
+
found_suffix = suffix
|
110
|
+
else
|
111
|
+
logger.warn "Multiple default files found! Using '#{default_file_name}.#{found_suffix}' but \
|
112
|
+
'#{default_file_name}.#{suffix}' found."
|
113
|
+
end
|
114
|
+
end
|
115
|
+
"#{ENV['HOME']}/.jenkins_api_client/login.#{found_suffix}" if found_suffix
|
116
|
+
end
|
117
|
+
|
118
|
+
def self.logger
|
119
|
+
JenkinsPipelineBuilder.logger
|
91
120
|
end
|
92
121
|
end
|
93
122
|
end
|
@@ -2,6 +2,8 @@ require File.expand_path('../../spec_helper', __FILE__)
|
|
2
2
|
|
3
3
|
describe JenkinsPipelineBuilder::CLI::Helper do
|
4
4
|
context '#setup' do
|
5
|
+
let(:creds_file_base) { 'spec/lib/jenkins_pipeline_builder/fixtures/sample_creds' }
|
6
|
+
|
5
7
|
context 'username and password given' do
|
6
8
|
let(:options) do
|
7
9
|
{
|
@@ -46,8 +48,6 @@ describe JenkinsPipelineBuilder::CLI::Helper do
|
|
46
48
|
end
|
47
49
|
|
48
50
|
context 'credential file given' do
|
49
|
-
let(:creds_file_base) { 'spec/lib/jenkins_pipeline_builder/fixtures/sample_creds' }
|
50
|
-
|
51
51
|
let(:expected_options) do
|
52
52
|
{
|
53
53
|
'username' => 'username',
|
@@ -61,6 +61,7 @@ describe JenkinsPipelineBuilder::CLI::Helper do
|
|
61
61
|
options = {
|
62
62
|
creds_file: "#{creds_file_base}.yaml"
|
63
63
|
}
|
64
|
+
expect(YAML).to receive(:load_file).and_call_original
|
64
65
|
expect(JenkinsPipelineBuilder).to receive(:credentials=).with(expected_options)
|
65
66
|
described_class.setup(options)
|
66
67
|
end
|
@@ -69,6 +70,16 @@ describe JenkinsPipelineBuilder::CLI::Helper do
|
|
69
70
|
options = {
|
70
71
|
creds_file: "#{creds_file_base}.json"
|
71
72
|
}
|
73
|
+
expect(JSON).to receive(:parse).and_call_original
|
74
|
+
expect(JenkinsPipelineBuilder).to receive(:credentials=).with(expected_options)
|
75
|
+
described_class.setup(options)
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should handle credentials passed as a ruby file' do
|
79
|
+
options = {
|
80
|
+
creds_file: "#{creds_file_base}.rb"
|
81
|
+
}
|
82
|
+
expect(File).to receive(:expand_path).with(options[:creds_file]).and_call_original
|
72
83
|
expect(JenkinsPipelineBuilder).to receive(:credentials=).with(expected_options)
|
73
84
|
described_class.setup(options)
|
74
85
|
end
|
@@ -86,10 +97,79 @@ describe JenkinsPipelineBuilder::CLI::Helper do
|
|
86
97
|
end
|
87
98
|
|
88
99
|
it 'should puts and error to stdout and exit if no credentials are passed' do
|
89
|
-
|
100
|
+
allow(File).to receive(:exist?).and_return(false)
|
90
101
|
expect($stderr).to receive(:puts).with(/Credentials are not set/)
|
91
102
|
expect { described_class.setup({}) }.to raise_error(SystemExit, 'exit')
|
92
103
|
end
|
93
104
|
end
|
105
|
+
|
106
|
+
context 'default credential files' do
|
107
|
+
let(:default_creds_base) { '/foo/.jenkins_api_client/login' }
|
108
|
+
|
109
|
+
before(:each) do
|
110
|
+
allow(ENV).to receive(:[]).with('HOME').and_return '/foo'
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'checks for all 3 supported formats in order' do
|
114
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.rb")
|
115
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.json")
|
116
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.yaml")
|
117
|
+
expect { described_class.setup({}) }.to raise_error(SystemExit, 'exit')
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'loads the default ruby file' do
|
121
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.rb").and_return true
|
122
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.json").and_return false
|
123
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.yaml").and_return false
|
124
|
+
expect(File).to receive(:expand_path).with("#{default_creds_base}.rb").and_return "#{creds_file_base}.rb"
|
125
|
+
described_class.setup({})
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'loads the default json file' do
|
129
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.rb").and_return false
|
130
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.json").and_return true
|
131
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.yaml").and_return false
|
132
|
+
expect(File).to receive(:expand_path).with("#{default_creds_base}.json").and_return "#{creds_file_base}.json"
|
133
|
+
expect(JSON).to receive(:parse).and_call_original
|
134
|
+
described_class.setup({})
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'loads the default yaml file' do
|
138
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.rb").and_return false
|
139
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.json").and_return false
|
140
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.yaml").and_return true
|
141
|
+
expect(File).to receive(:expand_path).with("#{default_creds_base}.yaml").and_return "#{creds_file_base}.yaml"
|
142
|
+
expect(YAML).to receive(:load_file).and_call_original
|
143
|
+
described_class.setup({})
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'warns if both ruby and yaml' do
|
147
|
+
used_suffix = 'rb'
|
148
|
+
found_suffix = 'yaml'
|
149
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.rb").and_return true
|
150
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.json").and_return false
|
151
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.yaml").and_return true
|
152
|
+
expect(JenkinsPipelineBuilder.logger).to receive(:warn)
|
153
|
+
.with(/'#{default_creds_base}\.#{used_suffix}' but '#{default_creds_base}\.#{found_suffix}' found\./)
|
154
|
+
.and_return true
|
155
|
+
expect(File).to receive(:expand_path)
|
156
|
+
.with("#{default_creds_base}.#{used_suffix}").and_return "#{creds_file_base}.#{used_suffix}"
|
157
|
+
described_class.setup({})
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'warns if both ruby and json' do
|
161
|
+
used_suffix = 'rb'
|
162
|
+
found_suffix = 'json'
|
163
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.rb").and_return true
|
164
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.json").and_return true
|
165
|
+
expect(File).to receive(:exist?).with("#{default_creds_base}.yaml").and_return false
|
166
|
+
expect(JenkinsPipelineBuilder.logger).to receive(:warn)
|
167
|
+
.with(/'#{default_creds_base}\.#{used_suffix}' but '#{default_creds_base}\.#{found_suffix}' found\./)
|
168
|
+
.and_return true
|
169
|
+
expect(File).to receive(:expand_path)
|
170
|
+
.with("#{default_creds_base}.#{used_suffix}").and_return "#{creds_file_base}.#{used_suffix}"
|
171
|
+
described_class.setup({})
|
172
|
+
end
|
173
|
+
end
|
94
174
|
end
|
95
175
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jenkins_pipeline_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Moochnick
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-04-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -331,6 +331,7 @@ files:
|
|
331
331
|
- README.md
|
332
332
|
- Rakefile
|
333
333
|
- bin/generate
|
334
|
+
- circle.yml
|
334
335
|
- commit_build.sh
|
335
336
|
- config/login.yml
|
336
337
|
- example/pipeline/.ruby-version
|
@@ -426,6 +427,7 @@ files:
|
|
426
427
|
- spec/lib/jenkins_pipeline_builder/fixtures/job_collection/extensions/extension.rb
|
427
428
|
- spec/lib/jenkins_pipeline_builder/fixtures/job_collection/extensions/helpers/my_test_thing_helper.rb
|
428
429
|
- spec/lib/jenkins_pipeline_builder/fixtures/sample_creds.json
|
430
|
+
- spec/lib/jenkins_pipeline_builder/fixtures/sample_creds.rb
|
429
431
|
- spec/lib/jenkins_pipeline_builder/fixtures/sample_creds.yaml
|
430
432
|
- spec/lib/jenkins_pipeline_builder/fixtures/view_test/duplicate_view.yaml
|
431
433
|
- spec/lib/jenkins_pipeline_builder/fixtures/view_test/parent_view.yaml
|
@@ -512,6 +514,7 @@ test_files:
|
|
512
514
|
- spec/lib/jenkins_pipeline_builder/fixtures/job_collection/extensions/extension.rb
|
513
515
|
- spec/lib/jenkins_pipeline_builder/fixtures/job_collection/extensions/helpers/my_test_thing_helper.rb
|
514
516
|
- spec/lib/jenkins_pipeline_builder/fixtures/sample_creds.json
|
517
|
+
- spec/lib/jenkins_pipeline_builder/fixtures/sample_creds.rb
|
515
518
|
- spec/lib/jenkins_pipeline_builder/fixtures/sample_creds.yaml
|
516
519
|
- spec/lib/jenkins_pipeline_builder/fixtures/view_test/duplicate_view.yaml
|
517
520
|
- spec/lib/jenkins_pipeline_builder/fixtures/view_test/parent_view.yaml
|