puppet-blacksmith 1.0.5 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ module Blacksmith
2
+ class Error < RuntimeError
3
+ end
4
+ end
@@ -0,0 +1,92 @@
1
+ require 'rest-client'
2
+ require 'nokogiri'
3
+
4
+ module Blacksmith
5
+ class Forge
6
+
7
+ PUPPETLABS_FORGE = "https://forge.puppetlabs.com"
8
+
9
+ attr_accessor :username, :password
10
+ attr_writer :url
11
+
12
+ def initialize(username = nil, password = nil, url = nil)
13
+ self.username = username
14
+ self.password = password
15
+ self.url = url
16
+ RestClient.proxy = ENV['http_proxy']
17
+ load_credentials_from_file if username.nil?
18
+ end
19
+
20
+ def url
21
+ @url || PUPPETLABS_FORGE
22
+ end
23
+
24
+ def push!(name, package = nil)
25
+ unless package
26
+ regex = /^#{username}-#{name}-.*\.tar\.gz$/
27
+ pkg = File.expand_path("pkg")
28
+ f = Dir.new(pkg).select{|f| f.match(regex)}.last
29
+ raise Errno::ENOENT, "File not found in #{pkg} with regex #{regex}" if f.nil?
30
+ package = File.join(pkg, f)
31
+ end
32
+ raise Errno::ENOENT, "File does not exist: #{package}" unless File.exists?(package)
33
+
34
+ # login to the puppet forge
35
+ response = RestClient.post(
36
+ "#{url}/login",
37
+ {'username' => username, 'password' => password}){
38
+ |response, request, result, &block|
39
+ if [301, 302, 307].include? response.code
40
+ response # no need to follow redirects
41
+ else
42
+ response.return!(request, result, &block)
43
+ end
44
+ }
45
+ raise Blacksmith::Error, "Failed to login to Puppet Forge: cookies not set correctly" unless response.cookies['auth']
46
+
47
+ page = Nokogiri::HTML(response.body)
48
+ errors = page.css('.failure')
49
+ raise Blacksmith::Error, "Error uploading module #{package} to Puppet Forge #{username}/#{name}:#{errors.text}" unless errors.empty?
50
+
51
+ # upload the file
52
+ response = RestClient.post("#{url}/#{username}/#{name}/upload",
53
+ {:tarball => File.new(package, 'rb')},
54
+ {:cookies => response.cookies}){
55
+ |response, request, result, &block|
56
+ if [301, 302, 307].include? response.code
57
+ response # no need to follow redirects
58
+ else
59
+ response.return!(request, result, &block)
60
+ end
61
+ }
62
+ page = Nokogiri::HTML(response.body)
63
+ errors = page.css('.errors')
64
+ raise Blacksmith::Error, "Error uploading module #{package} to Puppet Forge #{username}/#{name}:#{errors.text}" unless errors.empty?
65
+ end
66
+
67
+ private
68
+
69
+ def load_credentials_from_file
70
+ credentials_file = File.expand_path("~/.puppetforge.yml")
71
+ unless File.exists?(credentials_file)
72
+ raise Blacksmith::Error, <<-eos
73
+ Could not find Puppet Forge credentials file '#{credentials_file}'
74
+ Please create it
75
+ ---
76
+ forge: https://forge.puppetlabs.com
77
+ username: myuser
78
+ password: mypassword
79
+ eos
80
+ end
81
+ credentials = YAML.load_file(credentials_file)
82
+ self.username = credentials['username']
83
+ self.password = credentials['password']
84
+ if credentials['forge']
85
+ # deprecated
86
+ puts "'forge' entry is deprecated in .puppetforge.yml, use 'url'"
87
+ self.url = credentials['forge']
88
+ end
89
+ self.url = credentials['url'] if credentials['url']
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,43 @@
1
+ require 'open3'
2
+
3
+ module Blacksmith
4
+ class Git
5
+
6
+ attr_accessor :path
7
+
8
+ def initialize(path = ".")
9
+ @path = File.expand_path(path)
10
+ end
11
+
12
+ def tag!(version)
13
+ exec_git "tag v#{version}"
14
+ end
15
+
16
+ def commit_modulefile!
17
+ s = exec_git "add Modulefile"
18
+ s += exec_git "commit -m '[blacksmith] Bump version'"
19
+ s
20
+ end
21
+
22
+ def push!
23
+ s = exec_git "push"
24
+ s += exec_git "push --tags"
25
+ s
26
+ end
27
+
28
+ def exec_git(cmd)
29
+ out = ""
30
+ err = ""
31
+ # wait_thr is nil in JRuby < 1.7.5 see http://jira.codehaus.org/browse/JRUBY-6409
32
+ new_cmd = "git --git-dir=#{File.join(path, '.git')} --work-tree=#{path} #{cmd}"
33
+ Open3.popen3(new_cmd) do |stdin, stdout, stderr, wait_thr|
34
+ out = stdout.read
35
+ err = stderr.read
36
+ # exit_status = wait_thr.value
37
+ end
38
+ exit_status = $?
39
+ raise Blacksmith::Error, err unless exit_status.success?
40
+ return out
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,46 @@
1
+ require 'puppet'
2
+
3
+ module Blacksmith
4
+ class Modulefile
5
+
6
+ attr_reader :path
7
+
8
+ def initialize(path = "Modulefile")
9
+ @path = path
10
+ end
11
+
12
+ def metadata
13
+ unless @metadata
14
+ metadata = Puppet::ModuleTool::Metadata.new
15
+ Puppet::ModuleTool::ModulefileReader.evaluate(metadata, path)
16
+ @metadata = metadata
17
+ end
18
+ @metadata
19
+ end
20
+
21
+ def name
22
+ metadata.name
23
+ end
24
+ def version
25
+ metadata.version
26
+ end
27
+
28
+ def bump!
29
+ new_version = increase_version(version)
30
+ text = File.read(path)
31
+ text = replace_version(text, new_version)
32
+ File.open(path, "w") {|file| file.puts text}
33
+ new_version
34
+ end
35
+
36
+ def replace_version(text, version)
37
+ text.gsub(/\nversion[ ]+['"].*['"]/, "\nversion '#{version}'")
38
+ end
39
+
40
+ def increase_version(version)
41
+ v = Gem::Version.new("#{version}.0")
42
+ raise Blacksmith::Error, "Unable to increase prerelease version #{version}" if v.prerelease?
43
+ v.bump.to_s
44
+ end
45
+ end
46
+ end
@@ -1,28 +1,31 @@
1
1
  require 'rake'
2
- require 'rest-client'
3
- require 'puppet'
4
- require 'yaml'
5
- require 'nokogiri'
2
+ require_relative '../puppet_blacksmith'
6
3
 
7
4
  namespace :module do
8
5
  desc "Bump module version to the next minor"
9
6
  task :bump do
10
- bump
7
+ m = Blacksmith::Modulefile.new
8
+ v = m.bump!
9
+ puts "Bumping version from #{m.version} to #{v}"
11
10
  end
12
11
 
13
12
  desc "Git tag with the current module version"
14
13
  task :tag do
15
- tag
14
+ m = Blacksmith::Modulefile.new
15
+ Blacksmith::Git.new.tag!(m.version)
16
16
  end
17
17
 
18
18
  desc "Bump version and git commit"
19
19
  task :bump_commit => :bump do
20
- bump_commit
20
+ Blacksmith::Git.new.commit_modulefile!
21
21
  end
22
22
 
23
23
  desc "Push module to the Puppet Forge"
24
24
  task :push => :build do
25
- push
25
+ m = Blacksmith::Modulefile.new
26
+ forge = Blacksmith::Forge.new
27
+ puts "Uploading to Puppet Forge #{forge.username}/#{m.name}"
28
+ forge.push!(m.name)
26
29
  end
27
30
 
28
31
  desc "Runs clean again"
@@ -33,104 +36,8 @@ namespace :module do
33
36
 
34
37
  desc "Release the Puppet module, doing a clean, build, tag, push, bump_commit and git push."
35
38
  task :release => [:clean, :build, :tag, :push, :bump_commit] do
36
- puts "Pushing commits to remote git repo"
37
- sh "git push"
38
- puts "Pushing tags to remote git repo"
39
- sh "git push --tags"
39
+ puts "Pushing to remote git repo"
40
+ Blacksmith::Git.new.push!
40
41
  end
41
- end
42
-
43
-
44
- # task methods for reuse
45
-
46
- def bump
47
- m = modulefile()
48
- text = File.read("Modulefile")
49
- v = increase_version(m.version)
50
- puts "Bumping version from #{m.version} to #{v}"
51
- text = replace_version(text, v)
52
- File.open("Modulefile", "w") {|file| file.puts text}
53
- end
54
-
55
- def tag
56
- m = modulefile()
57
- sh "git tag v#{m.version}"
58
- end
59
-
60
- def bump_commit
61
- sh "git add Modulefile"
62
- sh "git commit -m 'Bump version'"
63
- end
64
-
65
- def bump_commit_push
66
- sh "git add Modulefile"
67
- sh "git commit -m 'Bump version'"
68
- end
69
-
70
- def push
71
- RestClient.proxy = ENV['http_proxy']
72
- credentials_file = File.expand_path("~/.puppetforge.yml")
73
- unless File.exists?(credentials_file)
74
- fail(<<-eos)
75
- Could not find Puppet Forge credentials file '#{credentials_file}'
76
- Please create it
77
- ---
78
- forge: https://forge.puppetlabs.com
79
- username: myuser
80
- password: mypassword
81
- eos
82
- end
83
- credentials = YAML.load_file(credentials_file)
84
- m = modulefile("Modulefile")
85
- forge = credentials['forge'] || "https://forge.puppetlabs.com"
86
-
87
- # login to the puppet forge
88
- puts "Logging into Puppet Forge as user #{credentials['username']}"
89
- response = RestClient.post(
90
- "#{forge}/login",
91
- {'username' => credentials['username'], 'password' => credentials['password']}){
92
- |response, request, result, &block|
93
- if [301, 302, 307].include? response.code
94
- response
95
- else
96
- response.return!(request, result, &block)
97
- end
98
- }
99
- fail("Failed to login to Puppet Forge: cookies not set correctly") unless response.cookies['auth']
100
-
101
- # upload the file
102
- package = "pkg/#{m.username}-#{m.name}-#{m.version}.tar.gz"
103
- puts "Uploading #{package} to Puppet Forge #{m.username}/#{m.name}"
104
- response = RestClient.post("#{forge}/#{m.username}/#{m.name}/upload",
105
- {:tarball => File.new(package, 'rb')},
106
- {:cookies => response.cookies}){
107
- |response, request, result, &block|
108
- if [301, 302, 307].include? response.code
109
- response
110
- else
111
- response.return!(request, result, &block)
112
- end
113
- }
114
- page = Nokogiri::HTML(response.body)
115
- errors = page.css('.errors')
116
- fail("Error uploading module #{package} to Puppet Forge #{m.username}/#{m.name}:#{errors.text}") unless errors.empty?
117
- end
118
-
119
-
120
- # util
121
-
122
- def replace_version(text, version)
123
- text.gsub(/\nversion[ ]+['"].*['"]/, "\nversion '#{version}'")
124
- end
125
-
126
- def increase_version(version)
127
- v = Gem::Version.new("#{version}.0")
128
- raise "Unable to increase prerelease version #{version}" if v.prerelease?
129
- v.bump.to_s
130
- end
131
42
 
132
- def modulefile(path = "Modulefile")
133
- metadata = Puppet::ModuleTool::Metadata.new
134
- Puppet::ModuleTool::ModulefileReader.evaluate(metadata, path)
135
- metadata
136
43
  end
@@ -0,0 +1,3 @@
1
+ module Blacksmith
2
+ VERSION = '2.0.0'
3
+ end
@@ -0,0 +1,4 @@
1
+ require_relative 'puppet_blacksmith/error'
2
+ require_relative 'puppet_blacksmith/forge'
3
+ require_relative 'puppet_blacksmith/git'
4
+ require_relative 'puppet_blacksmith/modulefile'
@@ -0,0 +1,230 @@
1
+ <!DOCTYPE html>
2
+ <html dir="ltr" lang="en-US">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
+ <title>Puppet Forge</title>
6
+ <link rel="stylesheet" href="/styles/application.css" />
7
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
8
+ <script src="/scripts/modernizr.js"></script>
9
+
10
+ <script src="//munchkin.marketo.net/munchkin.js" type="text/javascript"></script>
11
+
12
+ <script src="/scripts/leadcapture.js"></script>
13
+
14
+ <script type="text/javascript">
15
+ mktoMunchkin("307-QLA-991");
16
+
17
+ var _gaq = _gaq || [];
18
+ _gaq.push(['_setAccount', 'UA-1537572-5']);
19
+ _gaq.push(['_trackPageview']);
20
+ (function() {
21
+ var ga = document.createElement('script');
22
+ ga.type = 'text/javascript';
23
+ ga.async = true;
24
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
25
+ var s = document.getElementsByTagName('script')[0];
26
+ s.parentNode.insertBefore(ga, s);
27
+ })();
28
+
29
+ var _gauges = _gauges || [];
30
+ (function() {
31
+ var t = document.createElement('script');
32
+ t.type = 'text/javascript';
33
+ t.async = true;
34
+ t.id = 'gauges-tracker';
35
+ t.setAttribute('data-site-id', '50a02411613f5d682f0000c1');
36
+ t.src = '//secure.gaug.es/track.js';
37
+ var s = document.getElementsByTagName('script')[0];
38
+ s.parentNode.insertBefore(t, s);
39
+ })();
40
+ </script>
41
+ </head>
42
+ <body>
43
+ <section id="masthead">
44
+ <div class="site-width">
45
+ <ul>
46
+ <li class="colon-after"><a href="http://www.puppetlabs.com">Puppet Labs</a></li>
47
+ <li><a href="http://puppetlabs.com/puppet/puppet-open-source/">Open Source Projects</a></li>
48
+ <li><a href="http://puppetlabs.com/services/customer-support/">Support</a></li>
49
+ <li><a href="http://docs.puppetlabs.com/">Docs</a></li>
50
+ <li><a href="http://projects.puppetlabs.com/">Bugs</a></li>
51
+ </ul>
52
+ </div>
53
+ </section>
54
+ <section id="header">
55
+ <div class="site-width clearfix">
56
+ <a href="/">
57
+ <img src="/images/forge-logo.png" class="logo" width="214px" height="50px" alt="Puppet Forge Home">
58
+ </a>
59
+
60
+ <div class="stats">
61
+ <span class="first">
62
+ <span class="big">1,369</span> modules
63
+ </span>
64
+ <span>
65
+ <span class="big">1,193,444</span> downloads
66
+ </span>
67
+ </div>
68
+ </div>
69
+ </section>
70
+ <section id="content">
71
+ <div class="site-width clearfix">
72
+ <section id="body">
73
+ <h2>Upload a Release of maestrodev/test</h2>
74
+ <div class="errors">
75
+ <ul>
76
+ <li>Internal server error</li>
77
+ </ul>
78
+ </div>
79
+
80
+ <form action="/maestrodev/test/upload" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
81
+ <input type="hidden" name="utf-8" value="&#x2713;" />
82
+ <ul class="form">
83
+ <li class="requiredFieldText">Required fields <span>*</span></li>
84
+
85
+ <li>
86
+ <label for="tarball" class="required">Tarball</label>
87
+ <p>
88
+ The version number for this release will be determined from the metadata.json file in the uploaded tarball.
89
+
90
+ </p>
91
+ <input name="tarball" type="file" required />
92
+ </li>
93
+
94
+ <li>
95
+ <input type="submit" value="Upload Release" />
96
+ <a href="/maestrodev/test">Cancel</a>
97
+ </li>
98
+ </ul>
99
+ </form>
100
+
101
+ </section>
102
+ <section id="sidebar">
103
+ <section class="session">
104
+ <table>
105
+ <tr>
106
+ <td>
107
+ <img class="avatar" alt="avatar" src="//gravatar.com/avatar/192d33f0c408b08b3df9d4927bfbcdc0.png?r=PG&amp;s=45" /></td>
108
+ <td>
109
+ <a class="profile-edit" href="/users/maestrodev/edit">MaestroDev</a>
110
+ <a href="/logout">Sign Out</a>
111
+ </td>
112
+ </tr>
113
+ </table>
114
+
115
+ <ul>
116
+ <li><a href="/maestrodev">Your Modules</a></li>
117
+ <li><a href="/modules/new">Publish a Module</a></li>
118
+ </ul>
119
+ </section>
120
+
121
+ <section class="search">
122
+ <h3>Find Modules</h3>
123
+ <form action="/modules" method="get" accept-charset="UTF-8">
124
+ <input type="hidden" name="utf-8" value="&#x2713;" />
125
+ <input type="hidden" name="sort" value="rank" />
126
+ <input type="search" name="q" required placeholder="eg. apache, mysql" />
127
+ <input type="submit" value="Find" />
128
+ </form>
129
+ </section>
130
+
131
+ <section class="tags">
132
+ <h3>Popular Tags</h3>
133
+ <ul>
134
+ <li>
135
+ <a href="/tags/ubuntu">
136
+ <b>ubuntu</b> (248 modules)
137
+ </a>
138
+ </li>
139
+ <li>
140
+ <a href="/tags/debian">
141
+ <b>debian</b> (197 modules)
142
+ </a>
143
+ </li>
144
+ <li>
145
+ <a href="/tags/rhel">
146
+ <b>rhel</b> (145 modules)
147
+ </a>
148
+ </li>
149
+ <li>
150
+ <a href="/tags/CentOS">
151
+ <b>CentOS</b> (114 modules)
152
+ </a>
153
+ </li>
154
+ <li>
155
+ <a href="/tags/centos">
156
+ <b>centos</b> (95 modules)
157
+ </a>
158
+ </li>
159
+ <li>
160
+ <a href="/tags/monitoring">
161
+ <b>monitoring</b> (77 modules)
162
+ </a>
163
+ </li>
164
+ <li>
165
+ <a href="/tags/networking">
166
+ <b>networking</b> (73 modules)
167
+ </a>
168
+ </li>
169
+ <li>
170
+ <a href="/tags/redhat">
171
+ <b>redhat</b> (68 modules)
172
+ </a>
173
+ </li>
174
+ <li>
175
+ <a href="/tags/security">
176
+ <b>security</b> (62 modules)
177
+ </a>
178
+ </li>
179
+ <li>
180
+ <a href="/tags/applications">
181
+ <b>applications</b> (61 modules)
182
+ </a>
183
+ </li>
184
+ </ul>
185
+ </section>
186
+
187
+ <section class="banner">
188
+ <a href="http://puppetconf.com/register/"><img src="/images/puppetconf_v1-01.png"></a>
189
+ </section> </section>
190
+ </div>
191
+ </section>
192
+ <section id="footer">
193
+ <div class="site-width">
194
+ <div id="footer-links">
195
+ <ul>
196
+ <li><strong>Community</strong></li>
197
+ <li><a href="http://webchat.freenode.net/?channels=puppet">IRC</a></li>
198
+ <li><a href="http://groups.google.com/group/puppet-dev">Puppet Developer List</a></li>
199
+ <li><a href="http://groups.google.com/group/puppet-users?pli=1">Puppet User List</a></li>
200
+ <li><a href="http://www.linkedin.com/groups?about=&gid=696467&trk=anet_ug_grppro">Puppet Users' LinkedIn Group</a></li>
201
+ <li><a href="http://puppetlabs.com/resources/newsletter/">Subscribe to Newsletter</a></li>
202
+ </ul>
203
+ </div>
204
+ <div id="footer-bottom" class="clearfix">
205
+ <div class="vcard">
206
+ &copy; 2009-2012
207
+ <span class="org">
208
+ <a href="http://puppetlabs.com/" title="Puppet Labs">
209
+ Puppet Labs
210
+ </a>
211
+ </span>
212
+ <a class="email" href="mailto:info@puppetlabs.com">info@puppetlabs.com</a>
213
+ <span class="adr">
214
+ <span class="street-address">926 NW 13th Ave., Suite 210</span>
215
+ /
216
+ <span class="locality">Portland</span>
217
+ ,
218
+ <span class="region">OR</span>
219
+ <span class="postal-code">97209</span>
220
+
221
+ </span>
222
+ <span class="tel">+1 503-805-9065</span>
223
+ </div>
224
+ <div class="new-relic-logo">Monitored by <a href="http://newrelic.com/"><img src="/images/new-relic-oval.png"></a>
225
+ </div>
226
+ </div>
227
+ </div>
228
+ </section>
229
+ </body>
230
+ </html>
File without changes
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+ require 'fileutils'
3
+
4
+ describe 'Blacksmith::Forge' do
5
+
6
+ subject { Blacksmith::Forge.new(username, password, forge) }
7
+ let(:username) { 'johndoe' }
8
+ let(:password) { 'secret' }
9
+ let(:forge) { "https://forge.puppetlabs.com" }
10
+ let(:module_name) { "test" }
11
+ let(:version) { "1.0.0" }
12
+ let(:package) { File.dirname(__FILE__) + '/../data/maestrodev-ant-1.0.4.tar.gz' }
13
+
14
+ describe 'push' do
15
+
16
+ before do
17
+ FileUtils.mkdir_p("pkg")
18
+ FileUtils.touch("pkg/#{username}-#{module_name}-#{version}.tar.gz")
19
+ end
20
+
21
+ context "when using username and password" do
22
+ before do
23
+ stub_request(:post, "#{forge}/login").with(
24
+ :body => {'username' => username, 'password' => password}).to_return(
25
+ :status => 200, :headers => { 'Set-Cookie' => "auth=xxx; path=/; expires=Tue, 27-Aug-2013 08:34:51 GMT" })
26
+
27
+ stub_request(:post, "#{forge}/#{username}/#{module_name}/upload").to_return(:status => 200)
28
+ subject.push!(module_name, package)
29
+ end
30
+
31
+ it "should push the module" do
32
+
33
+ end
34
+ end
35
+
36
+ context "when forge returns an error" do
37
+ before do
38
+ stub_request(:post, "#{forge}/login").with(
39
+ :body => {'username' => username, 'password' => password}).to_return(
40
+ :status => 200, :headers => { 'Set-Cookie' => "auth=xxx; path=/; expires=Tue, 27-Aug-2013 08:34:51 GMT" })
41
+
42
+ stub_request(:post, "#{forge}/#{username}/#{module_name}/upload").to_return(
43
+ :body => File.new('spec/data/forge_error.html'), :status => 200)
44
+ end
45
+
46
+ it "should handle the error" do
47
+ expect { subject.push!(module_name, package) }.to raise_error(%r{^Error uploading module .*maestrodev-ant-1.0.4.tar.gz to Puppet Forge johndoe/test})
48
+ end
49
+ end
50
+ end
51
+ end
52
+
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Blacksmith::Git' do
4
+
5
+ subject { Blacksmith::Git.new(path) }
6
+ let(:path) { File.join(File.dirname(__FILE__), '../../tmp/git_test') }
7
+ let(:version) { '1.0.0' }
8
+
9
+ before do
10
+ FileUtils.rm_rf path
11
+ FileUtils.mkdir_p(path)
12
+ `git init #{path}`
13
+ FileUtils.touch(File.join(path, "Modulefile"))
14
+ `cd #{path} && git add Modulefile && git commit -am "Init"`
15
+ end
16
+
17
+ describe 'tag!' do
18
+ before { subject.tag!(version) }
19
+ it "should have the tag" do
20
+ out = `cd #{path} && git tag`
21
+ out.chomp.should match(/^v1.0.0$/)
22
+ end
23
+ end
24
+ end
@@ -1,6 +1,15 @@
1
- require 'puppet_blacksmith/rake_tasks'
1
+ require 'spec_helper'
2
2
 
3
- describe 'rake tasks' do
3
+ describe 'Blacksmith::Modulefile' do
4
+
5
+ subject { Blacksmith::Modulefile.new(path) }
6
+ let(:path) { "spec/data/Modulefile" }
7
+
8
+ context 'when modulefile is parsed' do
9
+ it { subject.metadata.version.should eql("1.0.0") }
10
+ it { subject.metadata.username.should eql("maestrodev") }
11
+ it { subject.metadata.name.should eql("test") }
12
+ end
4
13
 
5
14
  describe 'replace_version' do
6
15
  it "should replace the version" do
@@ -28,25 +37,15 @@ summary 'version "1"'
28
37
  description "version '1'"
29
38
  eos
30
39
 
31
- replace_version(original, "1.0.1").should eql(expected)
40
+ subject.replace_version(original, "1.0.1").should eql(expected)
32
41
  end
33
42
  end
34
43
 
35
44
  describe 'increase_version' do
36
- it "should increase the version" do
37
- increase_version("1.0").should eql("1.1")
38
- increase_version("1.0.0").should eql("1.0.1")
39
- increase_version("1.0.1").should eql("1.0.2")
40
- expect { increase_version("1.0.12qwe") }.to raise_error
41
- end
45
+ it { subject.increase_version("1.0").should eql("1.1") }
46
+ it { subject.increase_version("1.0.0").should eql("1.0.1") }
47
+ it { subject.increase_version("1.0.1").should eql("1.0.2") }
48
+ it { expect { subject.increase_version("1.0.12qwe") }.to raise_error }
42
49
  end
43
50
 
44
- describe 'modulefile' do
45
- it "should parse the modulefile" do
46
- m = modulefile("spec/data/Modulefile")
47
- m.version.should eql("1.0.0")
48
- m.username.should eql("maestrodev")
49
- m.name.should eql("test")
50
- end
51
- end
52
51
  end
@@ -0,0 +1,2 @@
1
+ require 'webmock/rspec'
2
+ require 'puppet_blacksmith'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-blacksmith
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 2.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-11 00:00:00.000000000 Z
12
+ date: 2013-08-21 00:00:00.000000000 Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: rake
16
- requirement: &12387780 !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: *12387780
25
14
  - !ruby/object:Gem::Dependency
26
15
  name: rest-client
27
- requirement: &12386620 !ruby/object:Gem::Requirement
16
+ requirement: &16892060 !ruby/object:Gem::Requirement
28
17
  none: false
29
18
  requirements:
30
19
  - - ! '>='
@@ -32,10 +21,10 @@ dependencies:
32
21
  version: '0'
33
22
  type: :runtime
34
23
  prerelease: false
35
- version_requirements: *12386620
24
+ version_requirements: *16892060
36
25
  - !ruby/object:Gem::Dependency
37
26
  name: puppet
38
- requirement: &12421260 !ruby/object:Gem::Requirement
27
+ requirement: &16891460 !ruby/object:Gem::Requirement
39
28
  none: false
40
29
  requirements:
41
30
  - - ! '>='
@@ -43,32 +32,32 @@ dependencies:
43
32
  version: 2.7.16
44
33
  type: :runtime
45
34
  prerelease: false
46
- version_requirements: *12421260
35
+ version_requirements: *16891460
47
36
  - !ruby/object:Gem::Dependency
48
- name: puppetlabs_spec_helper
49
- requirement: &12418920 !ruby/object:Gem::Requirement
37
+ name: nokogiri
38
+ requirement: &16890980 !ruby/object:Gem::Requirement
50
39
  none: false
51
40
  requirements:
52
41
  - - ! '>='
53
42
  - !ruby/object:Gem::Version
54
- version: 0.3.0
43
+ version: '0'
55
44
  type: :runtime
56
45
  prerelease: false
57
- version_requirements: *12418920
46
+ version_requirements: *16890980
58
47
  - !ruby/object:Gem::Dependency
59
- name: nokogiri
60
- requirement: &12417620 !ruby/object:Gem::Requirement
48
+ name: rake
49
+ requirement: &16890460 !ruby/object:Gem::Requirement
61
50
  none: false
62
51
  requirements:
63
52
  - - ! '>='
64
53
  - !ruby/object:Gem::Version
65
54
  version: '0'
66
- type: :runtime
55
+ type: :development
67
56
  prerelease: false
68
- version_requirements: *12417620
57
+ version_requirements: *16890460
69
58
  - !ruby/object:Gem::Dependency
70
59
  name: cucumber
71
- requirement: &12416140 !ruby/object:Gem::Requirement
60
+ requirement: &16889980 !ruby/object:Gem::Requirement
72
61
  none: false
73
62
  requirements:
74
63
  - - ! '>='
@@ -76,10 +65,10 @@ dependencies:
76
65
  version: '0'
77
66
  type: :development
78
67
  prerelease: false
79
- version_requirements: *12416140
68
+ version_requirements: *16889980
80
69
  - !ruby/object:Gem::Dependency
81
70
  name: aruba
82
- requirement: &12414740 !ruby/object:Gem::Requirement
71
+ requirement: &16889520 !ruby/object:Gem::Requirement
83
72
  none: false
84
73
  requirements:
85
74
  - - ! '>='
@@ -87,10 +76,10 @@ dependencies:
87
76
  version: '0'
88
77
  type: :development
89
78
  prerelease: false
90
- version_requirements: *12414740
79
+ version_requirements: *16889520
91
80
  - !ruby/object:Gem::Dependency
92
81
  name: rspec
93
- requirement: &12559120 !ruby/object:Gem::Requirement
82
+ requirement: &16888960 !ruby/object:Gem::Requirement
94
83
  none: false
95
84
  requirements:
96
85
  - - ! '>='
@@ -98,7 +87,18 @@ dependencies:
98
87
  version: 2.7.0
99
88
  type: :development
100
89
  prerelease: false
101
- version_requirements: *12559120
90
+ version_requirements: *16888960
91
+ - !ruby/object:Gem::Dependency
92
+ name: webmock
93
+ requirement: &16888440 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *16888440
102
102
  description: Puppet module tools for development and Puppet Forge management
103
103
  email:
104
104
  - info@maestrodev.com
@@ -106,9 +106,20 @@ executables: []
106
106
  extensions: []
107
107
  extra_rdoc_files: []
108
108
  files:
109
+ - lib/puppet_blacksmith.rb
110
+ - lib/puppet_blacksmith/forge.rb
111
+ - lib/puppet_blacksmith/modulefile.rb
109
112
  - lib/puppet_blacksmith/rake_tasks.rb
113
+ - lib/puppet_blacksmith/version.rb
114
+ - lib/puppet_blacksmith/error.rb
115
+ - lib/puppet_blacksmith/git.rb
110
116
  - LICENSE
111
- - spec/puppet_blacksmith/rake_tasks_spec.rb
117
+ - spec/spec_helper.rb
118
+ - spec/puppet_blacksmith/git_spec.rb
119
+ - spec/puppet_blacksmith/forge_spec.rb
120
+ - spec/puppet_blacksmith/modulefile_spec.rb
121
+ - spec/data/maestrodev-ant-1.0.4.tar.gz
122
+ - spec/data/forge_error.html
112
123
  - spec/data/Modulefile
113
124
  homepage: http://github.com/maestrodev/puppet-blacksmith
114
125
  licenses: []
@@ -124,7 +135,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
124
135
  version: '0'
125
136
  segments:
126
137
  - 0
127
- hash: -2324545101189307236
138
+ hash: 3568524494369527716
128
139
  required_rubygems_version: !ruby/object:Gem::Requirement
129
140
  none: false
130
141
  requirements:
@@ -138,5 +149,10 @@ signing_key:
138
149
  specification_version: 3
139
150
  summary: Tasks to manage Puppet module builds
140
151
  test_files:
141
- - spec/puppet_blacksmith/rake_tasks_spec.rb
152
+ - spec/spec_helper.rb
153
+ - spec/puppet_blacksmith/git_spec.rb
154
+ - spec/puppet_blacksmith/forge_spec.rb
155
+ - spec/puppet_blacksmith/modulefile_spec.rb
156
+ - spec/data/maestrodev-ant-1.0.4.tar.gz
157
+ - spec/data/forge_error.html
142
158
  - spec/data/Modulefile