gemfile-audit 1.0.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/LICENSE +21 -0
- data/README.md +108 -0
- data/exe/gemfile-audit +5 -0
- data/lib/gemfile_audit/ci.rb +85 -0
- data/lib/gemfile_audit/cli.rb +267 -0
- data/lib/gemfile_audit/collector.rb +295 -0
- data/lib/gemfile_audit/loader.rb +16 -0
- data/lib/gemfile_audit/measurement.rb +637 -0
- data/lib/gemfile_audit/shell.rb +70 -0
- data/lib/gemfile_audit/uploader.rb +60 -0
- data/lib/gemfile_audit/version.rb +3 -0
- data/lib/gemfile_audit.rb +20 -0
- metadata +99 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
require "net/http"
|
|
3
|
+
require "uri"
|
|
4
|
+
|
|
5
|
+
module GemfileAudit
|
|
6
|
+
# Sends the upload to gemfile.io. Never raises: every failure comes back as
|
|
7
|
+
# a short reason in the result.
|
|
8
|
+
module Uploader
|
|
9
|
+
Result = Struct.new(:preview_url, :expires_on, :error)
|
|
10
|
+
|
|
11
|
+
DEFAULT_URL = "https://gemfile.io/api/audit_runs".freeze
|
|
12
|
+
OPEN_TIMEOUT = 10
|
|
13
|
+
READ_TIMEOUT = 30
|
|
14
|
+
NOT_RESPONDING = "gemfile.io is not responding".freeze
|
|
15
|
+
|
|
16
|
+
def self.url(env = ENV)
|
|
17
|
+
value = env["GEMFILE_AUDIT_URL"]
|
|
18
|
+
value.nil? || value.empty? ? DEFAULT_URL : value
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.post(upload, url:)
|
|
22
|
+
body = JSON.generate(upload)
|
|
23
|
+
uri = URI.parse(url.to_s)
|
|
24
|
+
raise URI::InvalidURIError, "no host" if uri.host.nil?
|
|
25
|
+
request = Net::HTTP::Post.new(uri.request_uri)
|
|
26
|
+
request["Content-Type"] = "application/json"
|
|
27
|
+
request["Accept"] = "application/json"
|
|
28
|
+
request["User-Agent"] = "gemfile-audit/#{GemfileAudit::VERSION}"
|
|
29
|
+
request.body = body
|
|
30
|
+
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https",
|
|
31
|
+
open_timeout: OPEN_TIMEOUT, read_timeout: READ_TIMEOUT) do |http|
|
|
32
|
+
http.request(request)
|
|
33
|
+
end
|
|
34
|
+
answer(response)
|
|
35
|
+
rescue StandardError, Timeout::Error
|
|
36
|
+
Result.new(nil, nil, NOT_RESPONDING)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.answer(response)
|
|
40
|
+
status = response.code.to_i
|
|
41
|
+
data = parse(response.body)
|
|
42
|
+
if status >= 200 && status < 300 && data["preview_url"].is_a?(String)
|
|
43
|
+
Result.new(data["preview_url"], data["expires_on"].to_s, nil)
|
|
44
|
+
elsif status >= 400 && status < 500 && data["error"].is_a?(String) && !data["error"].strip.empty?
|
|
45
|
+
Result.new(nil, nil, data["error"].strip)
|
|
46
|
+
else
|
|
47
|
+
Result.new(nil, nil, "gemfile.io answered #{response.code}")
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def self.parse(body)
|
|
52
|
+
data = JSON.parse(body.to_s)
|
|
53
|
+
data.is_a?(Hash) ? data : {}
|
|
54
|
+
rescue JSON::ParserError
|
|
55
|
+
{}
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private_class_method :answer, :parse
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require "gemfile_audit/version"
|
|
2
|
+
require "gemfile_audit/shell"
|
|
3
|
+
require "gemfile_audit/ci"
|
|
4
|
+
require "gemfile_audit/collector"
|
|
5
|
+
require "gemfile_audit/uploader"
|
|
6
|
+
require "gemfile_audit/cli"
|
|
7
|
+
|
|
8
|
+
module GemfileAudit
|
|
9
|
+
def self.warn(message)
|
|
10
|
+
$stderr.puts("gemfile-audit: #{message}")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.lib_path
|
|
14
|
+
File.expand_path(__dir__)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.loader_path
|
|
18
|
+
File.expand_path("gemfile_audit/loader.rb", __dir__)
|
|
19
|
+
end
|
|
20
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: gemfile-audit
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Despo Pentara
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: rake
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '13.0'
|
|
19
|
+
type: :development
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '13.0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: minitest
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '5.0'
|
|
33
|
+
type: :development
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '5.0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: rspec
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '3.0'
|
|
47
|
+
type: :development
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '3.0'
|
|
54
|
+
description: Runs around your test suite in CI and measures your Rails app's tests,
|
|
55
|
+
deprecations and runtimes for a gemfile.io upgrade audit.
|
|
56
|
+
email:
|
|
57
|
+
- despo@extractmethod.com
|
|
58
|
+
executables:
|
|
59
|
+
- gemfile-audit
|
|
60
|
+
extensions: []
|
|
61
|
+
extra_rdoc_files: []
|
|
62
|
+
files:
|
|
63
|
+
- LICENSE
|
|
64
|
+
- README.md
|
|
65
|
+
- exe/gemfile-audit
|
|
66
|
+
- lib/gemfile_audit.rb
|
|
67
|
+
- lib/gemfile_audit/ci.rb
|
|
68
|
+
- lib/gemfile_audit/cli.rb
|
|
69
|
+
- lib/gemfile_audit/collector.rb
|
|
70
|
+
- lib/gemfile_audit/loader.rb
|
|
71
|
+
- lib/gemfile_audit/measurement.rb
|
|
72
|
+
- lib/gemfile_audit/shell.rb
|
|
73
|
+
- lib/gemfile_audit/uploader.rb
|
|
74
|
+
- lib/gemfile_audit/version.rb
|
|
75
|
+
homepage: https://gemfile.io
|
|
76
|
+
licenses:
|
|
77
|
+
- MIT
|
|
78
|
+
metadata:
|
|
79
|
+
homepage_uri: https://gemfile.io
|
|
80
|
+
rubygems_mfa_required: 'true'
|
|
81
|
+
rdoc_options: []
|
|
82
|
+
require_paths:
|
|
83
|
+
- lib
|
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - ">="
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '2.3'
|
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
|
+
requirements:
|
|
91
|
+
- - ">="
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: '0'
|
|
94
|
+
requirements: []
|
|
95
|
+
rubygems_version: 3.7.1
|
|
96
|
+
specification_version: 4
|
|
97
|
+
summary: Measures a Rails app's tests, deprecations and runtimes in CI for a gemfile.io
|
|
98
|
+
upgrade audit.
|
|
99
|
+
test_files: []
|