pig-ci-rails 0.1.5 → 0.2.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/gempush.yml +29 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +32 -10
- data/config/locales/pig_ci/en.yml +3 -0
- data/lib/pig_ci.rb +12 -0
- data/lib/pig_ci/api/reports.rb +4 -1
- data/lib/pig_ci/configuration.rb +7 -0
- data/lib/pig_ci/report.rb +14 -0
- data/lib/pig_ci/summary.rb +1 -0
- data/lib/pig_ci/summary/ci.rb +43 -0
- data/lib/pig_ci/version.rb +1 -1
- data/pig_ci.gemspec +11 -12
- metadata +32 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 45e75a450ac91998d1c684580aadb2f2beab4dc4b12aefc2b1cc39ff18d6aced
|
4
|
+
data.tar.gz: 35ceebb576bae40eaeb17566ae3cfa764e165c68e4c2680f4257b1046849d79d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d59558555c2138ea84554770b9e296c5e49d7f3c9b50f2913bf7d5a3b64be795e947440cf297665e9e726bae9ad5ab1934fec67f8194ed95692c8555d99b0b4b
|
7
|
+
data.tar.gz: 74e3514d08d9021ab082f4e75c3edc8bf7e7c369b10a83583f96ec701e1f312325e1bf338286a168793eb06eb24de0aa54dac6540932fadc83ba26d8ba05d11c
|
@@ -0,0 +1,29 @@
|
|
1
|
+
name: Build & Publish Ruby Gem
|
2
|
+
|
3
|
+
on:
|
4
|
+
create:
|
5
|
+
tags:
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
build:
|
9
|
+
name: Build + Publish
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
|
12
|
+
steps:
|
13
|
+
- uses: actions/checkout@v2
|
14
|
+
- name: Set up Ruby 2.6
|
15
|
+
uses: actions/setup-ruby@v1
|
16
|
+
with:
|
17
|
+
version: 2.6.x
|
18
|
+
|
19
|
+
- name: Publish to GPR
|
20
|
+
run: |
|
21
|
+
mkdir -p $HOME/.gem
|
22
|
+
touch $HOME/.gem/credentials
|
23
|
+
chmod 0600 $HOME/.gem/credentials
|
24
|
+
printf -- "---\n:github: Bearer ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
25
|
+
gem build *.gemspec
|
26
|
+
gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
|
27
|
+
env:
|
28
|
+
GEM_HOST_API_KEY: ${{secrets.GPR_AUTH_TOKEN}}
|
29
|
+
OWNER: MikeRogers0
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.6.5
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.3.0 (In Development)
|
4
|
+
|
5
|
+
* TODO: Deprecate pigci.com integration.
|
6
|
+
|
7
|
+
## 0.2.0
|
8
|
+
|
9
|
+
* [Updating TravisCI to test latest ruby versions](https://github.com/PigCI/pig-ci-rails/pull/15)
|
10
|
+
* [Update rake requirement from ~> 12.3 to ~> 13.0](https://github.com/PigCI/pig-ci-rails/pull/14)
|
11
|
+
* [Update rspec requirement from ~> 3.8.0 to ~> 3.9.0](https://github.com/PigCI/pig-ci-rails/pull/16)
|
12
|
+
* [Update webmock requirement from ~> 3.7.0 to ~> 3.8.0](https://github.com/PigCI/pig-ci-rails/pull/17)
|
13
|
+
* [Adding config.thresholds, this allows standalone usage without pigci.com](https://github.com/PigCI/pig-ci-rails/pull/18) & [Replace references for limit to be threshold](https://github.com/PigCI/pig-ci-rails/pull/21)
|
14
|
+
* Setting up repo to publish gem when new tags are created.
|
15
|
+
|
3
16
|
## 0.1.5
|
4
17
|
|
5
18
|
* [Widen i18n gem version requirement](https://github.com/PigCI/pig-ci-rails/pull/12)
|
data/README.md
CHANGED
@@ -45,22 +45,26 @@ require 'pig_ci'
|
|
45
45
|
PigCI.start
|
46
46
|
```
|
47
47
|
|
48
|
-
###
|
48
|
+
### Configuring thresholds
|
49
49
|
|
50
|
-
|
50
|
+
Configuring the thresholds will allow your test suite to fail in CI. You will need to configure the thresholds depending on your application.
|
51
51
|
|
52
52
|
```ruby
|
53
53
|
# In spec/rails_helper.rb
|
54
54
|
require 'pig_ci'
|
55
55
|
PigCI.start do |config|
|
56
|
-
#
|
57
|
-
config.
|
58
|
-
end
|
59
|
-
```
|
56
|
+
# Maximum memory in megabytes
|
57
|
+
config.thresholds.memory = 350
|
60
58
|
|
61
|
-
|
59
|
+
# Maximum time per a HTTP request
|
60
|
+
config.thresholds.request_time = 250
|
62
61
|
|
63
|
-
|
62
|
+
# Maximum database calls per a request
|
63
|
+
config.thresholds.database_request = 35
|
64
|
+
end if RSpec.configuration.files_to_run.count > 1
|
65
|
+
```
|
66
|
+
|
67
|
+
### Configuring other options
|
64
68
|
|
65
69
|
This gems was setup to be configured by passing a block to the `PigCI.start` method, e.g:
|
66
70
|
|
@@ -77,9 +81,27 @@ end # if RSpec.configuration.files_to_run.count > 1
|
|
77
81
|
|
78
82
|
You can see the full configuration options [lib/pig_ci.rb](https://github.com/PigCI/pig-ci-rails/blob/master/lib/pig_ci.rb#L21).
|
79
83
|
|
84
|
+
|
85
|
+
### With [PigCI.com](https://pigci.com) - For sharing runs as a team via CI
|
86
|
+
|
87
|
+
_Note: This feature will be deprecated in the future. Instead use "Configuring thresholds" to have CI pass/fail._
|
88
|
+
|
89
|
+
You can hookup your project to PigCI.com, this will fail PRs when metric thresholds are exceeded (e.g. your app see a big increase in memory).
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
# In spec/rails_helper.rb
|
93
|
+
require 'pig_ci'
|
94
|
+
PigCI.start do |config|
|
95
|
+
# When you connect your project, you'll be given an API key.
|
96
|
+
config.api_key = 'your-api-key-here'
|
97
|
+
end
|
98
|
+
```
|
99
|
+
|
100
|
+
It's a great way to track metrics over time & support this project.
|
101
|
+
|
80
102
|
### Framework support
|
81
103
|
|
82
|
-
Currently this gem only supports Ruby on Rails.
|
104
|
+
Currently this gem only supports Ruby on Rails tested via RSpec.
|
83
105
|
|
84
106
|
### Metric notes
|
85
107
|
|
@@ -128,12 +150,12 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
128
150
|
|
129
151
|
Features I'd like to add at some point:
|
130
152
|
|
153
|
+
* Add support for "upsert" for when tests are split over multiple machines
|
131
154
|
* HTML output to include branch - Right now they're just timestamps which makes filtering hard.
|
132
155
|
* Document setting branch/commit to handle when CI doesn't set it correctly.
|
133
156
|
* Add rake for submitting reports.
|
134
157
|
* https://rubydoc.info/gems/yard/file/docs/GettingStarted.md - Document the gem so it's easier for people to jump on.
|
135
158
|
* Support ActionCable (when requests have no key).
|
136
|
-
* Add support for "upsert" for when tests are split over multiple machines
|
137
159
|
|
138
160
|
## Contributing
|
139
161
|
|
@@ -2,9 +2,12 @@ en:
|
|
2
2
|
pig_ci:
|
3
3
|
api:
|
4
4
|
reports:
|
5
|
+
success: 'PigCI: Successfully submitted report to pigci.com'
|
5
6
|
error: 'Unable to connect to PigCI API: %{error}'
|
6
7
|
api_error: 'Unable to connect to PigCI API'
|
7
8
|
summary:
|
9
|
+
ci_start: 'PigCI Thresholds Summary:'
|
10
|
+
ci_failure: 'PigCI: This commit has exceeded the thresholds defined in PigCI.thresholds'
|
8
11
|
saved_successfully: PigCI report generated to %{output_directory}
|
9
12
|
title: PigCI Results
|
10
13
|
view_historic_reports: 'Historic Reports'
|
data/lib/pig_ci.rb
CHANGED
@@ -4,6 +4,7 @@ require 'rake'
|
|
4
4
|
|
5
5
|
require 'pig_ci/version'
|
6
6
|
require 'pig_ci/api'
|
7
|
+
require 'pig_ci/configuration'
|
7
8
|
require 'pig_ci/decorator'
|
8
9
|
require 'pig_ci/summary'
|
9
10
|
require 'pig_ci/profiler_engine'
|
@@ -117,6 +118,14 @@ module PigCI
|
|
117
118
|
@locale || :en
|
118
119
|
end
|
119
120
|
|
121
|
+
def thresholds=(values)
|
122
|
+
@thresholds = PigCI::Configuration::Thresholds.new(values)
|
123
|
+
end
|
124
|
+
|
125
|
+
def thresholds
|
126
|
+
@thresholds ||= PigCI::Configuration::Thresholds.new
|
127
|
+
end
|
128
|
+
|
120
129
|
module_function
|
121
130
|
|
122
131
|
def start(&block)
|
@@ -154,6 +163,9 @@ module PigCI
|
|
154
163
|
|
155
164
|
# If they have an API key, share it with PigCI.com
|
156
165
|
PigCI::Api::Reports.new(reports: profiler_engine.reports).share! if PigCI.api_key?
|
166
|
+
|
167
|
+
# Make sure CI fails when metrics are over thresholds.
|
168
|
+
PigCI::Summary::CI.new(reports: profiler_engine.reports).call!
|
157
169
|
end
|
158
170
|
end
|
159
171
|
|
data/lib/pig_ci/api/reports.rb
CHANGED
@@ -5,7 +5,10 @@ class PigCI::Api::Reports < PigCI::Api
|
|
5
5
|
|
6
6
|
def share!
|
7
7
|
response = post_payload
|
8
|
-
|
8
|
+
if response.success?
|
9
|
+
puts I18n.t('pig_ci.api.reports.success')
|
10
|
+
return
|
11
|
+
end
|
9
12
|
|
10
13
|
puts I18n.t('pig_ci.api.reports.error', error: JSON.parse(response.parsed_response || '{}')['error'])
|
11
14
|
rescue JSON::ParserError => _e
|
data/lib/pig_ci/report.rb
CHANGED
@@ -15,6 +15,20 @@ class PigCI::Report
|
|
15
15
|
I18n.t('.name', scope: i18n_scope, locale: PigCI.locale)
|
16
16
|
end
|
17
17
|
|
18
|
+
def max_for(timestamp)
|
19
|
+
sorted_and_formatted_data_for(timestamp).collect { |row| row[:max] }.max
|
20
|
+
end
|
21
|
+
|
22
|
+
def threshold
|
23
|
+
PigCI.thresholds.dig(@i18n_key.to_sym)
|
24
|
+
end
|
25
|
+
|
26
|
+
def over_threshold_for?(timestamp)
|
27
|
+
return false unless threshold.present? && max_for(timestamp).present?
|
28
|
+
|
29
|
+
max_for(timestamp) > threshold
|
30
|
+
end
|
31
|
+
|
18
32
|
def sorted_and_formatted_data_for(timestamp)
|
19
33
|
data_for(timestamp)[@i18n_key.to_sym].sort_by do |data|
|
20
34
|
PigCI.report_row_sort_by(data)
|
data/lib/pig_ci/summary.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'colorized_string'
|
2
|
+
|
3
|
+
class PigCI::Summary::CI < PigCI::Summary
|
4
|
+
def initialize(reports:)
|
5
|
+
@reports = reports
|
6
|
+
@timestamp = PigCI.run_timestamp
|
7
|
+
end
|
8
|
+
|
9
|
+
def call!
|
10
|
+
puts ''
|
11
|
+
puts I18n.t('pig_ci.summary.ci_start')
|
12
|
+
|
13
|
+
over_threshold = false
|
14
|
+
@reports.each do |report|
|
15
|
+
print_report(report)
|
16
|
+
over_threshold = true if report.over_threshold_for?(@timestamp)
|
17
|
+
end
|
18
|
+
|
19
|
+
fail_with_error! if over_threshold
|
20
|
+
puts ''
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def fail_with_error!
|
26
|
+
puts I18n.t('pig_ci.summary.ci_failure')
|
27
|
+
Kernel.exit(2)
|
28
|
+
end
|
29
|
+
|
30
|
+
def print_report(report)
|
31
|
+
max_and_threshold = [
|
32
|
+
report.max_for(@timestamp).to_s,
|
33
|
+
'/',
|
34
|
+
report.threshold
|
35
|
+
].join(' ')
|
36
|
+
|
37
|
+
if report.over_threshold_for?(@timestamp)
|
38
|
+
puts "#{report.i18n_name}: #{ColorizedString[max_and_threshold].colorize(:red)}\n"
|
39
|
+
else
|
40
|
+
puts "#{report.i18n_name}: #{ColorizedString[max_and_threshold].colorize(:green)}\n"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/pig_ci/version.rb
CHANGED
data/pig_ci.gemspec
CHANGED
@@ -13,15 +13,6 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = 'https://github.com/PigCI/pig-ci-rails'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
|
-
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
17
|
-
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
18
|
-
if spec.respond_to?(:metadata)
|
19
|
-
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
20
|
-
else
|
21
|
-
raise 'RubyGems 2.0 or newer is required to protect against ' \
|
22
|
-
'public gem pushes.'
|
23
|
-
end
|
24
|
-
|
25
16
|
# Specify which files should be added to the gem when it is released.
|
26
17
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
27
18
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
@@ -39,10 +30,18 @@ Gem::Specification.new do |spec|
|
|
39
30
|
spec.add_dependency 'terminal-table', '~> 1.8.0'
|
40
31
|
|
41
32
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
42
|
-
spec.add_development_dependency 'rake', '~>
|
43
|
-
spec.add_development_dependency 'webmock', '~> 3.
|
33
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
34
|
+
spec.add_development_dependency 'webmock', '~> 3.8.0'
|
44
35
|
|
45
36
|
spec.add_development_dependency 'json-schema', '~> 2.8.1'
|
46
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
37
|
+
spec.add_development_dependency 'rspec', '~> 3.9.0'
|
47
38
|
spec.add_development_dependency 'simplecov', '~> 0.17.0'
|
39
|
+
spec.add_development_dependency 'yard', '~> 0.9.24'
|
40
|
+
|
41
|
+
spec.post_install_message = [
|
42
|
+
'Thank you for install Pig CI!',
|
43
|
+
'Upgrade Notes:',
|
44
|
+
'The latest version adds a "config.thresholds" option which will replace the pigci.com integration in future.',
|
45
|
+
'See https://github.com/PigCI/pig-ci-rails#configuring-thresholds for more information :)'
|
46
|
+
].join("\n")
|
48
47
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pig-ci-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Rogers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -134,28 +134,28 @@ dependencies:
|
|
134
134
|
requirements:
|
135
135
|
- - "~>"
|
136
136
|
- !ruby/object:Gem::Version
|
137
|
-
version: '
|
137
|
+
version: '13.0'
|
138
138
|
type: :development
|
139
139
|
prerelease: false
|
140
140
|
version_requirements: !ruby/object:Gem::Requirement
|
141
141
|
requirements:
|
142
142
|
- - "~>"
|
143
143
|
- !ruby/object:Gem::Version
|
144
|
-
version: '
|
144
|
+
version: '13.0'
|
145
145
|
- !ruby/object:Gem::Dependency
|
146
146
|
name: webmock
|
147
147
|
requirement: !ruby/object:Gem::Requirement
|
148
148
|
requirements:
|
149
149
|
- - "~>"
|
150
150
|
- !ruby/object:Gem::Version
|
151
|
-
version: 3.
|
151
|
+
version: 3.8.0
|
152
152
|
type: :development
|
153
153
|
prerelease: false
|
154
154
|
version_requirements: !ruby/object:Gem::Requirement
|
155
155
|
requirements:
|
156
156
|
- - "~>"
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version: 3.
|
158
|
+
version: 3.8.0
|
159
159
|
- !ruby/object:Gem::Dependency
|
160
160
|
name: json-schema
|
161
161
|
requirement: !ruby/object:Gem::Requirement
|
@@ -176,14 +176,14 @@ dependencies:
|
|
176
176
|
requirements:
|
177
177
|
- - "~>"
|
178
178
|
- !ruby/object:Gem::Version
|
179
|
-
version: 3.
|
179
|
+
version: 3.9.0
|
180
180
|
type: :development
|
181
181
|
prerelease: false
|
182
182
|
version_requirements: !ruby/object:Gem::Requirement
|
183
183
|
requirements:
|
184
184
|
- - "~>"
|
185
185
|
- !ruby/object:Gem::Version
|
186
|
-
version: 3.
|
186
|
+
version: 3.9.0
|
187
187
|
- !ruby/object:Gem::Dependency
|
188
188
|
name: simplecov
|
189
189
|
requirement: !ruby/object:Gem::Requirement
|
@@ -198,6 +198,20 @@ dependencies:
|
|
198
198
|
- - "~>"
|
199
199
|
- !ruby/object:Gem::Version
|
200
200
|
version: 0.17.0
|
201
|
+
- !ruby/object:Gem::Dependency
|
202
|
+
name: yard
|
203
|
+
requirement: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - "~>"
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: 0.9.24
|
208
|
+
type: :development
|
209
|
+
prerelease: false
|
210
|
+
version_requirements: !ruby/object:Gem::Requirement
|
211
|
+
requirements:
|
212
|
+
- - "~>"
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: 0.9.24
|
201
215
|
description: A gem for Ruby on Rails that will report key metrics (memory, request
|
202
216
|
time & SQL Requests) for request & feature tests.
|
203
217
|
email:
|
@@ -207,8 +221,10 @@ extensions: []
|
|
207
221
|
extra_rdoc_files: []
|
208
222
|
files:
|
209
223
|
- ".github/FUNDING.yml"
|
224
|
+
- ".github/workflows/gempush.yml"
|
210
225
|
- ".gitignore"
|
211
226
|
- ".rubocop.yml"
|
227
|
+
- ".ruby-version"
|
212
228
|
- ".travis.yml"
|
213
229
|
- CHANGELOG.md
|
214
230
|
- CODE_OF_CONDUCT.md
|
@@ -222,6 +238,7 @@ files:
|
|
222
238
|
- lib/pig_ci.rb
|
223
239
|
- lib/pig_ci/api.rb
|
224
240
|
- lib/pig_ci/api/reports.rb
|
241
|
+
- lib/pig_ci/configuration.rb
|
225
242
|
- lib/pig_ci/decorator.rb
|
226
243
|
- lib/pig_ci/decorator/report_terminal_decorator.rb
|
227
244
|
- lib/pig_ci/metric.rb
|
@@ -239,6 +256,7 @@ files:
|
|
239
256
|
- lib/pig_ci/report/memory.rb
|
240
257
|
- lib/pig_ci/report/request_time.rb
|
241
258
|
- lib/pig_ci/summary.rb
|
259
|
+
- lib/pig_ci/summary/ci.rb
|
242
260
|
- lib/pig_ci/summary/html.rb
|
243
261
|
- lib/pig_ci/summary/terminal.rb
|
244
262
|
- lib/pig_ci/version.rb
|
@@ -250,9 +268,12 @@ files:
|
|
250
268
|
homepage: https://github.com/PigCI/pig-ci-rails
|
251
269
|
licenses:
|
252
270
|
- MIT
|
253
|
-
metadata:
|
254
|
-
|
255
|
-
|
271
|
+
metadata: {}
|
272
|
+
post_install_message: |-
|
273
|
+
Thank you for install Pig CI!
|
274
|
+
Upgrade Notes:
|
275
|
+
The latest version adds a "config.thresholds" option which will replace the pigci.com integration in future.
|
276
|
+
See https://github.com/PigCI/pig-ci-rails#configuring-thresholds for more information :)
|
256
277
|
rdoc_options: []
|
257
278
|
require_paths:
|
258
279
|
- lib
|