puppet-library 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG.yml +4 -1
- data/Rakefile +90 -0
- data/features/module_page.feature +2 -2
- data/features/module_search.feature +29 -0
- data/features/step_definitions/sinatra_steps.rb +11 -0
- data/lib/puppet_library/app/views/layout.haml +24 -3
- data/lib/puppet_library/server.rb +2 -1
- data/lib/puppet_library/version.rb +1 -1
- data/puppet-library.gemspec +1 -1
- data/spec/server_spec.rb +25 -0
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MzE2OGYxMDE4NjM3NTVkMDFmOGFjYTcwMmM3Y2YwYTg0ZmE1MzIxYg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NGE3YWE2MWUwZGFiZjBhZDVhZjA2NzZkNDg3YmUyNDk1MThiYTk1Nw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MmI3ZTljMjZmNjYxMWM2ODEwZjY5ZDJjODJiMzEyZGE3OTNmOTI2NzJhOTM2
|
10
|
+
NjNjNzQ1YWVhMmJkZGNiOGQyNTAxNGJlN2Y0ZDAyM2U3OWEwZjMzNzg5Nzkw
|
11
|
+
NGMzNDc2YmM3YjFmMjQwN2ZlMGEyNTUxMGM3M2IyZGJjOWJkMmM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZTkzNjBmN2UwMjlmZTkwNWQ3OGQ4OTM1MGU5OTQzZmNiYTNkZWZlZmY1ODg4
|
14
|
+
MGQ2ZGExZmIzM2U0ZDEzZGViMmYyMzBkZWVkY2U5ZDEyYmQ0NzE5ZTlmYWQx
|
15
|
+
ZTdkNGZkYTdiNzAwNzg3ODQ5ZDQ2NGViMmYyOTBhYmM0NTE0MzM=
|
data/CHANGELOG.yml
CHANGED
@@ -34,7 +34,10 @@
|
|
34
34
|
- Improved performance of proxy
|
35
35
|
- tag: v0.4.0
|
36
36
|
changes:
|
37
|
-
- Added
|
37
|
+
- Added `--version` option to CLI
|
38
38
|
- Added option to daemonize server (with optional pidfile)
|
39
39
|
- Added web UI to browse modules
|
40
|
+
- tag: v0.5.0
|
41
|
+
changes:
|
42
|
+
- Added module search field to web UI
|
40
43
|
|
data/Rakefile
CHANGED
@@ -18,6 +18,9 @@
|
|
18
18
|
require 'bundler/gem_tasks'
|
19
19
|
require 'rspec/core/rake_task'
|
20
20
|
require 'coveralls/rake/task'
|
21
|
+
require 'json'
|
22
|
+
require 'yaml'
|
23
|
+
require 'net/http'
|
21
24
|
|
22
25
|
SUPPORTED_VERSIONS = %w[1.8 1.9 2.0 2.1]
|
23
26
|
# The integration test doesn't work on Ruby 1.8, and Puppet doesn't work on 2.1
|
@@ -166,6 +169,9 @@ task "push-release" => ["check-license", :verify] do
|
|
166
169
|
puts "Releasing #{PuppetLibrary::VERSION}"
|
167
170
|
Rake::Task[:release].invoke
|
168
171
|
|
172
|
+
puts "Registering release notes for #{PuppetLibrary::VERSION}"
|
173
|
+
Rake::Task["register-release[#{PuppetLibrary::VERSION}]"].invoke
|
174
|
+
|
169
175
|
major, minor, patch = PuppetLibrary::VERSION.split(".").map {|n| n.to_i}
|
170
176
|
new_version = "#{major}.#{minor + 1}.0"
|
171
177
|
puts "Updating version number to #{new_version}"
|
@@ -173,3 +179,87 @@ task "push-release" => ["check-license", :verify] do
|
|
173
179
|
PuppetLibrary::VERSION.replace new_version
|
174
180
|
system "git commit lib/puppet_library/version.rb --message='[release] Incremented version number'" or fail "Couldn't commit new version number"
|
175
181
|
end
|
182
|
+
|
183
|
+
desc "Register release with Github"
|
184
|
+
task "register-release", [:version] do |task, args|
|
185
|
+
github = Github.new
|
186
|
+
|
187
|
+
version = args[:version]
|
188
|
+
unless version =~ /\d+\.\d+\.\d+/
|
189
|
+
raise "Bad version: '#{version}'"
|
190
|
+
end
|
191
|
+
unless system("git tag | grep v#{version} > /dev/null")
|
192
|
+
raise "Couldn't find tag 'v#{version}'"
|
193
|
+
end
|
194
|
+
|
195
|
+
tag = "v#{version}"
|
196
|
+
changelog = YAML.load_file("CHANGELOG.yml")
|
197
|
+
release_notes = changelog.find {|release| release["tag"] == tag}
|
198
|
+
changes = release_notes ? release_notes["changes"] : []
|
199
|
+
description = changes.map { |change| "- #{change}" }.join("\n")
|
200
|
+
data = {
|
201
|
+
"tag_name" => tag,
|
202
|
+
"target_commitish" => "master",
|
203
|
+
"name" => "Version #{version}",
|
204
|
+
"body" => description,
|
205
|
+
"draft" => false,
|
206
|
+
"prerelease" => false
|
207
|
+
}
|
208
|
+
release = github.get("/repos/drrb/puppet-library/releases").find {|release| release["tag_name"] == tag}
|
209
|
+
if release
|
210
|
+
puts "Release #{tag} exists. Updating it..."
|
211
|
+
github.patch("/repos/drrb/puppet-library/releases/#{release['id']}", data)
|
212
|
+
else
|
213
|
+
puts "Creating release #{tag}..."
|
214
|
+
github.post("/repos/drrb/puppet-library/releases", data)
|
215
|
+
end
|
216
|
+
puts "Done"
|
217
|
+
end
|
218
|
+
|
219
|
+
class Github
|
220
|
+
def initialize
|
221
|
+
@base_url = "https://api.github.com"
|
222
|
+
api_key_file = File.expand_path("~/.github/release.apikey")
|
223
|
+
raise "Put your github credentials in ~/.github/release.apikey as 'username:key'" unless File.exist? api_key_file
|
224
|
+
@username, @key = File.read(api_key_file).strip.split ":"
|
225
|
+
end
|
226
|
+
|
227
|
+
def post(path, data, &block)
|
228
|
+
puts "POST #{path}"
|
229
|
+
request = Net::HTTP::Post.new(path)
|
230
|
+
request.body = data.to_json
|
231
|
+
send request
|
232
|
+
end
|
233
|
+
|
234
|
+
def patch(path, data, &block)
|
235
|
+
puts "PATCH #{path}"
|
236
|
+
request = Net::HTTP::Patch.new(path)
|
237
|
+
request.body = data.to_json
|
238
|
+
response = send(request, &block)
|
239
|
+
end
|
240
|
+
|
241
|
+
def get(path, &block)
|
242
|
+
puts "GET #{path}"
|
243
|
+
request = Net::HTTP::Get.new(path)
|
244
|
+
send request
|
245
|
+
end
|
246
|
+
|
247
|
+
def send(request)
|
248
|
+
request.add_field('Content-Type', 'application/json')
|
249
|
+
request.basic_auth @username, @key
|
250
|
+
|
251
|
+
uri = URI.parse(@base_url)
|
252
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
253
|
+
http.use_ssl = true
|
254
|
+
response = http.request(request)
|
255
|
+
puts response.code
|
256
|
+
if block_given?
|
257
|
+
yield(response)
|
258
|
+
else
|
259
|
+
unless response.code =~ /^2../
|
260
|
+
raise "Request returned non-success:\n#{response.body}"
|
261
|
+
end
|
262
|
+
JSON.parse(response.body)
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
@@ -17,8 +17,8 @@
|
|
17
17
|
|
18
18
|
Feature: Module page
|
19
19
|
As a user
|
20
|
-
I want to see
|
21
|
-
So that I can
|
20
|
+
I want to see the details of a module
|
21
|
+
So that I can tell exactly what's on the server
|
22
22
|
|
23
23
|
Scenario: Visit the module page
|
24
24
|
Given the "puppetlabs/apache" module is available at version "1.0.0"
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
# Puppet Library
|
3
|
+
# Copyright (C) 2014 drrb
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
Feature: Module search
|
19
|
+
As a user
|
20
|
+
I want to search the modules
|
21
|
+
So that I can find details about specific modules
|
22
|
+
|
23
|
+
Scenario: Visit the module list page
|
24
|
+
Given the "puppetlabs/apache" module is available at version "1.0.0"
|
25
|
+
And the "puppetlabs/stdlib" module is available at version "1.0.0"
|
26
|
+
When I visit the module list page
|
27
|
+
And I search for "apache"
|
28
|
+
Then I should see "puppetlabs/apache"
|
29
|
+
And I should not see "puppetlabs/stdlib"
|
@@ -62,6 +62,13 @@ When /^I click on "(.*?)"$/ do |link_text|
|
|
62
62
|
click_link link_text
|
63
63
|
end
|
64
64
|
|
65
|
+
When /^I search for "(.*?)"$/ do |term|
|
66
|
+
within("form#module-search") do
|
67
|
+
fill_in 'search', :with => term
|
68
|
+
click_button "Search"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
65
72
|
Then /^I should be on the module page for "(.*?)"$/ do |module_name|
|
66
73
|
expect(URI.parse(current_url).path).to eq "/#{module_name}"
|
67
74
|
end
|
@@ -70,6 +77,10 @@ Then /^I should see "(.*?)"$/ do |text|
|
|
70
77
|
expect(page).to have_content text
|
71
78
|
end
|
72
79
|
|
80
|
+
Then /^I should not see "(.*?)"$/ do |text|
|
81
|
+
expect(page).not_to have_content text
|
82
|
+
end
|
83
|
+
|
73
84
|
Then /^I should see '(.*?)'$/ do |text|
|
74
85
|
expect(page).to have_content text
|
75
86
|
end
|
@@ -20,6 +20,7 @@
|
|
20
20
|
%meta{ :charset => "utf-8" }
|
21
21
|
%title Puppet Library
|
22
22
|
%link{ :href => "https://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css", :type => "text/css", :rel => "stylesheet" }
|
23
|
+
-#%link{ :href => "https://netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap-theme.min.css", :type => "text/css", :rel => "stylesheet" }
|
23
24
|
/[if lt IE 9]
|
24
25
|
%script{:src => "https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"}
|
25
26
|
%script{:src => "https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"}
|
@@ -28,9 +29,24 @@
|
|
28
29
|
body {
|
29
30
|
padding-top: 50px;
|
30
31
|
}
|
31
|
-
.
|
32
|
-
|
33
|
-
|
32
|
+
input.search-query {
|
33
|
+
padding-left:32px;
|
34
|
+
}
|
35
|
+
form.form-search {
|
36
|
+
position: relative;
|
37
|
+
}
|
38
|
+
form.form-search:before {
|
39
|
+
content:'';
|
40
|
+
display: block;
|
41
|
+
width: 14px;
|
42
|
+
height: 14px;
|
43
|
+
background-image: url(http://getbootstrap.com/2.3.2/assets/img/glyphicons-halflings.png);
|
44
|
+
background-position: -48px 0;
|
45
|
+
position: absolute;
|
46
|
+
top:10px;
|
47
|
+
left:26px;
|
48
|
+
opacity: .5;
|
49
|
+
z-index: 1000;
|
34
50
|
}
|
35
51
|
%body
|
36
52
|
.navbar.navbar-inverse.navbar-fixed-top{ :role => "navigation" }
|
@@ -48,6 +64,11 @@
|
|
48
64
|
%a{:href => '/'} Modules
|
49
65
|
%li
|
50
66
|
%a{:href => 'https://github.com/drrb/puppet-library', :target => "puppet-library"} Help
|
67
|
+
%form#module-search.navbar-form.navbar-right.form-search{ :action => "/", :method => "get", :role => "form" }
|
68
|
+
.input-group
|
69
|
+
%input.form-control.search-query{ :name => "search", :type => "search", :placeholder => "Search modules" }
|
70
|
+
%span.input-group-btn
|
71
|
+
%button.btn.btn-primary{ :type => "submit" } Search
|
51
72
|
.container
|
52
73
|
= yield
|
53
74
|
%script{ :src => "https://code.jquery.com/jquery-2.1.0.min.js" }
|
data/puppet-library.gemspec
CHANGED
@@ -46,7 +46,7 @@ Gem::Specification.new do |spec|
|
|
46
46
|
spec.add_development_dependency "librarian-puppet"
|
47
47
|
spec.add_development_dependency "mime-types", "< 2"
|
48
48
|
spec.add_development_dependency "pry"
|
49
|
-
spec.add_development_dependency "puppet"
|
49
|
+
spec.add_development_dependency "puppet", "~> 3.3.0"
|
50
50
|
spec.add_development_dependency "rack-test"
|
51
51
|
spec.add_development_dependency "rake"
|
52
52
|
spec.add_development_dependency "rspec"
|
data/spec/server_spec.rb
CHANGED
@@ -51,6 +51,31 @@ module PuppetLibrary
|
|
51
51
|
expect(last_response.body).to include "0.0.1"
|
52
52
|
expect(last_response.body).to include "0.0.2"
|
53
53
|
end
|
54
|
+
|
55
|
+
context "when a search term is provided" do
|
56
|
+
it "lists matching modules" do
|
57
|
+
modules = [
|
58
|
+
{
|
59
|
+
"author" => "puppetlabs",
|
60
|
+
"name" => "apache",
|
61
|
+
"tag_list" => ["apache", "httpd"],
|
62
|
+
"releases" => [{"version"=>"0.0.1"}, {"version"=>"0.0.2"}],
|
63
|
+
"full_name" => "puppetlabs/apache",
|
64
|
+
"version" => "0.0.2",
|
65
|
+
"project_url" => "http://github.com/puppetlabs/puppetlabs-apache",
|
66
|
+
"desc" => "Puppet module for Apache"
|
67
|
+
}
|
68
|
+
]
|
69
|
+
expect(forge).to receive(:search_modules).with("apache").and_return(modules)
|
70
|
+
|
71
|
+
get "/?search=apache"
|
72
|
+
|
73
|
+
expect(last_response.body).to include "Modules"
|
74
|
+
expect(last_response.body).to include "puppetlabs/apache"
|
75
|
+
expect(last_response.body).to include "0.0.1"
|
76
|
+
expect(last_response.body).to include "0.0.2"
|
77
|
+
end
|
78
|
+
end
|
54
79
|
end
|
55
80
|
|
56
81
|
describe "GET /modules.json" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-library
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- drrb
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01
|
11
|
+
date: 2014-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -140,16 +140,16 @@ dependencies:
|
|
140
140
|
name: puppet
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - ~>
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
145
|
+
version: 3.3.0
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - ~>
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
152
|
+
version: 3.3.0
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: rack-test
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -313,6 +313,7 @@ files:
|
|
313
313
|
- config.ru
|
314
314
|
- features/module_list.feature
|
315
315
|
- features/module_page.feature
|
316
|
+
- features/module_search.feature
|
316
317
|
- features/step_definitions/sinatra_steps.rb
|
317
318
|
- features/support/env.rb
|
318
319
|
- lib/puppet_library.rb
|
@@ -378,6 +379,7 @@ summary: Puppet Library is a private Puppet module server that's compatible with
|
|
378
379
|
test_files:
|
379
380
|
- features/module_list.feature
|
380
381
|
- features/module_page.feature
|
382
|
+
- features/module_search.feature
|
381
383
|
- features/step_definitions/sinatra_steps.rb
|
382
384
|
- features/support/env.rb
|
383
385
|
- spec/forge/abstract_spec.rb
|