puppetfiler 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7c1c257dcdc2214a28481fd05e14520dfcb4f802
4
- data.tar.gz: c01f31d32b79d677bdc37cb28f073c64a187ced9
3
+ metadata.gz: f6301c789d65bd3d6df07b2b05916b1f4503b29a
4
+ data.tar.gz: 94ddb535dd4ecdd9f310fb86ebf4e260201c473b
5
5
  SHA512:
6
- metadata.gz: c66f4ad13a3d8677b0f245d22c7438f831ee98e9ee1522157b95e1529e182ce747c520da6fdfe5b5cbceb19ab0bcd362c25eb738c9a257a7f1d7272d824c7cb4
7
- data.tar.gz: a92e7bf432ae3426bb28e3c159e7b2bdfa0b72c61800312623d7fe30e5928707fe67b0db4bc1d19e7700cd47a06a6889d846af89ced2f60ec41e75ebb7372156
6
+ metadata.gz: 465a8428eac7ebba4d34b6c8101cf9176e9fb9689b0f9ecf2649d8a2e54d1ca42ebfe1b4d6d880d2cc114f6065efa6d1066667f95644ce03cd9a1cd53a526d62
7
+ data.tar.gz: 4066cc0a59732f31a45a716eac0ae595fd4b8f5ff73cf0722e38f84e4a966c51c8fee1516aca7e953bd0cb2f7af57882e212eee212d6e05314c62a06b62a6b1f
data/CHANGELOG.rst CHANGED
@@ -1,3 +1,13 @@
1
+ v0.2.2
2
+ ------
3
+
4
+ Changes
5
+ ~~~~~~~
6
+ - ``Puppetfiler::Puppetfile#updates`` uses the ``concurrent-ruby`` gem,
7
+ shortening the execution time immensely.
8
+ - ``Puppetfiler::Metadata#updates`` has been added and is also exposed
9
+ via ``puppetfiler check``.
10
+
1
11
  v0.2.1
2
12
  ------
3
13
  Cosmetical release
data/README.rst CHANGED
@@ -38,6 +38,10 @@ named ``metadata.json``.
38
38
  check
39
39
  -----
40
40
  Check puppet forge for newer versions of used forge modules.
41
+ For Puppetfiles the currently set version on newest on the forge are
42
+ compared.
43
+ For metadata.json puppetfiler checks that the newest version on the
44
+ forge is covered by the range constraint.
41
45
 
42
46
  .. code:: sh
43
47
 
data/TODO CHANGED
@@ -14,3 +14,5 @@
14
14
  However using arubas in-process execution it is possible to use webmock to mock these calls.
15
15
 
16
16
  It is quite ugly though: https://github.com/erikhuda/thor/wiki/Integrating-with-Aruba-In-Process-Runs
17
+
18
+ * Check if the version and dependency settings are valid in context
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "example-module",
3
+ "version": "0.1.0",
4
+ "author": "Some Author",
5
+ "summary": "Examplary summary",
6
+ "license": "MIT",
7
+ "source": "https://github.com/ntnn/puppetfiler",
8
+ "project_page": "https://github.com/ntnn/puppetfiler",
9
+ "issues_url": "https://github.com/ntnn/puppetfiler/issues",
10
+ "dependencies": [
11
+ {
12
+ "name": "puppetlabs/stdlib",
13
+ "version_requirement": ">= 4.13.0 < 4.14.0"
14
+ }
15
+ ]
16
+ }
data/lib/puppetfiler.rb CHANGED
@@ -34,13 +34,11 @@ module Puppetfiler
34
34
  when :puppetfile
35
35
  t = Puppetfiler::Puppetfile.new(target)
36
36
  when :metadata
37
- # TODO see below
38
- fail 'Checking metadata.json for version range updates is not implemented yet'
37
+ fail "File '#{target}' does not exist, aborting" if not File.exists?(target)
38
+ t = Puppetfiler::Metadata.new(File.new(target))
39
39
  else fail "Unkown type: #{type}"
40
40
  end
41
41
 
42
- # TODO the updates should be collected asynchronously to
43
- # speed up the process
44
42
  return t.updates
45
43
  end
46
44
 
@@ -2,6 +2,7 @@ require 'thor'
2
2
  require 'yaml'
3
3
  require 'puppetfiler/puppetfile'
4
4
  require 'puppetfiler/version'
5
+ require 'semantic_puppet'
5
6
 
6
7
  module SemanticPuppet
7
8
  class Version < Numeric
@@ -11,6 +12,14 @@ module SemanticPuppet
11
12
  end
12
13
  end
13
14
 
15
+ module SemanticPuppet
16
+ class VersionRange < Range
17
+ def length
18
+ to_s.length
19
+ end
20
+ end
21
+ end
22
+
14
23
  module Puppetfiler
15
24
  class CLI < Thor
16
25
  class_option :puppetfile, {
@@ -20,9 +20,38 @@ module Puppetfiler
20
20
  @dependencies.eql?(other.dependencies)
21
21
  end
22
22
 
23
+ def updates
24
+ require 'concurrent'
25
+
26
+ updates = {}
27
+
28
+ deps = @dependencies.map do |name, dep|
29
+ Concurrent::Future.execute do
30
+ latest = dep.latest
31
+
32
+ if not dep.range.cover?(latest)
33
+ updates[name] = {
34
+ :range => dep.range,
35
+ :newest => latest,
36
+ }
37
+ end
38
+ end
39
+ end
40
+
41
+ deps.each { |f| f.wait_or_cancel(300) }
42
+
43
+ return updates
44
+ end
45
+
23
46
  private
24
47
  def parse(target)
25
- json = JSON.load(target)
48
+ begin
49
+ json = JSON.load(target)
50
+ rescue JSON::ParserError => error
51
+ STDERR.puts 'Passed metadata is invalid:'
52
+ STDERR.puts error
53
+ return nil
54
+ end
26
55
 
27
56
  if not json.has_key?('dependencies') or json['dependencies'].eql?([])
28
57
  warn 'No dependencies found'
@@ -16,7 +16,7 @@ module Puppetfiler
16
16
  @name = args[:name]
17
17
  @slug = @name.gsub('/', '-')
18
18
 
19
- @forge = PuppetForge::Module.find(@slug)
19
+ @forge = nil
20
20
 
21
21
  @range = nil
22
22
  %i{range version_requirement}.each do |v|
@@ -36,6 +36,10 @@ module Puppetfiler
36
36
  @version = latest_valid if not @version
37
37
  end
38
38
 
39
+ def forge
40
+ return @forge ||= PuppetForge::Module.find(@slug)
41
+ end
42
+
39
43
  def eql?(other)
40
44
  return false if not @name.eql?(other.name)
41
45
 
@@ -58,7 +62,7 @@ module Puppetfiler
58
62
  end
59
63
 
60
64
  def latest
61
- return SemanticPuppet::Version.parse(@forge.current_release.version)
65
+ return SemanticPuppet::Version.parse(forge.current_release.version)
62
66
  end
63
67
 
64
68
  def valid_versions
@@ -66,7 +70,7 @@ module Puppetfiler
66
70
 
67
71
  versions = []
68
72
 
69
- @forge.releases.each do |release|
73
+ forge.releases.each do |release|
70
74
  version = SemanticPuppet::Version.parse(release.version)
71
75
  versions << version if @range.cover?(version)
72
76
  end
@@ -33,20 +33,28 @@ module Puppetfiler
33
33
  end
34
34
 
35
35
  def updates
36
- updates = {}
36
+ require 'concurrent'
37
37
 
38
- @modules.each do |name, mod|
39
- current = mod.version
40
- newest = mod.latest
38
+ updates = {}
41
39
 
42
- if not newest.eql?(current)
43
- updates[name] = {
44
- :current => current,
45
- :newest => newest,
46
- }
40
+ mods = @modules.map do |name, mod|
41
+ Concurrent::Future.execute do
42
+ current = mod.version
43
+ newest = mod.latest
44
+
45
+ if not newest.eql?(current)
46
+ updates[name] = {
47
+ :current => current,
48
+ :newest => newest,
49
+ }
50
+ end
47
51
  end
48
52
  end
49
53
 
54
+ # A timeout of 300 seconds per job should be plenty
55
+ # TODO configurable timeout
56
+ mods.each { |f| f.wait_or_cancel(300) }
57
+
50
58
  return updates
51
59
  end
52
60
 
@@ -1,3 +1,3 @@
1
1
  module Puppetfiler
2
- VERSION = '0.2.1'
2
+ VERSION = '0.2.2'
3
3
  end
data/puppetfiler.gemspec CHANGED
@@ -37,4 +37,5 @@ Gem::Specification.new do |spec|
37
37
  spec.add_dependency 'semantic_puppet', '~> 0.1.4'
38
38
  spec.add_dependency 'thor', '~> 0.19.4'
39
39
  spec.add_dependency 'hashie', '~> 3.5'
40
+ spec.add_dependency 'concurrent-ruby', '~> 1.0'
40
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppetfiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nelo-T. Wallus
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-13 00:00:00.000000000 Z
11
+ date: 2017-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -192,6 +192,20 @@ dependencies:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
194
  version: '3.5'
195
+ - !ruby/object:Gem::Dependency
196
+ name: concurrent-ruby
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '1.0'
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '1.0'
195
209
  description:
196
210
  email:
197
211
  - nelo@wallus.de
@@ -215,6 +229,7 @@ files:
215
229
  - data/empty_puppetfile.rb
216
230
  - data/metadata_emptydeps.json
217
231
  - data/metadata_nodeps.json
232
+ - data/metadata_outdated.json
218
233
  - data/simple_metadata.json
219
234
  - data/simple_puppetfile.rb
220
235
  - exe/puppetfiler