puppet-blacksmith 3.3.1 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/puppet_blacksmith/forge.rb +67 -20
- data/lib/puppet_blacksmith/modulefile.rb +1 -1
- data/lib/puppet_blacksmith/rake_tasks.rb +43 -1
- data/lib/puppet_blacksmith/version.rb +1 -1
- data/lib/puppet_blacksmith/version_helper.rb +9 -0
- data/spec/puppet_blacksmith/forge_spec.rb +53 -7
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 067263620b3ecaa64fcd67b770345766d46f2728
|
4
|
+
data.tar.gz: 87c4bc41babc57dd308dca7307af27ce25e994dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7a3db4d6999ab0ea7ee416b9fbc8b6f93c40e95bb8bf904fa91766b7a45f8abf87a1a2f7aba226a5710705c50026ef8181330a31f6113e95ba440dcc352d137
|
7
|
+
data.tar.gz: f3514d2f03b03b182aaa6c826e5e01ab5b525456761d13d2fb08f97608bda1754b1f74af99917dc9a4b77615aaf18df88e6a0145342cd9400d9257257df1bfd1
|
@@ -6,16 +6,18 @@ module Blacksmith
|
|
6
6
|
class Forge
|
7
7
|
|
8
8
|
PUPPETLABS_FORGE = "https://forgeapi.puppetlabs.com"
|
9
|
+
CREDENTIALS_FILE_HOME = "~/.puppetforge.yml"
|
10
|
+
CREDENTIALS_FILE_PROJECT = '.puppetforge.yml'
|
11
|
+
DEFAULT_CREDENTIALS = { 'url' => PUPPETLABS_FORGE }
|
9
12
|
HEADERS = { 'User-Agent' => "Blacksmith/#{Blacksmith::VERSION} Ruby/#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE}; #{RUBY_PLATFORM})" }
|
10
13
|
|
11
|
-
attr_accessor :username, :password, :client_id, :client_secret
|
12
|
-
attr_writer :url
|
14
|
+
attr_accessor :username, :password, :url, :client_id, :client_secret
|
13
15
|
|
14
16
|
def initialize(username = nil, password = nil, url = nil)
|
15
17
|
self.username = username
|
16
18
|
self.password = password
|
17
19
|
RestClient.proxy = ENV['http_proxy']
|
18
|
-
|
20
|
+
load_credentials
|
19
21
|
load_client_credentials_from_file
|
20
22
|
self.url = url unless url.nil?
|
21
23
|
if self.url =~ %r{http(s)?://forge.puppetlabs.com}
|
@@ -24,10 +26,6 @@ module Blacksmith
|
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
27
|
-
def url
|
28
|
-
@url || PUPPETLABS_FORGE
|
29
|
-
end
|
30
|
-
|
31
29
|
def push!(name, package = nil)
|
32
30
|
unless package
|
33
31
|
regex = /^#{username}-#{name}-.*\.tar\.gz$/
|
@@ -65,27 +63,76 @@ module Blacksmith
|
|
65
63
|
|
66
64
|
private
|
67
65
|
|
68
|
-
def
|
69
|
-
|
70
|
-
|
66
|
+
def load_credentials
|
67
|
+
file_credentials = load_credentials_from_file
|
68
|
+
env_credentials = load_credentials_from_env
|
69
|
+
|
70
|
+
credentials = DEFAULT_CREDENTIALS.merge file_credentials
|
71
|
+
credentials = credentials.merge env_credentials
|
72
|
+
|
73
|
+
self.username = credentials['username'] if credentials['username']
|
74
|
+
self.password = credentials['password'] if credentials['password']
|
75
|
+
if credentials['forge']
|
76
|
+
# deprecated
|
77
|
+
puts "'forge' entry is deprecated in .puppetforge.yml, use 'url'"
|
78
|
+
self.url = credentials['forge']
|
79
|
+
end
|
80
|
+
self.url = credentials['url'] if credentials['url']
|
81
|
+
|
82
|
+
unless self.username && self.password
|
71
83
|
raise Blacksmith::Error, <<-eos
|
72
|
-
Could not find Puppet Forge credentials
|
73
|
-
|
84
|
+
Could not find Puppet Forge credentials!
|
85
|
+
|
86
|
+
Please set the environment variables
|
87
|
+
BLACKSMITH_FORGE_URL
|
88
|
+
BLACKSMITH_FORGE_USERNAME
|
89
|
+
BLACKSMITH_FORGE_PASSWORD
|
90
|
+
|
91
|
+
or create the file '#{CREDENTIALS_FILE_PROJECT}' or '#{CREDENTIALS_FILE_HOME}'
|
92
|
+
with content similiar to:
|
93
|
+
|
74
94
|
---
|
75
95
|
url: https://forgeapi.puppetlabs.com
|
76
96
|
username: myuser
|
77
97
|
password: mypassword
|
98
|
+
|
78
99
|
eos
|
79
100
|
end
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
101
|
+
end
|
102
|
+
|
103
|
+
def load_credentials_from_file
|
104
|
+
credentials_file = [
|
105
|
+
File.join(Dir.pwd, CREDENTIALS_FILE_PROJECT),
|
106
|
+
File.expand_path(CREDENTIALS_FILE_HOME)
|
107
|
+
]
|
108
|
+
.select { |file| File.exists?(file) }
|
109
|
+
.first
|
110
|
+
|
111
|
+
if credentials_file
|
112
|
+
credentials = YAML.load_file(credentials_file)
|
113
|
+
else
|
114
|
+
credentials = Hash.new
|
87
115
|
end
|
88
|
-
|
116
|
+
|
117
|
+
return credentials
|
118
|
+
end
|
119
|
+
|
120
|
+
def load_credentials_from_env
|
121
|
+
credentials = Hash.new
|
122
|
+
|
123
|
+
if ENV['BLACKSMITH_FORGE_USERNAME']
|
124
|
+
credentials['username'] = ENV['BLACKSMITH_FORGE_USERNAME']
|
125
|
+
end
|
126
|
+
|
127
|
+
if ENV['BLACKSMITH_FORGE_PASSWORD']
|
128
|
+
credentials['password'] = ENV['BLACKSMITH_FORGE_PASSWORD']
|
129
|
+
end
|
130
|
+
|
131
|
+
if ENV['BLACKSMITH_FORGE_URL']
|
132
|
+
credentials['url'] = ENV['BLACKSMITH_FORGE_URL']
|
133
|
+
end
|
134
|
+
|
135
|
+
return credentials
|
89
136
|
end
|
90
137
|
|
91
138
|
def load_client_credentials_from_file
|
@@ -24,8 +24,18 @@ module Blacksmith
|
|
24
24
|
'bump:major',
|
25
25
|
'bump:minor',
|
26
26
|
'bump:patch',
|
27
|
+
'bump:full',
|
27
28
|
:tag,
|
29
|
+
:version,
|
30
|
+
'version:next',
|
31
|
+
'version:next:major',
|
32
|
+
'version:next:minor',
|
33
|
+
'version:next:patch',
|
28
34
|
:bump_commit,
|
35
|
+
'bump_commit:major',
|
36
|
+
'bump_commit:minor',
|
37
|
+
'bump_commit:patch',
|
38
|
+
'bump_commit:full',
|
29
39
|
:push,
|
30
40
|
:clean,
|
31
41
|
:release,
|
@@ -37,7 +47,7 @@ module Blacksmith
|
|
37
47
|
namespace :module do
|
38
48
|
|
39
49
|
namespace :bump do
|
40
|
-
[:major, :minor, :patch].each do |level|
|
50
|
+
[:major, :minor, :patch, :full].each do |level|
|
41
51
|
desc "Bump module version to the next #{level.upcase} version"
|
42
52
|
task level do
|
43
53
|
m = Blacksmith::Modulefile.new
|
@@ -62,6 +72,38 @@ module Blacksmith
|
|
62
72
|
git.tag!(m.version)
|
63
73
|
end
|
64
74
|
|
75
|
+
namespace :version do
|
76
|
+
desc "Get next module version"
|
77
|
+
task :next do
|
78
|
+
m = Blacksmith::Modulefile.new
|
79
|
+
puts m.increase_version(m.version, 'patch')
|
80
|
+
end
|
81
|
+
|
82
|
+
[:major, :minor, :patch].each do |level|
|
83
|
+
desc "Get the next #{level.upcase} version"
|
84
|
+
task "next:#{level}".to_sym do
|
85
|
+
m = Blacksmith::Modulefile.new
|
86
|
+
puts m.increase_version(m.version, level)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
desc "Get current module version"
|
92
|
+
task :version do
|
93
|
+
m = Blacksmith::Modulefile.new
|
94
|
+
puts m.version
|
95
|
+
end
|
96
|
+
|
97
|
+
namespace :bump_commit do
|
98
|
+
[:major, :minor, :patch, :full].each do |level|
|
99
|
+
desc "Bump module version to the next #{level.upcase} version and git commit"
|
100
|
+
task level => "bump:#{level}".to_sym do
|
101
|
+
m = Blacksmith::Modulefile.new
|
102
|
+
Blacksmith::Git.new.commit_modulefile!(m.version)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
65
107
|
desc "Bump version and git commit"
|
66
108
|
task :bump_commit => :bump do
|
67
109
|
m = Blacksmith::Modulefile.new
|
@@ -104,6 +104,15 @@ module Blacksmith
|
|
104
104
|
define_method("#{term}!") { increment!(term) }
|
105
105
|
end
|
106
106
|
|
107
|
+
def full!
|
108
|
+
env_var = "BLACKSMITH_FULL_VERSION"
|
109
|
+
begin
|
110
|
+
ENV.fetch env_var
|
111
|
+
rescue KeyError
|
112
|
+
raise Exception, "Setting the full version requires setting the #{env_var} environment variable to the new version"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
107
116
|
def increment!(term)
|
108
117
|
new_version = clone
|
109
118
|
new_value = send(term) + 1
|
@@ -6,21 +6,67 @@ require 'webmock/rspec'
|
|
6
6
|
describe 'Blacksmith::Forge' do
|
7
7
|
include_context 'forge'
|
8
8
|
|
9
|
-
describe '
|
9
|
+
describe 'resolving credentials' do
|
10
10
|
before do
|
11
|
-
allow(
|
11
|
+
allow(Dir).to receive(:pwd) { '/home/mr_puppet/puppet-some-module' }
|
12
|
+
allow(File).to receive(:expand_path).with('~/.puppetforge.yml') { '/home/mr_puppet/.puppetforge.yml' }
|
13
|
+
allow(File).to receive(:expand_path).with(/credentials.yml/) { '/home/mr_puppet/puppet-blacksmith/credentials.yml' }
|
14
|
+
allow(YAML).to receive(:load_file).with('/home/mr_puppet/puppet-blacksmith/credentials.yml') { {
|
15
|
+
"client_id" => "b93eb708fd942cfc7b4ed71db6ce219b814954619dbe537ddfd208584e8cff8d",
|
16
|
+
"client_secret" => "216648059ad4afec3e4d77bd9e67817c095b2dcf94cdec18ac3d00584f863180",
|
17
|
+
} }
|
12
18
|
end
|
13
19
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
20
|
+
it 'prefers env vars to file values' do
|
21
|
+
stubbed_forge_password = 'asdf1234'
|
22
|
+
|
23
|
+
allow(File).to receive(:exists?).
|
24
|
+
with('/home/mr_puppet/puppet-some-module/.puppetforge.yml').
|
25
|
+
and_return(false)
|
26
|
+
allow(File).to receive(:exists?).
|
27
|
+
with('/home/mr_puppet/.puppetforge.yml').
|
28
|
+
and_return(true)
|
29
|
+
allow(YAML).to receive(:load_file).
|
30
|
+
with('/home/mr_puppet/.puppetforge.yml').
|
31
|
+
and_return({'username' => username,
|
32
|
+
'password' => password})
|
33
|
+
allow(ENV).to receive(:[]).
|
34
|
+
with(any_args)
|
35
|
+
allow(ENV).to receive(:[]).
|
36
|
+
with('BLACKSMITH_FORGE_PASSWORD').
|
37
|
+
and_return(stubbed_forge_password)
|
38
|
+
|
39
|
+
forge = Blacksmith::Forge.new()
|
40
|
+
|
41
|
+
expect(forge.url).to eq(Blacksmith::Forge::PUPPETLABS_FORGE)
|
42
|
+
expect(forge.password).to eq(stubbed_forge_password)
|
43
|
+
expect(forge.username).to eq(username)
|
44
|
+
end
|
18
45
|
|
46
|
+
context 'when the credentials values are unset' do
|
19
47
|
it "should raise an error" do
|
20
|
-
expect { foo = Blacksmith::Forge.new(nil, password, forge) }.to raise_error(/Could not find Puppet Forge credentials
|
48
|
+
expect { foo = Blacksmith::Forge.new(nil, password, forge) }.to raise_error(/Could not find Puppet Forge credentials/)
|
21
49
|
end
|
22
50
|
end
|
23
51
|
|
52
|
+
it 'loads credentials from home dir' do
|
53
|
+
allow(File).to receive(:exists?).with('/home/mr_puppet/puppet-some-module/.puppetforge.yml') { false }
|
54
|
+
allow(File).to receive(:exists?).with('/home/mr_puppet/.puppetforge.yml') { true }
|
55
|
+
allow(YAML).to receive(:load_file).with('/home/mr_puppet/.puppetforge.yml') { {'username'=> 'puppet-user'} }
|
56
|
+
|
57
|
+
subject = Blacksmith::Forge.new(nil, password, forge)
|
58
|
+
expect(subject.username).to eq('puppet-user')
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'loads credentials from project dir' do
|
62
|
+
allow(File).to receive(:exists?).with('/home/mr_puppet/puppet-some-module/.puppetforge.yml') { true }
|
63
|
+
allow(File).to receive(:exists?).with('/home/mr_puppet/.puppetforge.yml') { true }
|
64
|
+
allow(YAML).to receive(:load_file).with('/home/mr_puppet/puppet-some-module/.puppetforge.yml') { {'username'=> 'puppet-other-user'} }
|
65
|
+
|
66
|
+
subject = Blacksmith::Forge.new(nil, password, forge)
|
67
|
+
expect(subject.username).to eq('puppet-other-user')
|
68
|
+
end
|
69
|
+
|
24
70
|
end
|
25
71
|
|
26
72
|
describe 'push' do
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-blacksmith
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MaestroDev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.8.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.8.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: puppet
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,16 +112,16 @@ dependencies:
|
|
112
112
|
name: webmock
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: 1.23.0
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - "
|
122
|
+
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
124
|
+
version: 1.23.0
|
125
125
|
description: Puppet module tools for development and Puppet Forge management
|
126
126
|
email:
|
127
127
|
- info@maestrodev.com
|
@@ -168,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
168
|
version: '0'
|
169
169
|
requirements: []
|
170
170
|
rubyforge_project:
|
171
|
-
rubygems_version: 2.4.
|
171
|
+
rubygems_version: 2.4.6
|
172
172
|
signing_key:
|
173
173
|
specification_version: 4
|
174
174
|
summary: Tasks to manage Puppet module builds
|