metadata_json_deps 0.1.0 → 0.4.0

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
  SHA256:
3
- metadata.gz: 0a7a5bc8b50fa0665c13ff641af0c71eb6a7b8d968712b0f5e1ded9aa97e09d4
4
- data.tar.gz: 240b09bfb0f276ad80aade880427ebd242adb17a3dc7f49d185c01b513af9f33
3
+ metadata.gz: 376a5a0f5181d0d6095b02fd5eb968c8acc887c8f85c1127c80d3fd622ed4a14
4
+ data.tar.gz: 2a8978e1c706f98b80a82c04e9bc4cb5721d72026ab7089b044d0981e1db16c7
5
5
  SHA512:
6
- metadata.gz: 62f244b8ad184507bfe491620ce0441fe94f3cd1df6dd152fa3f3deca5d9ad32c2eb069d6c0b002cd79dc2fd0379776a285a212c8bb482773350f938dcab313c
7
- data.tar.gz: 0acedb635823a5e5b7c25e29a2c192e237af76739fa6afb7688b593baeba0d89f253b4dd6c5f06992ed609cc9cdd98c2ef396d7681437b9fcdfbe98c740f48ee
6
+ metadata.gz: d7a981df5b61c4ff15f7f016ce4f90ad5045f47c3556db8d686c6cd5ada2eff218daa240507f73c071f249c255bae1c39073ba04a675bb4426158ca3f9b56b68
7
+ data.tar.gz: 28fabc4c9c1cfe758875314d137117a7c7b437d39f15e94b160469f2a7fade2a3a59eba9eaa39e4d5f71e054d9aa1df9b760f3c1a7a63db860fbb27d9c0dcdb4
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2017-2021 Ewoud Kohl van Wijngaarden
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -4,18 +4,18 @@ The metadata-json-deps tool validates dependencies in `metadata.json` files in P
4
4
 
5
5
  ## Compatibility
6
6
 
7
- metadata-json-deps is compatible with Ruby versions 2.0.0 and newer.
7
+ metadata-json-deps is compatible with Ruby versions 2.4.0 and newer.
8
8
 
9
9
  ## Installation
10
10
 
11
11
  via `gem` command:
12
12
  ``` shell
13
- gem install metadata-json-deps
13
+ gem install metadata_json_deps
14
14
  ```
15
15
 
16
16
  via Gemfile:
17
17
  ``` ruby
18
- gem 'metadata-json-deps'
18
+ gem 'metadata_json_deps'
19
19
  ```
20
20
 
21
21
  ## Usage
@@ -40,8 +40,10 @@ You can also integrate `metadata-json-deps` checks into your tests using a Rake
40
40
 
41
41
  ```ruby
42
42
  require 'metadata_json_deps'
43
+
44
+ desc 'Run metadata-json-deps'
43
45
  task :metadata_deps do
44
46
  files = FileList['modules/*/metadata.json']
45
- PuppetMetadataChecker::Runner.run(files)
47
+ MetadataJsonDeps::run(files)
46
48
  end
47
49
  ```
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'metadata_json_deps'
5
+
6
+ parser = OptionParser.new do |opts|
7
+ opts.banner = "Usage: #{opts.program_name} metadata"
8
+ end
9
+
10
+ parser.parse!
11
+ if ARGV.empty?
12
+ puts parser.help
13
+ exit 1
14
+ end
15
+
16
+ MetadataJsonDeps.build_fixtures(ARGV.first)
@@ -5,9 +5,7 @@ require 'metadata_json_deps'
5
5
 
6
6
  options = {}
7
7
  OptionParser.new do |opts|
8
- opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
9
- options[:verbose] = v
10
- end
11
- end.parse!
8
+ opts.on("-v", "--[no-]verbose", "Run verbosely")
9
+ end.parse!(into: options)
12
10
 
13
- MetadataJsonDeps::Runner.run(ARGV, options[:verbose])
11
+ MetadataJsonDeps.run(ARGV, options[:verbose])
@@ -1,5 +1,71 @@
1
+ require 'puppet_forge'
2
+ require 'puppet_metadata'
3
+
1
4
  module MetadataJsonDeps
2
- autoload :ForgeVersions, 'metadata_json_deps/forge_versions'
3
- autoload :MetadataChecker, 'metadata_json_deps/metadata_checker'
4
- autoload :Runner, 'metadata_json_deps/runner'
5
+ class ForgeVersions
6
+ def initialize(cache = {})
7
+ @cache = cache
8
+ end
9
+
10
+ def get_module(name)
11
+ name = PuppetForge::V3.normalize_name(name)
12
+ @cache[name] ||= PuppetForge::Module.find(name)
13
+ end
14
+ end
15
+
16
+ def self.build_fixtures(filename)
17
+ require 'yaml'
18
+
19
+ result = {}
20
+
21
+ dependencies = PuppetMetadata.read(filename).dependencies
22
+ if dependencies.any?
23
+ forge = ForgeVersions.new
24
+
25
+ repositories = {}
26
+ result['fixtures'] = {'repositories' => repositories}
27
+
28
+ dependencies.each do |dependency, _constraint|
29
+ mod = forge.get_module(dependency)
30
+ # TODO: The forge should expose the source URL directly
31
+ repositories[mod.name] = mod.current_release.metadata[:source]
32
+ end
33
+ end
34
+
35
+ puts result.to_yaml
36
+ end
37
+
38
+ def self.run(filenames, verbose = false)
39
+ forge = ForgeVersions.new
40
+
41
+ filenames.each do |filename|
42
+ puts "Checking #{filename}"
43
+ metadata = PuppetMetadata.read(filename)
44
+
45
+ metadata.dependencies.map do |dependency, constraint|
46
+ mod = forge.get_module(dependency)
47
+
48
+ if mod.deprecated_at
49
+ if mod.superseded_by
50
+ puts " #{dependency} was superseded by #{mod.superseded_by[:slug]}"
51
+ elsif mod.deprecated_for
52
+ puts " #{dependency} was deprecated: #{mod.deprecated_for}"
53
+ else
54
+ puts " #{dependency} was deprecated"
55
+ end
56
+ else
57
+ current = mod.current_release.version
58
+
59
+ if metadata.satisfies_dependency?(dependency, current)
60
+ if verbose
61
+ puts " #{dependency} (#{constraint}) matches #{current}"
62
+ end
63
+ else
64
+ puts " #{dependency} (#{constraint}) doesn't match #{current}"
65
+ end
66
+ end
67
+ end
68
+ end
69
+ rescue Interrupt
70
+ end
5
71
  end
metadata CHANGED
@@ -1,63 +1,103 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metadata_json_deps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ewoud Kohl van Wijngaarden
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-27 00:00:00.000000000 Z
11
+ date: 2022-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: puppet_forge
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.2'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '4'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '2.2'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '4'
27
33
  - !ruby/object:Gem::Dependency
28
- name: semantic_puppet
34
+ name: puppet_metadata
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - "~>"
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 0.3.0
40
+ - - "<"
32
41
  - !ruby/object:Gem::Version
33
- version: '1.0'
42
+ version: '2'
34
43
  type: :runtime
35
44
  prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 0.3.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '2'
53
+ - !ruby/object:Gem::Dependency
54
+ name: rspec
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '3.0'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '3.0'
67
+ - !ruby/object:Gem::Dependency
68
+ name: rake
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '13.0'
74
+ type: :development
75
+ prerelease: false
36
76
  version_requirements: !ruby/object:Gem::Requirement
37
77
  requirements:
38
78
  - - "~>"
39
79
  - !ruby/object:Gem::Version
40
- version: '1.0'
80
+ version: '13.0'
41
81
  description: Verify all your dependencies allow the latest versions on Puppet Forge
42
82
  email: ewoud+rubygems@kohlvanwijngaarden.nl
43
83
  executables:
84
+ - generate-fixtures-yaml
44
85
  - metadata-json-deps
45
86
  extensions: []
46
87
  extra_rdoc_files:
47
88
  - README.md
48
89
  files:
90
+ - LICENSE
49
91
  - README.md
92
+ - bin/generate-fixtures-yaml
50
93
  - bin/metadata-json-deps
51
94
  - lib/metadata_json_deps.rb
52
- - lib/metadata_json_deps/forge_versions.rb
53
- - lib/metadata_json_deps/metadata_checker.rb
54
- - lib/metadata_json_deps/runner.rb
55
95
  homepage: https://github.com/ekohl/metadata_json_deps
56
96
  licenses:
57
97
  - MIT
58
98
  metadata:
59
99
  source_code_uri: https://github.com/ekohl/metadata_json_deps
60
- post_install_message:
100
+ post_install_message:
61
101
  rdoc_options: []
62
102
  require_paths:
63
103
  - lib
@@ -65,16 +105,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
65
105
  requirements:
66
106
  - - ">="
67
107
  - !ruby/object:Gem::Version
68
- version: 2.0.0
108
+ version: 2.4.0
69
109
  required_rubygems_version: !ruby/object:Gem::Requirement
70
110
  requirements:
71
111
  - - ">="
72
112
  - !ruby/object:Gem::Version
73
113
  version: '0'
74
114
  requirements: []
75
- rubyforge_project:
76
- rubygems_version: 2.7.6
77
- signing_key:
115
+ rubygems_version: 3.2.22
116
+ signing_key:
78
117
  specification_version: 4
79
118
  summary: Check your Puppet metadata dependencies
80
119
  test_files: []
@@ -1,31 +0,0 @@
1
- require 'puppet_forge'
2
- require 'semantic_puppet'
3
-
4
- module MetadataJsonDeps
5
- class ForgeVersions
6
- def initialize(cache = {})
7
- @cache = cache
8
- end
9
-
10
- def get_current_version(name)
11
- name = name.sub('/', '-')
12
- version = @cache[name]
13
-
14
- unless version
15
- @cache[name] = version = get_version(get_mod(name))
16
- end
17
-
18
- version
19
- end
20
-
21
- private
22
-
23
- def get_mod(name)
24
- PuppetForge::Module.find(name)
25
- end
26
-
27
- def get_version(mod)
28
- SemanticPuppet::Version.parse(mod.current_release.version)
29
- end
30
- end
31
- end
@@ -1,26 +0,0 @@
1
- require 'semantic_puppet'
2
-
3
- module MetadataJsonDeps
4
- class MetadataChecker
5
- def initialize(metadata, forge)
6
- @metadata = metadata
7
- @forge = forge
8
- end
9
-
10
- def module_dependencies
11
- return [] unless @metadata['dependencies']
12
-
13
- @metadata['dependencies'].map do |dep|
14
- constraint = dep['version_requirement'] || '>= 0'
15
- [dep['name'], SemanticPuppet::VersionRange.parse(constraint)]
16
- end
17
- end
18
-
19
- def dependencies
20
- module_dependencies.map do |dependency, constraint|
21
- current = @forge.get_current_version(dependency)
22
- [dependency, constraint, current, constraint.include?(current)]
23
- end
24
- end
25
- end
26
- end
@@ -1,32 +0,0 @@
1
- require 'json'
2
-
3
- module MetadataJsonDeps
4
- class Runner
5
- def initialize(filenames, verbose)
6
- @filenames = filenames
7
- @verbose = verbose
8
- @forge = MetadataJsonDeps::ForgeVersions.new
9
- end
10
-
11
- def run
12
- @filenames.each do |filename|
13
- puts "Checking #{filename}"
14
- checker = MetadataJsonDeps::MetadataChecker.new(JSON.parse(File.read(filename)), @forge)
15
- checker.dependencies.each do |dependency, constraint, current, satisfied|
16
- if satisfied
17
- if @verbose
18
- puts " #{dependency} (#{constraint}) matches #{current}"
19
- end
20
- else
21
- puts " #{dependency} (#{constraint}) doesn't match #{current}"
22
- end
23
- end
24
- end
25
- rescue Interrupt
26
- end
27
-
28
- def self.run(filenames, verbose = false)
29
- self.new(filenames, verbose).run
30
- end
31
- end
32
- end