puppetfiler 0.2.1 → 0.2.2

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 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