unwrappr 0.3.0
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 +7 -0
- data/.buildkite/pipeline.yml +38 -0
- data/.buildkite/steps/rspec.sh +9 -0
- data/.buildkite/steps/rubocop.sh +9 -0
- data/.gitignore +14 -0
- data/.rspec +3 -0
- data/.rubocop.yml +25 -0
- data/.travis.yml +5 -0
- data/CHANGELOG.md +9 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +8 -0
- data/Guardfile +16 -0
- data/LICENSE.txt +21 -0
- data/README.md +118 -0
- data/Rakefile +10 -0
- data/bin/console +11 -0
- data/bin/setup +8 -0
- data/exe/unwrappr +11 -0
- data/lib/unwrappr/bundler_command_runner.rb +25 -0
- data/lib/unwrappr/cli.rb +45 -0
- data/lib/unwrappr/gem_change.rb +54 -0
- data/lib/unwrappr/gem_version.rb +57 -0
- data/lib/unwrappr/git_command_runner.rb +81 -0
- data/lib/unwrappr/github/client.rb +75 -0
- data/lib/unwrappr/github/pr_sink.rb +28 -0
- data/lib/unwrappr/github/pr_source.rb +59 -0
- data/lib/unwrappr/lock_file_annotator.rb +65 -0
- data/lib/unwrappr/lock_file_comparator.rb +28 -0
- data/lib/unwrappr/lock_file_diff.rb +71 -0
- data/lib/unwrappr/octokit.rb +8 -0
- data/lib/unwrappr/researchers/composite.rb +21 -0
- data/lib/unwrappr/researchers/github_comparison.rb +43 -0
- data/lib/unwrappr/researchers/github_repo.rb +25 -0
- data/lib/unwrappr/researchers/ruby_gems_info.rb +17 -0
- data/lib/unwrappr/researchers/security_vulnerabilities.rb +50 -0
- data/lib/unwrappr/ruby_gems.rb +39 -0
- data/lib/unwrappr/spec_version_comparator.rb +19 -0
- data/lib/unwrappr/version.rb +5 -0
- data/lib/unwrappr/writers/composite.rb +21 -0
- data/lib/unwrappr/writers/github_commit_log.rb +72 -0
- data/lib/unwrappr/writers/project_links.rb +45 -0
- data/lib/unwrappr/writers/security_vulnerabilities.rb +109 -0
- data/lib/unwrappr/writers/title.rb +32 -0
- data/lib/unwrappr/writers/version_change.rb +58 -0
- data/lib/unwrappr.rb +32 -0
- data/unwrappr.gemspec +56 -0
- metadata +299 -0
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Unwrappr
|
4
|
+
module Writers
|
5
|
+
# Inform of the number of commits included in the change. Annotate several
|
6
|
+
# commits, and link to the Github compare page on which we can see all the
|
7
|
+
# commits and file changes.
|
8
|
+
#
|
9
|
+
# Implements the `annotation_writer` interface required by the
|
10
|
+
# LockFileAnnotator.
|
11
|
+
class GithubCommitLog
|
12
|
+
MAX_COMMITS = 10
|
13
|
+
MAX_MESSAGE = 60
|
14
|
+
SHA_LENGTH = 7
|
15
|
+
|
16
|
+
def self.write(gem_change, gem_change_info)
|
17
|
+
new(gem_change, gem_change_info).write
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize(gem_change, gem_change_info)
|
21
|
+
@gem_change = gem_change
|
22
|
+
@gem_change_info = gem_change_info
|
23
|
+
end
|
24
|
+
|
25
|
+
def write
|
26
|
+
return nil if comparison.nil?
|
27
|
+
|
28
|
+
collapsed_section('Commits', <<~MESSAGE)
|
29
|
+
A change of **#{comparison.total_commits}** commits. See the full changes on [the compare page](#{comparison.html_url}).
|
30
|
+
|
31
|
+
#{list_commits_introduction}
|
32
|
+
#{commit_messages.join("\n")}
|
33
|
+
MESSAGE
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def list_commits_introduction
|
39
|
+
if comparison.commits.length > MAX_COMMITS
|
40
|
+
"These are the first #{MAX_COMMITS} commits:"
|
41
|
+
else
|
42
|
+
'These are the individual commits:'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def commit_messages
|
47
|
+
comparison.commits.first(MAX_COMMITS).map(&method(:commit_message))
|
48
|
+
end
|
49
|
+
|
50
|
+
def commit_message(commit)
|
51
|
+
message = commit.commit.message.lines.first.strip
|
52
|
+
message = "#{message[0, MAX_MESSAGE]}…" if message.length > MAX_MESSAGE
|
53
|
+
"- (#{commit.sha[0, SHA_LENGTH]}) [#{message}](#{commit.html_url})"
|
54
|
+
end
|
55
|
+
|
56
|
+
def comparison
|
57
|
+
@gem_change_info[:github_comparison]
|
58
|
+
end
|
59
|
+
|
60
|
+
def collapsed_section(summary, body)
|
61
|
+
<<~MESSAGE
|
62
|
+
<details>
|
63
|
+
<summary>#{summary}</summary>
|
64
|
+
|
65
|
+
#{body}
|
66
|
+
|
67
|
+
</details>
|
68
|
+
MESSAGE
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Unwrappr
|
4
|
+
module Writers
|
5
|
+
# Add links to project documentation as obtained from Rubygems.org.
|
6
|
+
# Specifically, the changelog and sourcecode.
|
7
|
+
#
|
8
|
+
# Implements the `annotation_writer` interface required by the
|
9
|
+
# LockFileAnnotator.
|
10
|
+
class ProjectLinks
|
11
|
+
def self.write(gem_change, gem_change_info)
|
12
|
+
new(gem_change, gem_change_info).write
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(gem_change, gem_change_info)
|
16
|
+
@gem_change = gem_change
|
17
|
+
@gem_change_info = gem_change_info
|
18
|
+
end
|
19
|
+
|
20
|
+
def write
|
21
|
+
"[_#{change_log}, #{source_code}_]\n"
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def change_log
|
27
|
+
link_or_strikethrough('change-log',
|
28
|
+
@gem_change_info[:ruby_gems]&.changelog_uri)
|
29
|
+
end
|
30
|
+
|
31
|
+
def source_code
|
32
|
+
link_or_strikethrough('source-code',
|
33
|
+
@gem_change_info[:ruby_gems]&.source_code_uri)
|
34
|
+
end
|
35
|
+
|
36
|
+
def link_or_strikethrough(text, url)
|
37
|
+
if url.nil? || url.empty?
|
38
|
+
"~~#{text}~~"
|
39
|
+
else
|
40
|
+
"[#{text}](#{url})"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Unwrappr
|
4
|
+
module Writers
|
5
|
+
# Present reported security vulnerabilities in the gem change annotation.
|
6
|
+
#
|
7
|
+
# Implements the `annotation_writer` interface required by the
|
8
|
+
# LockFileAnnotator.
|
9
|
+
class SecurityVulnerabilities
|
10
|
+
def self.write(gem_change, gem_change_info)
|
11
|
+
new(gem_change, gem_change_info).write
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(gem_change, gem_change_info)
|
15
|
+
@gem_change = gem_change
|
16
|
+
@gem_change_info = gem_change_info
|
17
|
+
end
|
18
|
+
|
19
|
+
def write
|
20
|
+
return nil if vulnerabilities.nil?
|
21
|
+
|
22
|
+
<<~MESSAGE
|
23
|
+
#{patched_vulnerabilities}
|
24
|
+
#{introduced_vulnerabilities}
|
25
|
+
#{remaining_vulnerabilities}
|
26
|
+
MESSAGE
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def patched_vulnerabilities
|
32
|
+
list_vulnerabilites(
|
33
|
+
':tada: Patched vulnerabilities:',
|
34
|
+
vulnerabilities.patched
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
def introduced_vulnerabilities
|
39
|
+
list_vulnerabilites(
|
40
|
+
':rotating_light::exclamation: Introduced vulnerabilities:',
|
41
|
+
vulnerabilities.introduced
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
def remaining_vulnerabilities
|
46
|
+
list_vulnerabilites(
|
47
|
+
':rotating_light: Remaining vulnerabilities:',
|
48
|
+
vulnerabilities.remaining
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
def list_vulnerabilites(message, advisories)
|
53
|
+
return nil if advisories.empty?
|
54
|
+
|
55
|
+
<<~MESSAGE
|
56
|
+
#{message}
|
57
|
+
|
58
|
+
#{advisories.map(&method(:render_vulnerability)).join("\n")}
|
59
|
+
MESSAGE
|
60
|
+
end
|
61
|
+
|
62
|
+
def render_vulnerability(advisory)
|
63
|
+
<<~MESSAGE
|
64
|
+
- #{identifier(advisory)}
|
65
|
+
**#{advisory.title}**
|
66
|
+
|
67
|
+
#{cvss_v2(advisory)}
|
68
|
+
#{link(advisory)}
|
69
|
+
|
70
|
+
#{advisory.description&.gsub("\n", ' ')&.strip}
|
71
|
+
|
72
|
+
MESSAGE
|
73
|
+
end
|
74
|
+
|
75
|
+
def identifier(advisory)
|
76
|
+
if advisory.cve_id
|
77
|
+
"[#{advisory.cve_id}](#{cve_url(advisory.cve_id)})"
|
78
|
+
elsif advisory.osvdb_id
|
79
|
+
advisory.osvdb_id
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def cve_url(id)
|
84
|
+
"https://nvd.nist.gov/vuln/detail/#{id}"
|
85
|
+
end
|
86
|
+
|
87
|
+
def cvss_v2(advisory)
|
88
|
+
# rubocop:disable Style/GuardClause
|
89
|
+
if advisory.cvss_v2
|
90
|
+
"CVSS V2: [#{advisory.cvss_v2} #{advisory.criticality}]"\
|
91
|
+
"(#{cvss_v2_url(advisory.cve_id)})"
|
92
|
+
end
|
93
|
+
# rubocop:enable Style/GuardClause
|
94
|
+
end
|
95
|
+
|
96
|
+
def cvss_v2_url(id)
|
97
|
+
"https://nvd.nist.gov/vuln-metrics/cvss/v2-calculator?name=#{id}"
|
98
|
+
end
|
99
|
+
|
100
|
+
def link(advisory)
|
101
|
+
"URL: #{advisory.url}" if advisory.url
|
102
|
+
end
|
103
|
+
|
104
|
+
def vulnerabilities
|
105
|
+
@gem_change_info[:security_vulnerabilities]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Unwrappr
|
4
|
+
module Writers
|
5
|
+
# Add the gem name to the annotation as a heading. If a homepage
|
6
|
+
# URI has been determined this heading will link to that page.
|
7
|
+
#
|
8
|
+
# Implements the `annotation_writer` interface required by the
|
9
|
+
# LockFileAnnotator.
|
10
|
+
module Title
|
11
|
+
class << self
|
12
|
+
def write(gem_change, gem_change_info)
|
13
|
+
embellished_gem_name = maybe_link(
|
14
|
+
gem_change.name,
|
15
|
+
gem_change_info[:ruby_gems]&.homepage_uri
|
16
|
+
)
|
17
|
+
"### #{embellished_gem_name}\n"
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def maybe_link(text, url)
|
23
|
+
if url.nil?
|
24
|
+
text
|
25
|
+
else
|
26
|
+
"[#{text}](#{url})"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Unwrappr
|
4
|
+
module Writers
|
5
|
+
# Describe the version change. Is it an upgrade to a later version, or a
|
6
|
+
# downgrade to an older version? Is it a major, minor or patch version
|
7
|
+
# change?
|
8
|
+
#
|
9
|
+
# Implements the `annotation_writer` interface required by the
|
10
|
+
# LockFileAnnotator.
|
11
|
+
class VersionChange
|
12
|
+
extend Forwardable
|
13
|
+
|
14
|
+
def self.write(gem_change, gem_change_info)
|
15
|
+
new(gem_change, gem_change_info).write
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(gem_change, gem_change_info)
|
19
|
+
@gem_change = gem_change
|
20
|
+
@gem_change_info = gem_change_info
|
21
|
+
end
|
22
|
+
|
23
|
+
def write
|
24
|
+
"#{change_description}\n"
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def_delegators(:@gem_change,
|
30
|
+
:added?, :removed?, :major?, :minor?, :patch?,
|
31
|
+
:upgrade?, :downgrade?, :base_version, :head_version)
|
32
|
+
|
33
|
+
def change_description
|
34
|
+
if added? then 'Gem added :snowman:'
|
35
|
+
elsif removed? then 'Gem removed :fire:'
|
36
|
+
elsif major?
|
37
|
+
"**Major** version #{grade}:exclamation: #{version_diff}"
|
38
|
+
elsif minor?
|
39
|
+
"**Minor** version #{grade}:large_orange_diamond: #{version_diff}"
|
40
|
+
elsif patch?
|
41
|
+
"**Patch** version #{grade}:small_blue_diamond: #{version_diff}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def grade
|
46
|
+
if upgrade?
|
47
|
+
'upgrade :chart_with_upwards_trend:'
|
48
|
+
elsif downgrade?
|
49
|
+
'downgrade :chart_with_downwards_trend::exclamation:'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def version_diff
|
54
|
+
"#{base_version} → #{head_version}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/unwrappr.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'unwrappr/bundler_command_runner'
|
4
|
+
require 'unwrappr/cli'
|
5
|
+
require 'unwrappr/gem_change'
|
6
|
+
require 'unwrappr/gem_version'
|
7
|
+
require 'unwrappr/git_command_runner'
|
8
|
+
require 'unwrappr/github/client'
|
9
|
+
require 'unwrappr/github/pr_sink'
|
10
|
+
require 'unwrappr/github/pr_source'
|
11
|
+
require 'unwrappr/lock_file_annotator'
|
12
|
+
require 'unwrappr/lock_file_comparator'
|
13
|
+
require 'unwrappr/lock_file_diff'
|
14
|
+
require 'unwrappr/octokit'
|
15
|
+
require 'unwrappr/researchers/composite'
|
16
|
+
require 'unwrappr/researchers/github_comparison'
|
17
|
+
require 'unwrappr/researchers/github_repo'
|
18
|
+
require 'unwrappr/researchers/ruby_gems_info'
|
19
|
+
require 'unwrappr/researchers/security_vulnerabilities'
|
20
|
+
require 'unwrappr/ruby_gems'
|
21
|
+
require 'unwrappr/spec_version_comparator'
|
22
|
+
require 'unwrappr/version'
|
23
|
+
require 'unwrappr/writers/composite'
|
24
|
+
require 'unwrappr/writers/github_commit_log'
|
25
|
+
require 'unwrappr/writers/project_links'
|
26
|
+
require 'unwrappr/writers/security_vulnerabilities'
|
27
|
+
require 'unwrappr/writers/title'
|
28
|
+
require 'unwrappr/writers/version_change'
|
29
|
+
|
30
|
+
# Define our namespace
|
31
|
+
module Unwrappr
|
32
|
+
end
|
data/unwrappr.gemspec
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'unwrappr/version'
|
6
|
+
|
7
|
+
AUTHORS = {
|
8
|
+
'emilyn.escabarte@envato.com' => 'Emilyn Escabarte',
|
9
|
+
'joe.sustaric@envato.com' => 'Joe Sustaric',
|
10
|
+
'orien.madgwick@envato.com' => 'Orien Madgwick',
|
11
|
+
'pete.johns@envato.com' => 'Pete Johns',
|
12
|
+
'vladimir.chervanev@envato.com' => 'Vladimir Chervanev'
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength:
|
16
|
+
spec.name = 'unwrappr'
|
17
|
+
spec.version = Unwrappr::VERSION
|
18
|
+
spec.authors = AUTHORS.values
|
19
|
+
spec.email = AUTHORS.keys
|
20
|
+
|
21
|
+
spec.summary = "A tool to unwrap your gems and see what's changed easily"
|
22
|
+
spec.description = "Let's fill this bit out later"
|
23
|
+
spec.homepage = 'http://www.unwrappr.com.org'
|
24
|
+
spec.license = 'MIT'
|
25
|
+
|
26
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
27
|
+
f.match(%r{^(test|spec|features)/})
|
28
|
+
end
|
29
|
+
spec.bindir = 'exe'
|
30
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
31
|
+
spec.require_paths = ['lib']
|
32
|
+
|
33
|
+
spec.add_dependency 'bundler', '~> 1.16'
|
34
|
+
spec.add_dependency 'bundler-audit', '~> 0'
|
35
|
+
spec.add_dependency 'clamp', '~> 1'
|
36
|
+
spec.add_dependency 'faraday', '~> 0'
|
37
|
+
spec.add_dependency 'git', '~> 1'
|
38
|
+
spec.add_dependency 'octokit', '~> 4.0'
|
39
|
+
spec.add_dependency 'safe_shell', '~> 1'
|
40
|
+
|
41
|
+
spec.add_development_dependency 'guard', '~> 2'
|
42
|
+
spec.add_development_dependency 'guard-rspec', '~> 4'
|
43
|
+
spec.add_development_dependency 'pry', '~> 0'
|
44
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
45
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
46
|
+
spec.add_development_dependency 'rspec-its', '~> 1'
|
47
|
+
spec.add_development_dependency 'rubocop', '~> 0'
|
48
|
+
|
49
|
+
spec.metadata = {
|
50
|
+
'bug_tracker_uri' => 'https://github.com/envato/unwrappr/issues',
|
51
|
+
'changelog_uri' => 'https://github.com/envato/unwrappr/blob/master/CHANGELOG.md',
|
52
|
+
'documentation_uri' => 'https://github.com/envato/unwrappr/blob/master/README.md',
|
53
|
+
'homepage_uri' => 'https://opensource.envato.com/projects/unwrappr.html',
|
54
|
+
'source_code_uri' => 'https://github.com/envato/unwrappr'
|
55
|
+
}
|
56
|
+
end
|
metadata
ADDED
@@ -0,0 +1,299 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: unwrappr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Emilyn Escabarte
|
8
|
+
- Joe Sustaric
|
9
|
+
- Orien Madgwick
|
10
|
+
- Pete Johns
|
11
|
+
- Vladimir Chervanev
|
12
|
+
autorequire:
|
13
|
+
bindir: exe
|
14
|
+
cert_chain: []
|
15
|
+
date: 2018-11-12 00:00:00.000000000 Z
|
16
|
+
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
18
|
+
name: bundler
|
19
|
+
requirement: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - "~>"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '1.16'
|
24
|
+
type: :runtime
|
25
|
+
prerelease: false
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
requirements:
|
28
|
+
- - "~>"
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '1.16'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: bundler-audit
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - "~>"
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - "~>"
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: clamp
|
47
|
+
requirement: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - "~>"
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '1'
|
52
|
+
type: :runtime
|
53
|
+
prerelease: false
|
54
|
+
version_requirements: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - "~>"
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '1'
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: faraday
|
61
|
+
requirement: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - "~>"
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - "~>"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: git
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '1'
|
80
|
+
type: :runtime
|
81
|
+
prerelease: false
|
82
|
+
version_requirements: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - "~>"
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '1'
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: octokit
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - "~>"
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '4.0'
|
94
|
+
type: :runtime
|
95
|
+
prerelease: false
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - "~>"
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '4.0'
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: safe_shell
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - "~>"
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '1'
|
108
|
+
type: :runtime
|
109
|
+
prerelease: false
|
110
|
+
version_requirements: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - "~>"
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '1'
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: guard
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - "~>"
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '2'
|
122
|
+
type: :development
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - "~>"
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '2'
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: guard-rspec
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - "~>"
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '4'
|
136
|
+
type: :development
|
137
|
+
prerelease: false
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - "~>"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '4'
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
name: pry
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - "~>"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - "~>"
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '0'
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: rake
|
159
|
+
requirement: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - "~>"
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '10.0'
|
164
|
+
type: :development
|
165
|
+
prerelease: false
|
166
|
+
version_requirements: !ruby/object:Gem::Requirement
|
167
|
+
requirements:
|
168
|
+
- - "~>"
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: '10.0'
|
171
|
+
- !ruby/object:Gem::Dependency
|
172
|
+
name: rspec
|
173
|
+
requirement: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - "~>"
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '3.0'
|
178
|
+
type: :development
|
179
|
+
prerelease: false
|
180
|
+
version_requirements: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - "~>"
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '3.0'
|
185
|
+
- !ruby/object:Gem::Dependency
|
186
|
+
name: rspec-its
|
187
|
+
requirement: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - "~>"
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '1'
|
192
|
+
type: :development
|
193
|
+
prerelease: false
|
194
|
+
version_requirements: !ruby/object:Gem::Requirement
|
195
|
+
requirements:
|
196
|
+
- - "~>"
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: '1'
|
199
|
+
- !ruby/object:Gem::Dependency
|
200
|
+
name: rubocop
|
201
|
+
requirement: !ruby/object:Gem::Requirement
|
202
|
+
requirements:
|
203
|
+
- - "~>"
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
206
|
+
type: :development
|
207
|
+
prerelease: false
|
208
|
+
version_requirements: !ruby/object:Gem::Requirement
|
209
|
+
requirements:
|
210
|
+
- - "~>"
|
211
|
+
- !ruby/object:Gem::Version
|
212
|
+
version: '0'
|
213
|
+
description: Let's fill this bit out later
|
214
|
+
email:
|
215
|
+
- emilyn.escabarte@envato.com
|
216
|
+
- joe.sustaric@envato.com
|
217
|
+
- orien.madgwick@envato.com
|
218
|
+
- pete.johns@envato.com
|
219
|
+
- vladimir.chervanev@envato.com
|
220
|
+
executables:
|
221
|
+
- unwrappr
|
222
|
+
extensions: []
|
223
|
+
extra_rdoc_files: []
|
224
|
+
files:
|
225
|
+
- ".buildkite/pipeline.yml"
|
226
|
+
- ".buildkite/steps/rspec.sh"
|
227
|
+
- ".buildkite/steps/rubocop.sh"
|
228
|
+
- ".gitignore"
|
229
|
+
- ".rspec"
|
230
|
+
- ".rubocop.yml"
|
231
|
+
- ".travis.yml"
|
232
|
+
- CHANGELOG.md
|
233
|
+
- CODE_OF_CONDUCT.md
|
234
|
+
- Gemfile
|
235
|
+
- Guardfile
|
236
|
+
- LICENSE.txt
|
237
|
+
- README.md
|
238
|
+
- Rakefile
|
239
|
+
- bin/console
|
240
|
+
- bin/setup
|
241
|
+
- exe/unwrappr
|
242
|
+
- lib/unwrappr.rb
|
243
|
+
- lib/unwrappr/bundler_command_runner.rb
|
244
|
+
- lib/unwrappr/cli.rb
|
245
|
+
- lib/unwrappr/gem_change.rb
|
246
|
+
- lib/unwrappr/gem_version.rb
|
247
|
+
- lib/unwrappr/git_command_runner.rb
|
248
|
+
- lib/unwrappr/github/client.rb
|
249
|
+
- lib/unwrappr/github/pr_sink.rb
|
250
|
+
- lib/unwrappr/github/pr_source.rb
|
251
|
+
- lib/unwrappr/lock_file_annotator.rb
|
252
|
+
- lib/unwrappr/lock_file_comparator.rb
|
253
|
+
- lib/unwrappr/lock_file_diff.rb
|
254
|
+
- lib/unwrappr/octokit.rb
|
255
|
+
- lib/unwrappr/researchers/composite.rb
|
256
|
+
- lib/unwrappr/researchers/github_comparison.rb
|
257
|
+
- lib/unwrappr/researchers/github_repo.rb
|
258
|
+
- lib/unwrappr/researchers/ruby_gems_info.rb
|
259
|
+
- lib/unwrappr/researchers/security_vulnerabilities.rb
|
260
|
+
- lib/unwrappr/ruby_gems.rb
|
261
|
+
- lib/unwrappr/spec_version_comparator.rb
|
262
|
+
- lib/unwrappr/version.rb
|
263
|
+
- lib/unwrappr/writers/composite.rb
|
264
|
+
- lib/unwrappr/writers/github_commit_log.rb
|
265
|
+
- lib/unwrappr/writers/project_links.rb
|
266
|
+
- lib/unwrappr/writers/security_vulnerabilities.rb
|
267
|
+
- lib/unwrappr/writers/title.rb
|
268
|
+
- lib/unwrappr/writers/version_change.rb
|
269
|
+
- unwrappr.gemspec
|
270
|
+
homepage: http://www.unwrappr.com.org
|
271
|
+
licenses:
|
272
|
+
- MIT
|
273
|
+
metadata:
|
274
|
+
bug_tracker_uri: https://github.com/envato/unwrappr/issues
|
275
|
+
changelog_uri: https://github.com/envato/unwrappr/blob/master/CHANGELOG.md
|
276
|
+
documentation_uri: https://github.com/envato/unwrappr/blob/master/README.md
|
277
|
+
homepage_uri: https://opensource.envato.com/projects/unwrappr.html
|
278
|
+
source_code_uri: https://github.com/envato/unwrappr
|
279
|
+
post_install_message:
|
280
|
+
rdoc_options: []
|
281
|
+
require_paths:
|
282
|
+
- lib
|
283
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
284
|
+
requirements:
|
285
|
+
- - ">="
|
286
|
+
- !ruby/object:Gem::Version
|
287
|
+
version: '0'
|
288
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
289
|
+
requirements:
|
290
|
+
- - ">="
|
291
|
+
- !ruby/object:Gem::Version
|
292
|
+
version: '0'
|
293
|
+
requirements: []
|
294
|
+
rubyforge_project:
|
295
|
+
rubygems_version: 2.7.6
|
296
|
+
signing_key:
|
297
|
+
specification_version: 4
|
298
|
+
summary: A tool to unwrap your gems and see what's changed easily
|
299
|
+
test_files: []
|