puppet-blacksmith 2.1.0 → 2.2.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/lib/puppet_blacksmith/modulefile.rb +26 -8
- data/lib/puppet_blacksmith/version.rb +1 -1
- data/spec/data/metadata.json +32 -0
- data/spec/puppet_blacksmith/forge_spec.rb +1 -1
- data/spec/puppet_blacksmith/git_spec.rb +53 -37
- data/spec/puppet_blacksmith/modulefile_spec.rb +68 -26
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NDliNmIwNmE5NWY3NDU3MWE0ZDhiYjQ3MDhjZjBjZWI3ZjVkNWYwOQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YTMzNGMzZjhjYjBlMjAxMjJjNWVmMGJlMGE4ZGMyNDMyZWVlMGM4Nw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZDY3OTg3MzMyYjVmNWQyNWUxNjVkZjU0Njc3NzI2OGU3YTQ3ZDA3NjQ2MWIz
|
10
|
+
NDFiOGNhZmI0YTg4MTY4YmMyNGJkYTEyZjc4MjYzM2U5OGZkNjBhYzdlZjE4
|
11
|
+
ZDYyMjFkN2UxODQ3MmY2NTM1MjM0MmE2YWE3MDc2MWIzZWMxMzI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZWIyYmIzZWVhZTUwY2MxYjcyNTgwZGM2NTVhMWE2YWYzMDgxM2VjYTQ2NzBl
|
14
|
+
ZjcxZjY3NDUxNDdhZWQ1Yjc5M2U4YWNlYmViNTMzYWNiODRhM2EzMjgzYzYx
|
15
|
+
NDIzZWMwMzY3ODQ1NjY2NjEwMDY4YWI5YTUyYTMxYWJhZDExYzg=
|
@@ -17,26 +17,38 @@ Puppet[:confdir] = "."
|
|
17
17
|
module Blacksmith
|
18
18
|
class Modulefile
|
19
19
|
|
20
|
+
FILES = ["metadata.json", "Modulefile"]
|
21
|
+
|
20
22
|
attr_reader :path
|
21
23
|
|
22
|
-
def initialize(path =
|
23
|
-
@path = path
|
24
|
+
def initialize(path = nil)
|
25
|
+
@path = path.nil? ? FILES.find {|f| File.exists? f} : path
|
26
|
+
raise Blacksmith::Error, "Unable to find any of #{FILES}" unless @path
|
27
|
+
@modulefile = @path =~ /Modulefile$/
|
24
28
|
end
|
25
29
|
|
26
30
|
def metadata
|
27
31
|
unless @metadata
|
28
|
-
|
29
|
-
|
30
|
-
|
32
|
+
if @modulefile
|
33
|
+
metadata = Puppet::ModuleTool::Metadata.new
|
34
|
+
Puppet::ModuleTool::ModulefileReader.evaluate(metadata, path)
|
35
|
+
@metadata = { 'name' => metadata.name, 'version' => metadata.version, 'author' => metadata.author }
|
36
|
+
else
|
37
|
+
@metadata = JSON.parse(File.read(path))
|
38
|
+
end
|
31
39
|
end
|
32
40
|
@metadata
|
33
41
|
end
|
34
42
|
|
43
|
+
# name in metadata.json is author-modulename
|
35
44
|
def name
|
36
|
-
metadata.
|
45
|
+
@modulefile ? metadata['name'] : metadata['name'].split('-',2)[1]
|
46
|
+
end
|
47
|
+
def author
|
48
|
+
metadata['author'] || metadata['name'].split('-',2)[0]
|
37
49
|
end
|
38
50
|
def version
|
39
|
-
metadata
|
51
|
+
metadata['version']
|
40
52
|
end
|
41
53
|
|
42
54
|
def bump!
|
@@ -48,7 +60,13 @@ module Blacksmith
|
|
48
60
|
end
|
49
61
|
|
50
62
|
def replace_version(text, version)
|
51
|
-
|
63
|
+
if @modulefile
|
64
|
+
text.gsub(/\nversion[ ]+['"].*['"]/, "\nversion '#{version}'")
|
65
|
+
else
|
66
|
+
json = JSON.parse(text)
|
67
|
+
json['version'] = version
|
68
|
+
JSON.pretty_generate(json)
|
69
|
+
end
|
52
70
|
end
|
53
71
|
|
54
72
|
def increase_version(version)
|
@@ -0,0 +1,32 @@
|
|
1
|
+
{
|
2
|
+
"operatingsystem_support": [
|
3
|
+
{
|
4
|
+
"operatingsystem": "CentOS",
|
5
|
+
"operatingsystemrelease": [
|
6
|
+
"4",
|
7
|
+
"5",
|
8
|
+
"6"
|
9
|
+
]
|
10
|
+
}
|
11
|
+
],
|
12
|
+
"requirements": [
|
13
|
+
{
|
14
|
+
"name": "pe",
|
15
|
+
"version_requirement": "3.2.x"
|
16
|
+
},
|
17
|
+
{
|
18
|
+
"name": "puppet",
|
19
|
+
"version_requirement": ">=2.7.20 <4.0.0"
|
20
|
+
}
|
21
|
+
],
|
22
|
+
"name": "maestrodev-test",
|
23
|
+
"version": "1.0.0",
|
24
|
+
"source": "git://github.com/puppetlabs/puppetlabs-stdlib",
|
25
|
+
"author": "maestrodev",
|
26
|
+
"license": "Apache 2.0",
|
27
|
+
"summary": "Puppet Module Standard Library",
|
28
|
+
"description": "Standard Library for Puppet Modules",
|
29
|
+
"project_page": "https://github.com/puppetlabs/puppetlabs-stdlib",
|
30
|
+
"dependencies": [
|
31
|
+
]
|
32
|
+
}
|
@@ -13,7 +13,7 @@ describe 'Blacksmith::Forge' do
|
|
13
13
|
|
14
14
|
describe 'missing credentials file' do
|
15
15
|
before do
|
16
|
-
File.
|
16
|
+
allow(File).to receive(:expand_path) { '/home/mr_puppet/.puppetforge.yml' }
|
17
17
|
end
|
18
18
|
|
19
19
|
context "when the credentials file is missing" do
|
@@ -10,56 +10,72 @@ describe 'Blacksmith::Git' do
|
|
10
10
|
FileUtils.rm_rf path
|
11
11
|
FileUtils.mkdir_p(path)
|
12
12
|
`git init #{path}`
|
13
|
-
FileUtils.touch(File.join(path, "Modulefile"))
|
14
|
-
`cd #{path} && git add Modulefile && git commit -am "Init"`
|
15
13
|
end
|
16
14
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
shared_examples_for :git do
|
16
|
+
describe 'tag!' do
|
17
|
+
before { subject.tag!(version) }
|
18
|
+
it "should have the tag" do
|
19
|
+
out = `cd #{path} && git tag`
|
20
|
+
expect(out.chomp).to match(/^v1.0.0$/)
|
21
|
+
end
|
22
22
|
end
|
23
|
-
end
|
24
23
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
24
|
+
describe 'exec_git' do
|
25
|
+
let(:cmd) { 'log' }
|
26
|
+
let(:stdin) { nil }
|
27
|
+
let(:stdout) { '' }
|
28
|
+
let(:stderr) { '' }
|
29
|
+
let(:exit_code) { double('exit_code', :success? => true) }
|
30
|
+
let(:wait_thr) { double('wait_thr', :value => exit_code) }
|
32
31
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
32
|
+
context 'when git succeeds' do
|
33
|
+
before do
|
34
|
+
allow(Open3).to receive(:popen3).and_yield(nil, double(:read => stdout), double(:read => stderr), wait_thr)
|
35
|
+
expect { subject.exec_git(cmd) }.to_not raise_error
|
36
|
+
end
|
38
37
|
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
context 'when stderr is empty' do
|
39
|
+
it {}
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'when stderr is not empty' do
|
43
|
+
let(:stderr) { 'some error' }
|
44
|
+
it {}
|
45
|
+
end
|
42
46
|
|
43
|
-
context 'when stderr is not empty' do
|
44
|
-
let(:stderr) { 'some error' }
|
45
|
-
it {}
|
46
47
|
end
|
47
48
|
|
48
|
-
|
49
|
+
context 'when git fails' do
|
50
|
+
before { allow(subject).to receive(:git_cmd_with_path) {cmd} }
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
+
# this spec fails on jruby, can't detect exit code of script
|
53
|
+
context 'when stderr is empty' do
|
54
|
+
let(:cmd) { "git" } # exits with 1
|
55
|
+
it { expect { subject.exec_git(cmd) }.to raise_error(Blacksmith::Error, /^Command .* failed with exit status.*1$/) }
|
56
|
+
end
|
52
57
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
58
|
+
context 'when stderr is not empty' do
|
59
|
+
let(:cmd) { "git help xxxx" } # exits with 1 and prints to stdout
|
60
|
+
it { expect { subject.exec_git(cmd) }.to raise_error(Blacksmith::Error, /No manual entry for gitxxx/) }
|
61
|
+
end
|
57
62
|
end
|
63
|
+
end
|
64
|
+
end
|
58
65
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
66
|
+
context "Using Modulefile" do
|
67
|
+
before do
|
68
|
+
FileUtils.touch(File.join(path, "Modulefile"))
|
69
|
+
`cd #{path} && git add Modulefile && git commit -am "Init"`
|
70
|
+
end
|
71
|
+
it_behaves_like :git
|
72
|
+
end
|
73
|
+
|
74
|
+
context "Using metadata.json" do
|
75
|
+
before do
|
76
|
+
FileUtils.touch(File.join(path, "metadata.json"))
|
77
|
+
`cd #{path} && git add metadata.json && git commit -am "Init"`
|
63
78
|
end
|
79
|
+
it_behaves_like :git
|
64
80
|
end
|
65
81
|
end
|
@@ -2,50 +2,92 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe 'Blacksmith::Modulefile' do
|
4
4
|
|
5
|
+
let(:path) { "spec/data/metadata.json" }
|
6
|
+
|
5
7
|
subject { Blacksmith::Modulefile.new(path) }
|
6
|
-
let(:path) { "spec/data/Modulefile" }
|
7
8
|
|
8
|
-
|
9
|
-
it { subject.
|
10
|
-
it { subject.
|
11
|
-
it { subject.metadata.name.should eql("test") }
|
9
|
+
shared_examples_for :metadata do
|
10
|
+
it { expect(subject.version).to eql("1.0.0") }
|
11
|
+
it { expect(subject.name).to eql("test") }
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
|
-
it "should replace the version" do
|
16
|
-
original = <<-eos
|
17
|
-
name 'maestrodev-test'
|
18
|
-
version '1.0.0'
|
14
|
+
context "using metadata.json" do
|
19
15
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
summary 'version "1"'
|
25
|
-
description "version '1'"
|
26
|
-
eos
|
16
|
+
it_behaves_like :metadata
|
17
|
+
|
18
|
+
describe 'replace_version' do
|
19
|
+
it "should replace the version in metadata" do
|
27
20
|
|
28
|
-
|
21
|
+
expected = <<-eos
|
22
|
+
{
|
23
|
+
"operatingsystem_support": [
|
24
|
+
{
|
25
|
+
"operatingsystem": "CentOS",
|
26
|
+
"operatingsystemrelease": [
|
27
|
+
"4",
|
28
|
+
"5",
|
29
|
+
"6"
|
30
|
+
]
|
31
|
+
}
|
32
|
+
],
|
33
|
+
"requirements": [
|
34
|
+
{
|
35
|
+
"name": "pe",
|
36
|
+
"version_requirement": "3.2.x"
|
37
|
+
},
|
38
|
+
{
|
39
|
+
"name": "puppet",
|
40
|
+
"version_requirement": ">=2.7.20 <4.0.0"
|
41
|
+
}
|
42
|
+
],
|
43
|
+
"name": "maestrodev-test",
|
44
|
+
"version": "1.0.1",
|
45
|
+
"source": "git://github.com/puppetlabs/puppetlabs-stdlib",
|
46
|
+
"author": "maestrodev",
|
47
|
+
"license": "Apache 2.0",
|
48
|
+
"summary": "Puppet Module Standard Library",
|
49
|
+
"description": "Standard Library for Puppet Modules",
|
50
|
+
"project_page": "https://github.com/puppetlabs/puppetlabs-stdlib",
|
51
|
+
"dependencies": [
|
52
|
+
]
|
53
|
+
}
|
54
|
+
eos
|
55
|
+
|
56
|
+
expect(JSON.parse(subject.replace_version(File.read(path), "1.0.1"))).to eql(JSON.parse(expected))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
context "using a Modulefile" do
|
63
|
+
|
64
|
+
let(:path) { "spec/data/Modulefile" }
|
65
|
+
|
66
|
+
it_behaves_like :metadata
|
67
|
+
|
68
|
+
describe 'replace_version' do
|
69
|
+
it "should replace the version in a Modulefile" do
|
70
|
+
expected = <<-eos
|
29
71
|
name 'maestrodev-test'
|
30
72
|
version '1.0.1'
|
31
73
|
|
32
|
-
author 'maestrodev'
|
33
74
|
license 'Apache License, Version 2.0'
|
34
75
|
project_page 'http://github.com/maestrodev/puppet-blacksmith'
|
35
76
|
source 'http://github.com/maestrodev/puppet-blacksmith'
|
36
|
-
summary '
|
37
|
-
description
|
77
|
+
summary 'Testing Puppet module operations'
|
78
|
+
description 'Testing Puppet module operations'
|
38
79
|
eos
|
39
80
|
|
40
|
-
|
81
|
+
expect(subject.replace_version(File.read(path), "1.0.1")).to eql(expected)
|
82
|
+
end
|
41
83
|
end
|
84
|
+
|
42
85
|
end
|
43
86
|
|
44
87
|
describe 'increase_version' do
|
45
|
-
it { subject.increase_version("1.0").
|
46
|
-
it { subject.increase_version("1.0.0").
|
47
|
-
it { subject.increase_version("1.0.1").
|
88
|
+
it { expect(subject.increase_version("1.0")).to eql("1.1") }
|
89
|
+
it { expect(subject.increase_version("1.0.0")).to eql("1.0.1") }
|
90
|
+
it { expect(subject.increase_version("1.0.1")).to eql("1.0.2") }
|
48
91
|
it { expect { subject.increase_version("1.0.12qwe") }.to raise_error }
|
49
92
|
end
|
50
|
-
|
51
93
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-blacksmith
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MaestroDev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - ! '>='
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: 3.0.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: 3.0.0
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: webmock
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -154,6 +154,7 @@ files:
|
|
154
154
|
- spec/data/Modulefile
|
155
155
|
- spec/data/forge_error.html
|
156
156
|
- spec/data/maestrodev-ant-1.0.4.tar.gz
|
157
|
+
- spec/data/metadata.json
|
157
158
|
- spec/puppet_blacksmith/forge_spec.rb
|
158
159
|
- spec/puppet_blacksmith/git_spec.rb
|
159
160
|
- spec/puppet_blacksmith/modulefile_spec.rb
|
@@ -182,10 +183,11 @@ signing_key:
|
|
182
183
|
specification_version: 4
|
183
184
|
summary: Tasks to manage Puppet module builds
|
184
185
|
test_files:
|
185
|
-
- spec/spec_helper.rb
|
186
186
|
- spec/data/maestrodev-ant-1.0.4.tar.gz
|
187
|
+
- spec/data/metadata.json
|
187
188
|
- spec/data/forge_error.html
|
188
189
|
- spec/data/Modulefile
|
189
190
|
- spec/puppet_blacksmith/forge_spec.rb
|
190
191
|
- spec/puppet_blacksmith/modulefile_spec.rb
|
191
192
|
- spec/puppet_blacksmith/git_spec.rb
|
193
|
+
- spec/spec_helper.rb
|