spandx 0.15.1 → 0.18.1

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
  SHA256:
3
- metadata.gz: 120ae97e54f2a138b7d1053d9e71c8b702174cf70fbac0fc861b8971f4aec0bd
4
- data.tar.gz: c89d3ffe76d00d0a6fb18e91b5cdd3ef1487a826047213dd264be3d59796d188
3
+ metadata.gz: bb37d5c085e6c24f08f563a34abe6395448e63a0f8a7571cd16ee7353fcf0e86
4
+ data.tar.gz: 8cb0c804cf63410200d1a8d7b28e7ba7ec1cf57e180d1e66e63664f3daf2e4b8
5
5
  SHA512:
6
- metadata.gz: ab85f497f8ce4fe46a03b31d25ffa07816975dcbcb91a1438cf09bcd38f857ed652a1003569e2a8cbb091c5fb5b5b88a52043f4a61eec71337eff58107c75737
7
- data.tar.gz: e73a923228358065c7d67bdfa8aaea328657269758f2c2d664621b5e6dd6da449b1d585655ae351e0edd99dbd155ef2efa24f0e37c95cd24c75f85da517503af
6
+ metadata.gz: '0815ee42c9a013e2d4979d662166ca44d898d513b64250635ab36e8c65ab55d2eb1d7683b7cd1dcf4c2d8bc365d55433aba88713b3d4e2613c47dc62a7b53ba7'
7
+ data.tar.gz: 1dd8fa583d48f9007162b2eda18e07b0e58e906791c06491dd1d43dece6304c6831b279a4840761e8a370c6aaf6d7304e16eb2baa2a9f80b627bdffbf0ae2632
data/CHANGELOG.md CHANGED
@@ -1,4 +1,4 @@
1
- Version 0.15.1
1
+ Version 0.18.1
2
2
 
3
3
  # Changelog
4
4
 
@@ -9,6 +9,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.18.1] - 2021-06-02
13
+ ### Fixed
14
+ - Parse `.terraform.lock.hcl` files with multiple providers.
15
+
16
+ ## [0.18.0] - 2021-05-10
17
+ ### Added
18
+ - Add support for parsing `.terraform.lock.hcl` files.
19
+
20
+ ## [0.17.0] - 2020-12-28
21
+ ### Added
22
+ - Allow indexing gems from index.rubygems.org.
23
+
24
+ ## [0.16.1] - 2020-11-19
25
+ ### Fixed
26
+ - Start spinner for table printer only
27
+
28
+ ## [0.16.0] - 2020-11-19
29
+ ### Changed
30
+ - Pull smaller license cache.
31
+ - Print index files after building them.
32
+
12
33
  ## [0.15.1] - 2020-11-18
13
34
  ### Fixed
14
35
  - Rebuild index after pulling latest cache.
@@ -211,7 +232,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
211
232
  ### Added
212
233
  - Provide ruby API to the latest SPDX catalogue.
213
234
 
214
- [Unreleased]: https://github.com/spandx/spandx/compare/v0.15.1...HEAD
235
+ [Unreleased]: https://github.com/spandx/spandx/compare/v0.18.1...HEAD
236
+ [0.18.1]: https://github.com/spandx/spandx/compare/v0.18.0...v0.18.1
237
+ [0.18.0]: https://github.com/spandx/spandx/compare/v0.17.0...v0.18.0
238
+ [0.17.0]: https://github.com/spandx/spandx/compare/v0.16.1...v0.17.0
239
+ [0.16.1]: https://github.com/spandx/spandx/compare/v0.16.0...v0.16.1
240
+ [0.16.0]: https://github.com/spandx/spandx/compare/v0.15.1...v0.16.0
215
241
  [0.15.1]: https://github.com/spandx/spandx/compare/v0.15.0...v0.15.1
216
242
  [0.15.0]: https://github.com/spandx/spandx/compare/v0.14.0...v0.15.0
217
243
  [0.14.0]: https://github.com/spandx/spandx/compare/v0.13.5...v0.14.0
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # Spandx ![badge](https://github.com/spandx/spandx/workflows/ci/badge.svg)
6
6
 
7
- A ruby API for interacting with the https://spdx.org software license catalogue.
7
+ A Ruby API for interacting with the https://spdx.org software license catalogue.
8
8
  This gem includes a command line interface to scan a software project for the
9
9
  software licenses that are associated with each dependency in the project.
10
10
  `spandx` leverages an offline cache of software licenses for known dependencies.
@@ -104,7 +104,7 @@ end
104
104
 
105
105
  ## Development
106
106
 
107
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/cibuild` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
107
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
108
108
 
109
109
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
110
110
 
data/lib/spandx.rb CHANGED
@@ -11,6 +11,7 @@ require 'nokogiri'
11
11
  require 'oj'
12
12
  require 'parslet'
13
13
  require 'pathname'
14
+ require 'sorted_set'
14
15
  require 'yaml'
15
16
  require 'zeitwerk'
16
17
  require 'spandx/spandx'
@@ -45,7 +46,7 @@ module Spandx
45
46
  @git ||= {
46
47
  cache: ::Spandx::Core::Git.new(url: 'https://github.com/spandx/cache.git'),
47
48
  rubygems: ::Spandx::Core::Git.new(url: 'https://github.com/spandx/rubygems-cache.git'),
48
- spdx: ::Spandx::Core::Git.new(url: 'https://github.com/spdx/license-list-data.git'),
49
+ spdx: ::Spandx::Core::Git.new(url: 'https://github.com/spdx/license-list-data.git', default_branch: 'master'),
49
50
  }
50
51
  end
51
52
  end
@@ -5,10 +5,11 @@ module Spandx
5
5
  module Commands
6
6
  class Build
7
7
  INDEXES = {
8
+ dotnet: Spandx::Dotnet::Index,
8
9
  maven: Spandx::Java::Index,
9
10
  nuget: Spandx::Dotnet::Index,
10
- dotnet: Spandx::Dotnet::Index,
11
11
  pypi: Spandx::Python::Index,
12
+ rubygems: Spandx::Ruby::Index,
12
13
  }.freeze
13
14
 
14
15
  def initialize(options)
@@ -4,13 +4,20 @@ module Spandx
4
4
  module Cli
5
5
  module Commands
6
6
  class Pull
7
+ attr_reader :cache_dir, :rubygems_cache_dir
8
+
7
9
  def initialize(options)
8
10
  @options = options
11
+ @cache_dir = Spandx.git[:cache].root.join('.index')
12
+ @rubygems_cache_dir = Spandx.git[:rubygems].root.join('.index')
9
13
  end
10
14
 
11
15
  def execute(output: $stderr)
12
16
  sync(output)
13
17
  build(output, ::Spandx::Core::Dependency::PACKAGE_MANAGERS.values.uniq)
18
+ index_files_in(cache_dir, rubygems_cache_dir).each do |item|
19
+ output.puts item.to_s.gsub(Dir.home, '~')
20
+ end
14
21
  output.puts 'OK'
15
22
  end
16
23
 
@@ -25,14 +32,11 @@ module Spandx
25
32
  end
26
33
 
27
34
  def build(output, sources)
28
- index_path = Spandx.git[:cache].root.join('.index')
29
-
30
- with_spinner('Rebuilding index...', output: output) do
35
+ with_spinner('Building index...', output: output) do
31
36
  sources.each do |source|
32
- Spandx::Core::Cache
33
- .new(source, root: index_path)
34
- .rebuild_index
37
+ Spandx::Core::Cache.new(source, root: cache_dir).rebuild_index
35
38
  end
39
+ Spandx::Core::Cache.new(:rubygems, root: rubygems_cache_dir).rebuild_index
36
40
  end
37
41
  end
38
42
 
@@ -41,9 +45,15 @@ module Spandx
41
45
  spinner.auto_spin
42
46
  yield
43
47
  spinner.success('(done)')
48
+ rescue StandardError => error
49
+ spinner.error("(#{error.message})")
44
50
  ensure
45
51
  spinner.stop
46
52
  end
53
+
54
+ def index_files_in(*dirs)
55
+ dirs.map { |x| x.glob('**/*.idx') }.flatten.sort
56
+ end
47
57
  end
48
58
  end
49
59
  end
@@ -12,15 +12,11 @@ module Spandx
12
12
  method_option :pull, aliases: '-p', type: :boolean, desc: 'Pull the latest cache before the scan', default: false
13
13
  method_option :require, aliases: '-r', type: :string, desc: 'Causes spandx to load the library using require.', default: nil
14
14
  def scan(lockfile = Pathname.pwd)
15
- if options[:help]
16
- invoke :help, ['scan']
17
- else
18
- Oj.default_options = { mode: :strict }
19
- Spandx.airgap = options[:airgap]
20
- Spandx.logger = Logger.new(options[:logfile])
21
- pull if options[:pull]
22
- Spandx::Cli::Commands::Scan.new(lockfile, options).execute
23
- end
15
+ return invoke :help, ['scan'] if options[:help]
16
+
17
+ prepare(options)
18
+ pull if options[:pull]
19
+ Spandx::Cli::Commands::Scan.new(lockfile, options).execute
24
20
  end
25
21
 
26
22
  desc 'pull', 'Pull the latest offline cache'
@@ -52,6 +48,14 @@ module Spandx
52
48
  puts "v#{Spandx::VERSION}"
53
49
  end
54
50
  map %w[--version -v] => :version
51
+
52
+ private
53
+
54
+ def prepare(options)
55
+ Oj.default_options = { mode: :strict }
56
+ Spandx.airgap = options[:airgap]
57
+ Spandx.logger = Logger.new(options[:logfile])
58
+ end
55
59
  end
56
60
  end
57
61
  end
@@ -8,7 +8,6 @@ module Spandx
8
8
 
9
9
  def initialize(output: $stderr)
10
10
  @spinner = TTY::Spinner.new('[:spinner] Scanning...', output: output, clear: true, format: :dots)
11
- @spinner.auto_spin
12
11
  end
13
12
 
14
13
  def match?(format)
@@ -16,6 +15,7 @@ module Spandx
16
15
  end
17
16
 
18
17
  def print_header(_io)
18
+ @spinner.auto_spin
19
19
  @dependencies = SortedSet.new
20
20
  end
21
21
 
@@ -56,6 +56,10 @@ module Spandx
56
56
  @index ||= IndexFile.new(self)
57
57
  end
58
58
 
59
+ def to_s
60
+ absolute_path.to_s
61
+ end
62
+
59
63
  private
60
64
 
61
65
  def to_csv(array)
@@ -3,10 +3,11 @@
3
3
  module Spandx
4
4
  module Core
5
5
  class Git
6
- attr_reader :root, :url
6
+ attr_reader :root, :url, :default_branch
7
7
 
8
- def initialize(url:)
8
+ def initialize(url:, default_branch: 'main')
9
9
  @url = url
10
+ @default_branch = default_branch
10
11
  @root = path_for(url)
11
12
  end
12
13
 
@@ -31,14 +32,15 @@ module Spandx
31
32
  root.join('.git').directory?
32
33
  end
33
34
 
34
- def clone!
35
+ def clone!(branch: default_branch)
35
36
  system('rm', '-rf', root.to_s) if root.exist?
36
- system('git', 'clone', '--quiet', '--depth=1', '--single-branch', '--branch', 'master', url, root.to_s)
37
+ system('git', 'clone', '--quiet', '--depth=1', '--single-branch', '--branch', branch, url, root.to_s)
37
38
  end
38
39
 
39
- def pull!
40
+ def pull!(remote: 'origin', branch: default_branch)
40
41
  Dir.chdir(root) do
41
- system('git', 'pull', '--no-rebase', '--quiet', 'origin', 'master')
42
+ system('git', 'fetch', '--quiet', '--depth=1', '--prune', '--no-tags', remote)
43
+ system('git', 'checkout', '--quiet', branch)
42
44
  end
43
45
  end
44
46
  end
@@ -8,8 +8,21 @@ module Spandx
8
8
  @http = http
9
9
  end
10
10
 
11
+ def each
12
+ response = http.get('https://index.rubygems.org/versions')
13
+ return unless http.ok?(response)
14
+
15
+ parse_each_from(StringIO.new(response.body)) do |item|
16
+ yield item
17
+ end
18
+ end
19
+
11
20
  def licenses_for(dependency)
12
- details_on(dependency.name, dependency.version)['licenses'] || []
21
+ licenses(dependency.name, dependency.version)
22
+ end
23
+
24
+ def licenses(name, version)
25
+ details_on(name, version)['licenses'] || []
13
26
  end
14
27
 
15
28
  def matches?(dependency)
@@ -20,6 +33,17 @@ module Spandx
20
33
 
21
34
  attr_reader :http
22
35
 
36
+ def parse_each_from(io)
37
+ _created_at = io.readline
38
+ _triple_dash = io.readline
39
+ until io.eof?
40
+ name, versions, _digest = io.readline.split(' ')
41
+ versions.split(',').each do |version|
42
+ yield({ name: name, version: version })
43
+ end
44
+ end
45
+ end
46
+
23
47
  def details_on(name, version)
24
48
  url = "https://rubygems.org/api/v2/rubygems/#{name}/versions/#{version}.json"
25
49
  response = http.get(url, default: {})
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spandx
4
+ module Ruby
5
+ class Index
6
+ include Enumerable
7
+
8
+ attr_reader :directory, :name, :rubygems
9
+
10
+ def initialize(directory:)
11
+ @directory = directory
12
+ @name = 'rubygems'
13
+ @cache = ::Spandx::Core::Cache.new(@name, root: directory)
14
+ @rubygems = ::Spandx::Ruby::Gateway.new
15
+ end
16
+
17
+ def update!(*)
18
+ queue = Queue.new
19
+ [fetch(queue), save(queue)].each(&:join)
20
+ cache.rebuild_index
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :cache
26
+
27
+ def fetch(queue)
28
+ Thread.new do
29
+ rubygems.each do |item|
30
+ queue.enq(
31
+ item.merge(
32
+ licenses: rubygems.licenses(item[:name], item[:version])
33
+ )
34
+ )
35
+ end
36
+ queue.enq(:stop)
37
+ end
38
+ end
39
+
40
+ def save(queue)
41
+ Thread.new do
42
+ loop do
43
+ item = queue.deq
44
+ break if item == :stop
45
+
46
+ cache.insert(item[:name], item[:version], item[:licenses])
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spandx
4
+ module Terraform
5
+ module Parsers
6
+ class Hcl < Parslet::Parser
7
+ rule(:alpha) { match['a-zA-Z'] }
8
+ rule(:assign) { str('=') }
9
+ rule(:colon) { str(':') }
10
+ rule(:comma) { str(',') }
11
+ rule(:comment) { (str('#') | str('//')) >> ((str("\n") >> str("\r").maybe).absent? >> any).repeat >> eol }
12
+ rule(:crlf) { match('[\r\n]') }
13
+ rule(:digit) { match('\d') }
14
+ rule(:dot) { str('.') }
15
+ rule(:eol) { whitespace? >> crlf.repeat }
16
+ rule(:greater_than_or_equal_to) { str('>=') }
17
+ rule(:hyphen) { str('-') }
18
+ rule(:lbracket) { str('[') }
19
+ rule(:lcurly) { str('{') }
20
+ rule(:major) { number }
21
+ rule(:major_minor) { (number >> dot >> number) }
22
+ rule(:major_minor_patch) { number >> dot >> number >> dot >> number }
23
+ rule(:multiline_comment) { str('/*') >> (str('*/').absent? >> any).repeat >> str('*/') }
24
+ rule(:number) { digit.repeat }
25
+ rule(:plus) { str('+') }
26
+ rule(:pre_release) { hyphen >> (alpha | digit).repeat }
27
+ rule(:pre_release?) { pre_release.maybe }
28
+ rule(:quote) { str('"') }
29
+ rule(:rbracket) { str(']') }
30
+ rule(:rcurly) { str('}') }
31
+ rule(:slash) { str('/') }
32
+ rule(:space) { match('\s') }
33
+ rule(:tilda_wacka) { str('~>') }
34
+ rule(:version) { number >> dot >> number >> dot >> number >> pre_release? }
35
+ rule(:whitespace) { (multiline_comment | comment | space).repeat }
36
+ rule(:whitespace?) { whitespace.maybe }
37
+
38
+ rule(:pessimistic_version_constraint) do
39
+ tilda_wacka >> whitespace >> (
40
+ major_minor_patch |
41
+ major_minor |
42
+ major
43
+ )
44
+ end
45
+
46
+ rule(:greater_than_or_equal_to_version) do
47
+ greater_than_or_equal_to >> whitespace >> (
48
+ major_minor_patch |
49
+ major_minor |
50
+ major
51
+ )
52
+ end
53
+
54
+ rule(:version_constraint) do
55
+ pessimistic_version_constraint | greater_than_or_equal_to_version
56
+ end
57
+
58
+ rule :version_assignment do
59
+ str('version') >> whitespace >> assign >> whitespace >> quote >> version.as(:version) >> quote
60
+ end
61
+
62
+ rule :constraint_assignment do
63
+ str('constraints') >> whitespace >> assign >> whitespace >> quote >> version_constraint.as(:constraints) >> quote
64
+ end
65
+
66
+ rule :string do
67
+ quote >> (
68
+ digit | dot | alpha | str('~> ') | slash | colon | assign | plus
69
+ ).repeat(1).as(:value) >> quote
70
+ end
71
+
72
+ rule :array_item do
73
+ whitespace? >> string >> comma.maybe >> eol
74
+ end
75
+
76
+ rule :array do
77
+ lbracket >> eol >> array_item.repeat >> whitespace >> rbracket
78
+ end
79
+
80
+ rule :argument_value do
81
+ (array.as(:values) | string) >> eol
82
+ end
83
+
84
+ rule :argument do
85
+ whitespace >> alpha.repeat(1).as(:name) >> whitespace >> assign >> whitespace >> argument_value
86
+ end
87
+
88
+ rule :block_body do
89
+ lcurly >> crlf >> argument.repeat.as(:arguments) >> rcurly
90
+ end
91
+
92
+ rule :identifier do
93
+ whitespace >> quote >> (alpha | dot | slash).repeat(1).as(:name) >> quote >> whitespace
94
+ end
95
+
96
+ rule :block do
97
+ alpha.repeat(1).as(:type) >> identifier >> block_body
98
+ end
99
+
100
+ rule :blocks do
101
+ whitespace? >> (block >> eol.maybe).repeat(1).as(:blocks)
102
+ end
103
+
104
+ root(:blocks)
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spandx
4
+ module Terraform
5
+ module Parsers
6
+ class LockFile < ::Spandx::Core::Parser
7
+ def initialize
8
+ @parser = Spandx::Terraform::Parsers::Hcl.new
9
+ end
10
+
11
+ def match?(pathname)
12
+ basename = pathname.basename
13
+ basename.fnmatch?('.terraform.lock.hcl')
14
+ end
15
+
16
+ def parse(path)
17
+ tree = @parser.parse(path.read)
18
+ tree[:blocks].map do |block|
19
+ version_arg = version_arg_from(block)
20
+ ::Spandx::Core::Dependency.new(
21
+ name: block[:name].to_s,
22
+ version: version_arg[:value]&.to_s,
23
+ path: path
24
+ )
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def version_arg_from(block)
31
+ block[:arguments].find do |x|
32
+ x[:name] == 'version'
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spandx
4
- VERSION = '0.15.1'
4
+ VERSION = '0.18.1'
5
5
  end
data/spandx.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
 
19
19
  spec.metadata['homepage_uri'] = spec.homepage
20
20
  spec.metadata['source_code_uri'] = 'https://github.com/spandx/spandx'
21
- spec.metadata['changelog_uri'] = 'https://github.com/spandx/spandx/blob/master/CHANGELOG.md'
21
+ spec.metadata['changelog_uri'] = 'https://github.com/spandx/spandx/blob/main/CHANGELOG.md'
22
22
 
23
23
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
24
24
  Dir.glob('exe/*') +
@@ -38,6 +38,7 @@ Gem::Specification.new do |spec|
38
38
  spec.add_dependency 'nokogiri', '~> 1.10'
39
39
  spec.add_dependency 'oj', '~> 3.10'
40
40
  spec.add_dependency 'parslet', '~> 2.0'
41
+ spec.add_dependency 'sorted_set', '~> 1.0'
41
42
  spec.add_dependency 'terminal-table', '~> 1.8'
42
43
  spec.add_dependency 'thor'
43
44
  spec.add_dependency 'tty-spinner', '~> 0.9'
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spandx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.1
4
+ version: 0.18.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Can Eldem
8
8
  - mo khan
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-11-19 00:00:00.000000000 Z
12
+ date: 2021-06-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: addressable
@@ -101,6 +101,20 @@ dependencies:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: '2.0'
104
+ - !ruby/object:Gem::Dependency
105
+ name: sorted_set
106
+ requirement: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.0'
111
+ type: :runtime
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.0'
104
118
  - !ruby/object:Gem::Dependency
105
119
  name: terminal-table
106
120
  requirement: !ruby/object:Gem::Requirement
@@ -413,12 +427,15 @@ files:
413
427
  - lib/spandx/python/pypi.rb
414
428
  - lib/spandx/python/source.rb
415
429
  - lib/spandx/ruby/gateway.rb
430
+ - lib/spandx/ruby/index.rb
416
431
  - lib/spandx/ruby/parsers/gemfile_lock.rb
417
432
  - lib/spandx/spdx/catalogue.rb
418
433
  - lib/spandx/spdx/composite_license.rb
419
434
  - lib/spandx/spdx/expression.rb
420
435
  - lib/spandx/spdx/gateway.rb
421
436
  - lib/spandx/spdx/license.rb
437
+ - lib/spandx/terraform/parsers/hcl.rb
438
+ - lib/spandx/terraform/parsers/lock_file.rb
422
439
  - lib/spandx/version.rb
423
440
  - spandx.gemspec
424
441
  homepage: https://spandx.github.io/
@@ -427,8 +444,8 @@ licenses:
427
444
  metadata:
428
445
  homepage_uri: https://spandx.github.io/
429
446
  source_code_uri: https://github.com/spandx/spandx
430
- changelog_uri: https://github.com/spandx/spandx/blob/master/CHANGELOG.md
431
- post_install_message:
447
+ changelog_uri: https://github.com/spandx/spandx/blob/main/CHANGELOG.md
448
+ post_install_message:
432
449
  rdoc_options: []
433
450
  require_paths:
434
451
  - lib
@@ -443,8 +460,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
443
460
  - !ruby/object:Gem::Version
444
461
  version: '0'
445
462
  requirements: []
446
- rubygems_version: 3.1.4
447
- signing_key:
463
+ rubygems_version: 3.2.19
464
+ signing_key:
448
465
  specification_version: 4
449
466
  summary: A ruby interface to the SPDX catalogue.
450
467
  test_files: []