blinka-reporter 0.6.1 → 0.7.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 +4 -4
- data/.github/workflows/main.yml +11 -7
- data/.gitignore +1 -0
- data/CHANGELOG.md +8 -1
- data/README.md +33 -33
- data/lib/blinka_reporter/blinka.rb +4 -1
- data/lib/blinka_reporter/cli.rb +43 -13
- data/lib/blinka_reporter/client.rb +41 -27
- data/lib/blinka_reporter/config.rb +20 -17
- data/lib/blinka_reporter/version.rb +1 -1
- data/lib/minitest/blinka_plugin.rb +9 -32
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 169cf0a2be6fe787a73ecb591ff4e271ead078adc25cfc762317d4de32871a00
|
4
|
+
data.tar.gz: e54f8c1b7c9521c42ff07c24ddef03489ebdfce0619b5006d0aa26d1eac7f3fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cd66de441531a066ed462e241670b0ea2904be084db2dd66819376e78f93d37bb5233709d634048727c8df9fd33e88a0820609c0e38df23f7052c052957cba2b
|
7
|
+
data.tar.gz: 28ee703aeb5a4bdf3ddfea38d443ad9db0692b370cbad8d744c9bb85e6669107723454f15cac24f6bc483b90315a55828776c103724a76aadc6f1458ab305557
|
data/.github/workflows/main.yml
CHANGED
@@ -8,6 +8,7 @@ jobs:
|
|
8
8
|
name: Tests
|
9
9
|
runs-on: ubuntu-latest
|
10
10
|
strategy:
|
11
|
+
fail-fast: false
|
11
12
|
matrix:
|
12
13
|
ruby: ["2.6", "2.7", "3.0", "3.1"]
|
13
14
|
|
@@ -29,7 +30,7 @@ jobs:
|
|
29
30
|
|
30
31
|
- name: Run tests
|
31
32
|
env:
|
32
|
-
|
33
|
+
BLINKA_PATH: ./results.json
|
33
34
|
run: bundle exec rake test
|
34
35
|
|
35
36
|
- name: Build and install gem
|
@@ -38,9 +39,12 @@ jobs:
|
|
38
39
|
|
39
40
|
- name: Report to Blinka
|
40
41
|
if: always()
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
run: |
|
43
|
+
blinka_reporter \
|
44
|
+
--blinka \
|
45
|
+
--tap \
|
46
|
+
--path ./results.json \
|
47
|
+
--repository davidwessman/blinka_reporter \
|
48
|
+
--tag ${{ matrix.ruby }} \
|
49
|
+
--team-id ${{ secrets.BLINKA_TEAM_ID }} \
|
50
|
+
--team-secret ${{ secrets.BLINKA_TEAM_SECRET }}
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## [0.7.0] - 2022-03-06
|
11
|
+
|
12
|
+
- Support multiple `--path` calls to combine results from multiple files.
|
13
|
+
- Replaces `BLINKA_JSON` and `BLINKA_APPEND` with `BLINKA_PATH`.
|
14
|
+
- Adds all reporter options as CLI-options instead of using environment variables. -`BLINKA_REPOSITORY` => `--repository`
|
15
|
+
|
10
16
|
## [0.6.1] - 2022-02-27
|
11
17
|
|
12
18
|
- Rspec
|
@@ -137,7 +143,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
137
143
|
|
138
144
|
- Handle inconsistency in source_location of test result in Minitest for different versions.
|
139
145
|
|
140
|
-
[unreleased]: https://github.com/davidwessman/blinka_reporter/compare/v0.
|
146
|
+
[unreleased]: https://github.com/davidwessman/blinka_reporter/compare/v0.7.0...HEAD
|
147
|
+
[0.7.0]: https://github.com/davidwessman/blinka_reporter/compare/v0.6.1...v0.7.0
|
141
148
|
[0.6.1]: https://github.com/davidwessman/blinka_reporter/compare/v0.6.0...v0.6.1
|
142
149
|
[0.6.0]: https://github.com/davidwessman/blinka_reporter/compare/v0.5.2...v0.6.0
|
143
150
|
[0.5.2]: https://github.com/davidwessman/blinka_reporter/compare/v0.5.1...v0.5.2
|
data/README.md
CHANGED
@@ -16,7 +16,7 @@ gem install blinka-reporter
|
|
16
16
|
or add to your Gemfile
|
17
17
|
|
18
18
|
```ruby
|
19
|
-
gem 'blinka-
|
19
|
+
gem 'blinka-reporter', '~> 0.7.0'
|
20
20
|
```
|
21
21
|
|
22
22
|
## Which ruby testing frameworks are supported?
|
@@ -35,10 +35,10 @@ Blinka is a web service developed by [@davidwessman](https://github.com/davidwes
|
|
35
35
|
### Minitest
|
36
36
|
|
37
37
|
```sh
|
38
|
-
|
38
|
+
BLINKA_PATH=./tests.json bundle exec rails test
|
39
39
|
```
|
40
40
|
|
41
|
-
Output as `./
|
41
|
+
Output as `./tests.json`.
|
42
42
|
|
43
43
|
### Rspec
|
44
44
|
|
@@ -51,8 +51,7 @@ bundle exec rspec --formatter RspecJunitFormatter --out ./rspec.xml
|
|
51
51
|
## How to send report to Blinka?
|
52
52
|
|
53
53
|
1. Output your test results as described [above](#how-to-generate-test-report-in-the-right-format).
|
54
|
-
1.
|
55
|
-
1. `bundle exec blinka_reporter --path {./blinka_results.json,./rspec.xml} --blinka`
|
54
|
+
1. `bundle exec blinka_reporter --path {./blinka_results.json,./rspec.xml} --blinka --team-id <BLINKA_TEAM_ID> --team-secret <BLINKA_TEAM_SECRET> --repository davidwessman/blinka_reporter`
|
56
55
|
|
57
56
|
## How can I send report in Github Action?
|
58
57
|
|
@@ -65,58 +64,59 @@ Add a step to your Github Action Workflow after running tests:
|
|
65
64
|
run: bundle exec rake test
|
66
65
|
|
67
66
|
- name: Report minitest to Blinka
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
67
|
+
run: |
|
68
|
+
bundle exec blinka_reporter \
|
69
|
+
--path ./blinka_results.json \
|
70
|
+
--blinka \
|
71
|
+
--commit ${{ github.event.pull_request.head.sha || github.sha }} \
|
72
|
+
--repository davidwessman/blinka_reporter \
|
73
|
+
--team-id ${{ secrets.BLINKA_TEAM_ID }} \
|
74
|
+
--team-secret ${{ secrets.BLINKA_TEAM_SECRET }}
|
75
75
|
```
|
76
76
|
|
77
77
|
```yaml
|
78
78
|
- name: Rspec
|
79
79
|
run: bundle exec rspec --formatter RspecJunitFormatter --out ./rspec.xml
|
80
80
|
- name: Report minitest to Blinka
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
81
|
+
run: |
|
82
|
+
bundle exec blinka_reporter \
|
83
|
+
--path ./rspec.xml \
|
84
|
+
--blinka \
|
85
|
+
--commit ${{ github.event.pull_request.head.sha || github.sha }} \
|
86
|
+
--repository davidwessman/blinka_reporter \
|
87
|
+
--team-id ${{ secrets.BLINKA_TEAM_ID }} \
|
88
|
+
--team-secret ${{ secrets.BLINKA_TEAM_SECRET }}
|
88
89
|
```
|
89
90
|
|
90
|
-
`
|
91
|
+
`--tag` is optional and can be used to separate different reports, for example when using a build matrix.
|
91
92
|
|
92
93
|
## How to make multiple test runs into one report?
|
93
94
|
|
94
|
-
**Only supported for Minitest, open an issue for Rspec-support**
|
95
|
-
|
96
95
|
For example when running tests in parallel you might need to run system tests separately.
|
97
|
-
|
96
|
+
Output the test results to different paths with `BLINKA_PATH`.
|
98
97
|
|
99
98
|
```yaml
|
100
99
|
- name: System tests
|
101
100
|
env:
|
102
|
-
|
101
|
+
BLINKA_PATH: ./system_tests.json
|
103
102
|
PARALLEL_WORKERS: 1
|
104
103
|
run: bundle exec rails test:system
|
105
104
|
|
106
105
|
- name: Tests
|
107
106
|
env:
|
108
|
-
BLINKA_JSON:
|
109
|
-
BLINKA_APPEND: true
|
107
|
+
BLINKA_JSON: ./tests.json
|
110
108
|
run: bundle exec rails test
|
111
109
|
|
112
110
|
- name: Report to Blinka
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
111
|
+
run: |
|
112
|
+
bundle exec blinka_reporter \
|
113
|
+
--path ./system_tests.json \
|
114
|
+
--path ./tests.json \
|
115
|
+
--blinka \
|
116
|
+
--commit ${{ github.event.pull_request.head.sha || github.sha }} \
|
117
|
+
--repository davidwessman/blinka_reporter \
|
118
|
+
--team-id ${{ secrets.BLINKA_TEAM_ID }} \
|
119
|
+
--team-secret ${{ secrets.BLINKA_TEAM_SECRET }}
|
120
120
|
```
|
121
121
|
|
122
122
|
## How can I report tests in TAP-format?
|
@@ -99,7 +99,10 @@ module BlinkaReporter
|
|
99
99
|
when 200
|
100
100
|
@jwt_token = JSON.parse(response.body).dig('auth_token')
|
101
101
|
else
|
102
|
-
raise(
|
102
|
+
raise(
|
103
|
+
BlinkaReporter::Error,
|
104
|
+
"Could not authenticate to API #{response.code}"
|
105
|
+
)
|
103
106
|
end
|
104
107
|
end
|
105
108
|
|
data/lib/blinka_reporter/cli.rb
CHANGED
@@ -9,28 +9,58 @@ module BlinkaReporter
|
|
9
9
|
blinka_reporter version #{BlinkaReporter::VERSION}
|
10
10
|
|
11
11
|
Options:
|
12
|
-
--
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
--
|
18
|
-
|
19
|
-
|
12
|
+
--path <path>: Path to test results file, can be supplied multiple times to combine results
|
13
|
+
- ./blinka_results.json blinka json format
|
14
|
+
- ./rspec.xml from https://github.com/sj26/rspec_junit_formatter
|
15
|
+
|
16
|
+
--tap: Flag for outputting test results in TAP-protocol, helpful on Heroku CI
|
17
|
+
--blinka: Flag for reporting test results to blinka.app, requires also supplying:
|
18
|
+
- --team-id
|
19
|
+
- --team-secret
|
20
|
+
- --repository
|
21
|
+
- --commit
|
22
|
+
--team-id <team-id>: Blinka team id, only used with --blinka
|
23
|
+
--team-secret <team-secret>: Blinka team secret, only used with --blinka
|
24
|
+
--commit <commit>: The commit hash to report
|
25
|
+
--tag <tag>: The tag for the run, for example to separate a test matrix
|
26
|
+
--repository <repository>: The Github repository
|
27
|
+
--host <host>: Override Blink host to send report
|
28
|
+
|
20
29
|
EOS
|
21
30
|
return 0
|
22
31
|
end
|
23
32
|
|
24
33
|
tap = (argv.index('--tap') || -1) >= 0
|
34
|
+
|
35
|
+
paths = argv_value_for(argv, '--path')
|
36
|
+
|
25
37
|
blinka = (argv.index('--blinka') || -1) >= 0
|
26
|
-
|
27
|
-
|
28
|
-
|
38
|
+
commit = argv_value_for(argv, '--commit')&.first
|
39
|
+
repository = argv_value_for(argv, '--repository')&.first
|
40
|
+
tag = argv_value_for(argv, '--tag')&.first
|
41
|
+
team_id = argv_value_for(argv, '--team-id')&.first
|
42
|
+
team_secret = argv_value_for(argv, '--team-secret')&.first
|
43
|
+
host = argv_value_for(argv, '--host')&.first
|
44
|
+
|
45
|
+
client = BlinkaReporter::Client.new
|
46
|
+
data = client.parse(paths: paths)
|
47
|
+
config =
|
48
|
+
BlinkaReporter::Config.new(
|
49
|
+
tag: tag,
|
50
|
+
commit: commit,
|
51
|
+
team_id: team_id,
|
52
|
+
team_secret: team_secret,
|
53
|
+
repository: repository,
|
54
|
+
host: host
|
55
|
+
)
|
56
|
+
client.report(data: data, config: config, tap: tap, blinka: blinka)
|
29
57
|
end
|
30
58
|
|
31
59
|
def self.argv_value_for(argv, option_name)
|
32
|
-
|
33
|
-
|
60
|
+
argv
|
61
|
+
.each_index
|
62
|
+
.select { |index| argv[index] == option_name }
|
63
|
+
.map { |index| argv[index + 1] }
|
34
64
|
end
|
35
65
|
end
|
36
66
|
end
|
@@ -8,44 +8,58 @@ require 'blinka_reporter/tap'
|
|
8
8
|
|
9
9
|
module BlinkaReporter
|
10
10
|
class Client
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
unless File.exist?(path)
|
17
|
-
raise(
|
18
|
-
BlinkaReporter::Error,
|
19
|
-
"Could not find #{path}, was it generated when running the tests?"
|
20
|
-
)
|
21
|
-
end
|
22
|
-
|
23
|
-
data =
|
24
|
-
if path.end_with?('.xml')
|
25
|
-
self.class.parse_xml(path: path)
|
26
|
-
elsif path.end_with?('.json')
|
27
|
-
self.class.parse_json(path: path)
|
28
|
-
else
|
11
|
+
def parse(paths: nil)
|
12
|
+
paths ||= ['./blinka_results.json']
|
13
|
+
paths = Array(paths)
|
14
|
+
paths.each do |path|
|
15
|
+
unless File.exist?(path)
|
29
16
|
raise(
|
30
17
|
BlinkaReporter::Error,
|
31
|
-
"
|
18
|
+
"Could not find #{path}, make sure the path is correct."
|
32
19
|
)
|
33
20
|
end
|
21
|
+
end
|
22
|
+
|
23
|
+
merge_results(
|
24
|
+
paths.map do |path|
|
25
|
+
if path.end_with?('.xml')
|
26
|
+
parse_xml(path: path)
|
27
|
+
elsif path.end_with?('.json')
|
28
|
+
parse_json(path: path)
|
29
|
+
else
|
30
|
+
raise(
|
31
|
+
BlinkaReporter::Error,
|
32
|
+
"Unknown format of #{path}, needs to be .json or .xml"
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
)
|
37
|
+
end
|
34
38
|
|
39
|
+
def report(data:, blinka: false, tap: false, config: nil)
|
35
40
|
BlinkaReporter::Tap.report(data) if tap
|
36
|
-
BlinkaReporter::Blinka.report(config:
|
41
|
+
BlinkaReporter::Blinka.report(config: config, data: data) if blinka
|
37
42
|
0
|
38
43
|
end
|
39
44
|
|
40
|
-
|
41
|
-
|
45
|
+
private
|
46
|
+
|
47
|
+
def merge_results(data_array)
|
48
|
+
data = { total_time: 0, nbr_tests: 0, nbr_assertions: 0, results: [] }
|
49
|
+
data_array.each do |result|
|
50
|
+
data[:total_time] += result[:total_time] || 0
|
51
|
+
data[:nbr_tests] += result[:nbr_tests] || 0
|
52
|
+
data[:nbr_assertions] += result[:nbr_assertions] || 0
|
53
|
+
data[:results] += result[:results] || []
|
54
|
+
end
|
55
|
+
data
|
42
56
|
end
|
43
57
|
|
44
|
-
def
|
58
|
+
def parse_json(path:)
|
45
59
|
JSON.parse(File.open(path).read, symbolize_names: true)
|
46
60
|
end
|
47
61
|
|
48
|
-
def
|
62
|
+
def parse_xml(path:)
|
49
63
|
data = Ox.load_file(path, { symbolize_keys: true, skip: :skip_none })
|
50
64
|
test_suite = data.root
|
51
65
|
unless test_suite.name == 'testsuite'
|
@@ -62,7 +76,7 @@ module BlinkaReporter
|
|
62
76
|
}
|
63
77
|
end
|
64
78
|
|
65
|
-
def
|
79
|
+
def xml_seed(ox_properties)
|
66
80
|
ox_properties.each do |property|
|
67
81
|
property.nodes.each do |node|
|
68
82
|
return node.attributes[:value] if node.attributes[:name] == 'seed'
|
@@ -72,7 +86,7 @@ module BlinkaReporter
|
|
72
86
|
end
|
73
87
|
|
74
88
|
# Kind is extracted from the second part of spec.models.customer_spec
|
75
|
-
def
|
89
|
+
def xml_test_cases(test_cases)
|
76
90
|
test_cases.map do |test_case|
|
77
91
|
result = {
|
78
92
|
kind: Array(test_case.attributes[:classname]&.split('.'))[1],
|
@@ -100,7 +114,7 @@ module BlinkaReporter
|
|
100
114
|
end
|
101
115
|
end
|
102
116
|
|
103
|
-
def
|
117
|
+
def get_image_path(backtrace)
|
104
118
|
backtrace.each do |text|
|
105
119
|
path = /^(\[Screenshot\]|\[Screenshot Image\]):\s([\S]*)$/.match(text)
|
106
120
|
next if path.nil?
|
@@ -3,32 +3,35 @@ require 'blinka_reporter/error'
|
|
3
3
|
module BlinkaReporter
|
4
4
|
class Config
|
5
5
|
attr_reader(:commit, :host, :repository, :tag, :team_id, :team_secret)
|
6
|
+
DEFAULT_HOST = 'https://www.blinka.app'
|
6
7
|
|
7
|
-
def initialize
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
def initialize(
|
9
|
+
tag:,
|
10
|
+
commit:,
|
11
|
+
repository:,
|
12
|
+
host: nil,
|
13
|
+
team_id:,
|
14
|
+
team_secret:
|
15
|
+
)
|
16
|
+
@commit = commit || find_commit
|
17
|
+
@host = host || DEFAULT_HOST
|
18
|
+
@repository = repository
|
19
|
+
@tag = tag
|
20
|
+
@team_id = team_id
|
21
|
+
@team_secret = team_secret
|
14
22
|
end
|
15
23
|
|
16
24
|
def validate_blinka
|
17
|
-
|
25
|
+
required = [@team_id, @team_secret, @repository]
|
26
|
+
if required.include?(nil) || required.include?('')
|
18
27
|
raise(BlinkaReporter::Error, <<~EOS)
|
19
|
-
Missing configuration, make sure to set
|
20
|
-
|
21
|
-
- BLINKA_TEAM_SECRET
|
22
|
-
- BLINKA_REPOSITORY
|
23
|
-
EOS
|
28
|
+
Missing configuration, make sure to set --team-id, --team-secret, --repository
|
29
|
+
EOS
|
24
30
|
end
|
25
31
|
end
|
26
32
|
|
27
33
|
def find_commit
|
28
|
-
ENV.fetch(
|
29
|
-
'BLINKA_COMMIT',
|
30
|
-
ENV.fetch('HEROKU_TEST_RUN_COMMIT_VERSION', `git rev-parse HEAD`.chomp)
|
31
|
-
)
|
34
|
+
ENV.fetch('HEROKU_TEST_RUN_COMMIT_VERSION', `git rev-parse HEAD`.chomp)
|
32
35
|
end
|
33
36
|
end
|
34
37
|
end
|
@@ -11,31 +11,29 @@ module Minitest
|
|
11
11
|
def plugin_blinka_options(opts, options); end
|
12
12
|
|
13
13
|
module BlinkaPlugin
|
14
|
-
REPORT_PATH = 'blinka_results.json'.freeze
|
15
14
|
class Reporter < Minitest::StatisticsReporter
|
16
15
|
attr_accessor :tests
|
17
16
|
|
18
|
-
def initialize(io = $stdout, options = {})
|
19
|
-
super
|
20
|
-
self.tests = []
|
21
|
-
end
|
22
|
-
|
23
17
|
def record(test)
|
24
18
|
super
|
19
|
+
self.tests ||= []
|
25
20
|
tests << test
|
26
21
|
end
|
27
22
|
|
28
23
|
def report
|
29
24
|
super
|
30
25
|
|
31
|
-
json_report
|
32
|
-
rescue BlinkaReporter::
|
26
|
+
json_report
|
27
|
+
rescue BlinkaReporter::Error => error
|
33
28
|
puts(error)
|
34
29
|
end
|
35
30
|
|
36
31
|
private
|
37
32
|
|
38
|
-
def json_report
|
33
|
+
def json_report
|
34
|
+
report_path = ENV['BLINKA_PATH']
|
35
|
+
return if report_path.nil? || report_path.eql?('')
|
36
|
+
|
39
37
|
result = {
|
40
38
|
total_time: total_time,
|
41
39
|
nbr_tests: count,
|
@@ -46,34 +44,13 @@ module Minitest
|
|
46
44
|
BlinkaReporter::MinitestAdapter.new(test_result).report
|
47
45
|
end
|
48
46
|
}
|
49
|
-
result = append_previous(result) if append
|
50
47
|
|
51
|
-
File.open(
|
48
|
+
File.open(report_path, 'w+') do |file|
|
52
49
|
file.write(JSON.pretty_generate(result))
|
53
50
|
end
|
54
51
|
|
55
52
|
puts
|
56
|
-
puts("Test results written to `#{
|
57
|
-
end
|
58
|
-
|
59
|
-
private
|
60
|
-
|
61
|
-
def parse_report
|
62
|
-
return unless File.exist?(REPORT_PATH)
|
63
|
-
JSON.parse(File.read(REPORT_PATH), symbolize_names: true)
|
64
|
-
end
|
65
|
-
|
66
|
-
def append_previous(result)
|
67
|
-
previous = parse_report
|
68
|
-
return if previous.nil?
|
69
|
-
return if result[:commit] != previous[:commit]
|
70
|
-
return if result[:tag] != previous[:tag]
|
71
|
-
|
72
|
-
result[:total_time] += previous[:total_time] || 0
|
73
|
-
result[:nbr_tests] += previous[:nbr_tests] || 0
|
74
|
-
result[:nbr_assertions] += previous[:nbr_assertions] || 0
|
75
|
-
result[:results] += previous[:results] || []
|
76
|
-
result
|
53
|
+
puts("Test results written to `#{report_path}`")
|
77
54
|
end
|
78
55
|
end
|
79
56
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blinka-reporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Wessman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|