ndr_dev_support 5.6.0 → 5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e945839e116f3076fe950ec01ddeb9a9442bfc1bf2132460bf5d2a15d983d362
4
- data.tar.gz: a39d1a0b73260aa8c45ccd48e6f3c1478ac1db86a18952084b0d35bfa2b7c8a3
3
+ metadata.gz: 597318cf10af72895cde73338ece46a13d00893ec14c240ee24b4063c68bfef9
4
+ data.tar.gz: af273055a5d011e8897bcdbd164cd9d31b99175ad48c862de84ed4765cff6644
5
5
  SHA512:
6
- metadata.gz: 2052481ce02c0fcb3947778df3132a2ce76d2848f8748970494a490926fcb8764275e953ab1f3169710325a774087deeb901bd70c676cc0b2bd1380945fb0610
7
- data.tar.gz: 0a97dd68a18fbbc247a618f9c4fe23b3d66552c8971dba5dd54380f9c019d466c5cccea02bf5b498577ea8230723d95e7f36753c19c1b42556184c79ab7bc571
6
+ metadata.gz: 2368ad56bd91b4f48815998b8e4ccf5ed0fde7d62c337e99222ccc77c16619eaf696d5b30fe78be9048b256787da199d9b23142c2577e8ec2fd2a05021af1a8f
7
+ data.tar.gz: 8ef7192f3b4f8404982bdab883e2cde34c79bbaae9f58a22ef78a409a0eda1a6b492af343e72db7fe8b8096b042fba35c6d483faf5df171f064059c3af4f06b2
data/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  ## [Unreleased]
2
2
  *no unreleased changes*
3
3
 
4
+ ## 5.7.0 / 2020-03-26
5
+ ### Added
6
+ * Add `ci:brakeman:strict` alternative CI task. (#77)
7
+ * Send `brakeman_filtered_warnings` metrics. (#78)
8
+ * Allow redmine tickets to be updated (but not resolved) when the build fails (#73)
9
+
10
+ ### Fixed
11
+ * Stop including asset compilation caches in the deployment archive.
12
+ * Ensure brakeman alerts aren't sent to Slack if they've been reviewed and filtered out
13
+
4
14
  ## 5.6.0 / 2020-02-14
5
15
  ### Added
6
16
  * Add `flakey_test` to the minitest DSL, to allow sporadic failures to be retried
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- ## NdrDevSupport [![Build Status](https://travis-ci.org/PublicHealthEngland/ndr_dev_support.svg?branch=master)](https://travis-ci.org/PublicHealthEngland/ndr_dev_support) [![Gem Version](https://badge.fury.io/rb/ndr_dev_support.svg)](https://badge.fury.io/rb/ndr_dev_support)
1
+ ## NdrDevSupport [![Maintainability](https://api.codeclimate.com/v1/badges/2b2a644964f2aa930f81/maintainability)](https://codeclimate.com/github/PublicHealthEngland/ndr_dev_support/maintainability) [![Build Status](https://travis-ci.org/PublicHealthEngland/ndr_dev_support.svg?branch=master)](https://travis-ci.org/PublicHealthEngland/ndr_dev_support) [![Gem Version](https://badge.fury.io/rb/ndr_dev_support.svg)](https://badge.fury.io/rb/ndr_dev_support)
2
2
 
3
3
  This is the Public Health England (PHE) National Disease Registers (NDR) Developer Support ruby gem,
4
4
  providing:
data/code_safety.yml CHANGED
@@ -19,7 +19,7 @@ file safety:
19
19
  CHANGELOG.md:
20
20
  comments:
21
21
  reviewed_by: josh.pencheon
22
- safe_revision: 8995f6ed25fa308e541c3d33396b0a30c4f4db80
22
+ safe_revision: 1f4383e983313441ba3b118891dfb1c3ff962368
23
23
  CODE_OF_CONDUCT.md:
24
24
  comments:
25
25
  reviewed_by: timgentry
@@ -35,7 +35,7 @@ file safety:
35
35
  README.md:
36
36
  comments:
37
37
  reviewed_by: josh.pencheon
38
- safe_revision: a2f178853da640112cf3063ca1d640157c9edb9f
38
+ safe_revision: b405f60e921805378ba1f3beaeb10cf1a8503182
39
39
  Rakefile:
40
40
  comments:
41
41
  reviewed_by: josh.pencheon
@@ -99,7 +99,7 @@ file safety:
99
99
  lib/ndr_dev_support/capistrano/svn_cache.rb:
100
100
  comments:
101
101
  reviewed_by: josh.pencheon
102
- safe_revision: 123d0cd32bdf9e0940fac8945985aa9f467616c1
102
+ safe_revision: 2baa360b06290775a961a7573fe08edd18f8312e
103
103
  lib/ndr_dev_support/capistrano/sysadmin_scripts.rb:
104
104
  comments:
105
105
  reviewed_by: josh.pencheon
@@ -147,7 +147,7 @@ file safety:
147
147
  lib/ndr_dev_support/rake_ci/brakeman_helper.rb:
148
148
  comments:
149
149
  reviewed_by: josh.pencheon
150
- safe_revision: d3d238a863c0b016d2d782b1696964fa3f40738b
150
+ safe_revision: 053c9834ca5d402a1f8dc8d09257dc7075a5ec06
151
151
  lib/ndr_dev_support/rake_ci/commit_cop.rb:
152
152
  comments:
153
153
  reviewed_by: josh.pencheon
@@ -179,7 +179,7 @@ file safety:
179
179
  lib/ndr_dev_support/rake_ci/redmine/ticket_resolver.rb:
180
180
  comments:
181
181
  reviewed_by: josh.pencheon
182
- safe_revision: 2154aa7f32e731933ff6091b8f42b2b014028a6a
182
+ safe_revision: 12aad1254186ee9ce0fde263bf8dccf46cdfebe2
183
183
  lib/ndr_dev_support/rake_ci/simple_cov_helper.rb:
184
184
  comments:
185
185
  reviewed_by: timgentry
@@ -215,7 +215,7 @@ file safety:
215
215
  lib/ndr_dev_support/version.rb:
216
216
  comments:
217
217
  reviewed_by: josh.pencheon
218
- safe_revision: 8995f6ed25fa308e541c3d33396b0a30c4f4db80
218
+ safe_revision: 1f4383e983313441ba3b118891dfb1c3ff962368
219
219
  lib/tasks/audit_code.rake:
220
220
  comments: Identical to the version reviewed by josh.pencheon when contained within
221
221
  ndr_support
@@ -224,7 +224,7 @@ file safety:
224
224
  lib/tasks/ci/brakeman.rake:
225
225
  comments:
226
226
  reviewed_by: josh.pencheon
227
- safe_revision: 908c04663ca6949259f41fe38ee705f03774cbdf
227
+ safe_revision: 053c9834ca5d402a1f8dc8d09257dc7075a5ec06
228
228
  lib/tasks/ci/bundle_audit.rake:
229
229
  comments:
230
230
  reviewed_by: josh.pencheon
@@ -248,7 +248,7 @@ file safety:
248
248
  lib/tasks/ci/minitest.rake:
249
249
  comments:
250
250
  reviewed_by: josh.pencheon
251
- safe_revision: 29b7dc86673f4f876667db95e79a57b20766077e
251
+ safe_revision: 12aad1254186ee9ce0fde263bf8dccf46cdfebe2
252
252
  lib/tasks/ci/notes.rake:
253
253
  comments:
254
254
  reviewed_by: timgentry
@@ -260,7 +260,7 @@ file safety:
260
260
  lib/tasks/ci/redmine.rake:
261
261
  comments:
262
262
  reviewed_by: josh.pencheon
263
- safe_revision: 958ef09c5cf50bb50348e6bff949e3e5989254f9
263
+ safe_revision: 12aad1254186ee9ce0fde263bf8dccf46cdfebe2
264
264
  lib/tasks/ci/rugged.rake:
265
265
  comments:
266
266
  reviewed_by: josh.pencheon
@@ -288,7 +288,7 @@ file safety:
288
288
  ndr_dev_support.gemspec:
289
289
  comments:
290
290
  reviewed_by: josh.pencheon
291
- safe_revision: a2f178853da640112cf3063ca1d640157c9edb9f
291
+ safe_revision: f4c1ea57d3eb817783fdc47a16169d215f9788a6
292
292
  test/daemon/ci_server_test.rb:
293
293
  comments:
294
294
  reviewed_by: josh.pencheon
@@ -316,7 +316,7 @@ file safety:
316
316
  test/rake_ci/redmine/ticket_resolver_test.rb:
317
317
  comments:
318
318
  reviewed_by: josh.pencheon
319
- safe_revision: 2154aa7f32e731933ff6091b8f42b2b014028a6a
319
+ safe_revision: 12aad1254186ee9ce0fde263bf8dccf46cdfebe2
320
320
  test/test_helper.rb:
321
321
  comments:
322
322
  reviewed_by: josh.pencheon
@@ -17,7 +17,13 @@ Capistrano::Configuration.instance(:must_exist).load do
17
17
  system("rm -rf #{cache}")
18
18
  end
19
19
  end
20
+
21
+ desc 'Ensures compilation artefacts are removed from the compressed archive sent to the server'
22
+ task :augment_copy_exclude do
23
+ set :copy_exclude, (fetch(:copy_exclude) || []) + %w[node_modules tmp/*]
24
+ end
20
25
  end
21
26
 
27
+ before 'deploy:update_code', 'ndr_dev_support:augment_copy_exclude'
22
28
  before 'deploy:update_code', 'ndr_dev_support:remove_svn_cache_if_needed'
23
29
  end
@@ -10,7 +10,9 @@ module NdrDevSupport
10
10
 
11
11
  attr_reader :new_fingerprints, :old_fingerprints, :tracker
12
12
 
13
- def run
13
+ def run(strict:)
14
+ @strict = strict
15
+
14
16
  @tracker = ::Brakeman.run(app_path: '.')
15
17
 
16
18
  last_commit_fingerprints = load_last_commit_data
@@ -22,10 +24,16 @@ module NdrDevSupport
22
24
  end
23
25
  end
24
26
 
27
+ # All warnings (including those we've flagged as false positives)
25
28
  def warnings
26
29
  @tracker.warnings
27
30
  end
28
31
 
32
+ # Only the warnings we haven't flagged as false positives (i.e. the outstanding ones)
33
+ def filtered_warnings
34
+ @tracker.filtered_warnings
35
+ end
36
+
29
37
  def warning_counts_by_confidence
30
38
  return @warning_counts_by_confidence if @warning_counts_by_confidence
31
39
 
@@ -36,13 +44,90 @@ module NdrDevSupport
36
44
  @warning_counts_by_confidence
37
45
  end
38
46
 
47
+ def filtered_warning_counts_by_confidence
48
+ return @filtered_warning_counts_by_confidence if @filtered_warning_counts_by_confidence
49
+
50
+ @filtered_warning_counts_by_confidence = {}
51
+ filtered_warnings.group_by(&:confidence).each do |confidence, grouped_warnings|
52
+ @filtered_warning_counts_by_confidence[confidence] = grouped_warnings.count
53
+ end
54
+ @filtered_warning_counts_by_confidence
55
+ end
56
+
39
57
  def current_fingerprints
40
- @current_fingerprints ||= warnings.map(&:fingerprint).to_set
58
+ @current_fingerprints ||= filtered_warnings.map(&:fingerprint).to_set
41
59
  end
42
60
 
43
61
  def save_current_fingerprints
44
62
  save_current_commit_data(current_fingerprints)
45
63
  end
64
+
65
+ def metrics
66
+ metrics = []
67
+
68
+ ::Brakeman::Warning::TEXT_CONFIDENCE.each do |confidence, text|
69
+ overall_metric = {
70
+ name: 'brakeman_warnings',
71
+ type: :gauge,
72
+ label_set: { confidence: text },
73
+ value: warning_counts_by_confidence[confidence] || 0
74
+ }
75
+ filtered_metric = {
76
+ name: 'brakeman_filtered_warnings',
77
+ type: :gauge,
78
+ label_set: { confidence: text },
79
+ value: filtered_warning_counts_by_confidence[confidence] || 0
80
+ }
81
+ metrics << overall_metric << filtered_metric
82
+ puts overall_metric.inspect
83
+ puts filtered_metric.inspect
84
+ end
85
+
86
+ metrics
87
+ end
88
+
89
+ def attachments
90
+ attachments = []
91
+
92
+ if @strict && current_fingerprints.any?
93
+ # all warnings found
94
+ attachment = {
95
+ color: 'danger',
96
+ title: "#{current_fingerprints.size} Brakeman warning(s) :rotating_light:",
97
+ text: '_Brakeman_ warning fingerprint(s):' \
98
+ "```#{current_fingerprints.to_a.join("\n")}```",
99
+ footer: 'bundle exec rake ci:brakeman:fingerprint_details FINGERPRINTS=...',
100
+ mrkdwn_in: ['text']
101
+ }
102
+ attachments << attachment
103
+ puts attachment.inspect
104
+ elsif new_fingerprints.any?
105
+ # new warnings found
106
+ attachment = {
107
+ color: 'danger',
108
+ title: "#{new_fingerprints.size} new Brakeman warning(s) :rotating_light:",
109
+ text: '_Brakeman_ warning fingerprint(s):' \
110
+ "```#{new_fingerprints.to_a.join("\n")}```",
111
+ footer: 'bundle exec rake ci:brakeman:fingerprint_details FINGERPRINTS=...',
112
+ mrkdwn_in: ['text']
113
+ }
114
+ attachments << attachment
115
+ puts attachment.inspect
116
+ end
117
+
118
+ unless old_fingerprints.empty?
119
+ # old warnings missing
120
+ attachment = {
121
+ color: 'good',
122
+ title: "#{old_fingerprints.size} Brakeman warning(s) resolved :+1:",
123
+ footer: 'bundle exec rake ci:brakeman'
124
+ }
125
+ attachments << attachment
126
+ puts attachment.inspect
127
+ end
128
+
129
+ attachments
130
+ end
46
131
  end
47
132
  end
48
133
  end
@@ -36,13 +36,13 @@ module NdrDevSupport
36
36
  @hostname = hostname
37
37
  end
38
38
 
39
- def process_commit(user, revision, message)
39
+ def process_commit(user, revision, message, tests_passed)
40
40
  resolved_tickets = []
41
41
 
42
42
  each_ticket_from(message) do |ticket, resolved|
43
- update_ticket(message, user, revision, ticket, resolved)
43
+ update_ticket(message, user, revision, ticket, resolved, tests_passed)
44
44
 
45
- resolved_tickets << ticket if resolved
45
+ resolved_tickets << ticket if resolved && tests_passed
46
46
  end
47
47
 
48
48
  resolved_tickets
@@ -62,13 +62,17 @@ module NdrDevSupport
62
62
  end
63
63
  end
64
64
 
65
- def update_payload(message, user, revision, ticket_closed, resolved)
65
+ def update_payload(message, user, revision, ticket_closed, resolved, tests_passed)
66
+ if resolved && !ticket_closed && !tests_passed
67
+ message += "\n\n*Automated tests did not pass successfully, so ticket status left unchanged.*"
68
+ end
69
+
66
70
  payload = {
67
71
  notes: "_#{resolved ? 'Resolved' : 'Referenced'} by #{user} in #{revision}_:" \
68
72
  "#{resolved ? message.gsub(CLOSE_REGEX, '+\1+') : message}"
69
73
  }
70
74
 
71
- payload[:status_id] = 3 if resolved && !ticket_closed
75
+ payload[:status_id] = 3 if resolved && !ticket_closed && tests_passed
72
76
  payload
73
77
  end
74
78
 
@@ -83,7 +87,7 @@ module NdrDevSupport
83
87
  end
84
88
 
85
89
  def update_ticket(message, user, revision, ticket, resolved)
86
- payload = update_payload(message, user, revision, ticket_closed?(ticket), resolved)
90
+ payload = update_payload(message, user, revision, ticket_closed?(ticket), resolved, tests_passed)
87
91
 
88
92
  http.send_request('PUT',
89
93
  "/issues/#{ticket.to_i}.json",
@@ -2,5 +2,5 @@
2
2
  # This defines the NdrDevSupport version. If you change it, rebuild and commit the gem.
3
3
  # Use "rake build" to build the gem, see rake -T for all bundler rake tasks (and our own).
4
4
  module NdrDevSupport
5
- VERSION = '5.6.0'.freeze
5
+ VERSION = '5.7.0'.freeze
6
6
  end
@@ -11,48 +11,35 @@ namespace :ci do
11
11
 
12
12
  brakeman = NdrDevSupport::RakeCI::BrakemanHelper.new
13
13
  brakeman.commit = @commit
14
- brakeman.run
15
-
16
- Brakeman::Warning::TEXT_CONFIDENCE.each do |confidence, text|
17
- metric = {
18
- name: 'brakeman_warnings',
19
- type: :gauge,
20
- label_set: { confidence: text },
21
- value: brakeman.warning_counts_by_confidence[confidence] || 0
22
- }
23
- @metrics << metric
24
- puts metric.inspect
25
- end
26
-
27
- unless brakeman.new_fingerprints.empty?
28
- # new warnings found
29
- attachment = {
30
- color: 'danger',
31
- title: "#{brakeman.new_fingerprints.size} new Brakeman warning(s) :rotating_light:",
32
- text: '_Brakeman_ warning fingerprint(s):' \
33
- "```#{brakeman.new_fingerprints.to_a.join("\n")}```",
34
- footer: 'bundle exec rake ci:brakeman:fingerprint_details FINGERPRINTS=...',
35
- mrkdwn_in: ['text']
36
- }
37
- @attachments << attachment
38
- puts attachment.inspect
39
- end
14
+ brakeman.run(strict: false)
40
15
 
41
- unless brakeman.old_fingerprints.empty?
42
- # old warnings missing
43
- attachment = {
44
- color: 'good',
45
- title: "#{brakeman.old_fingerprints.size} Brakeman warning(s) resolved :+1:",
46
- footer: 'bundle exec rake ci:brakeman'
47
- }
48
- @attachments << attachment
49
- puts attachment.inspect
50
- end
16
+ @metrics.concat(brakeman.metrics)
17
+ @attachments.concat(brakeman.attachments)
51
18
 
52
19
  brakeman.save_current_fingerprints
53
20
  end
54
21
 
55
22
  namespace :brakeman do
23
+ desc "Brakeman (strict mode - all issues must be reviewed by Brakeman's interactive mode)"
24
+ task strict: 'ci:rugged:setup' do
25
+ next unless defined?(Rails)
26
+
27
+ require 'ndr_dev_support/rake_ci/brakeman_helper'
28
+ # Usage: bundle exec rake ci:brakeman:strict
29
+
30
+ @metrics ||= []
31
+ @attachments ||= []
32
+
33
+ brakeman = NdrDevSupport::RakeCI::BrakemanHelper.new
34
+ brakeman.commit = @commit
35
+ brakeman.run(strict: true)
36
+
37
+ @metrics.concat(brakeman.metrics)
38
+ @attachments.concat(brakeman.attachments)
39
+
40
+ brakeman.save_current_fingerprints
41
+ end
42
+
56
43
  desc 'Brakeman fingerprint details'
57
44
  task fingerprint_details: 'ci:rugged:setup' do
58
45
  # Usage: bundle exec rake ci:brakeman:fingerprint_details FINGERPRINTS=fp1,fp2,...
@@ -47,10 +47,9 @@ namespace :ci do
47
47
  # Test(s) ran
48
48
  Rake::Task['ci:simplecov:process'].invoke
49
49
 
50
- if hash[:statistics][:failures].zero? && hash[:statistics][:errors].zero? &&
51
- Rake::Task.task_defined?('ci:redmine:update_tickets')
52
- # Test(s) passing
53
- Rake::Task['ci:redmine:update_tickets'].invoke
50
+ if Rake::Task.task_defined?('ci:redmine:update_tickets')
51
+ tests_passed = hash[:statistics][:failures].zero? && hash[:statistics][:errors].zero?
52
+ Rake::Task['ci:redmine:update_tickets'].invoke(tests_passed)
54
53
  end
55
54
 
56
55
  @attachments.concat(hash[:attachments])
@@ -12,7 +12,7 @@ namespace :ci do
12
12
  end
13
13
 
14
14
  desc 'Update Redmine tickets'
15
- task update_tickets: ['ci:rugged:setup', 'ci:redmine:setup'] do
15
+ task :update_tickets, [:tests_passed] => ['ci:rugged:setup', 'ci:redmine:setup'] do |task, args|
16
16
  api_key = ENV['REDMINE_API_KEY']
17
17
  hostname = ENV['REDMINE_HOSTNAME']
18
18
  next if api_key.nil? || hostname.nil?
@@ -27,7 +27,7 @@ namespace :ci do
27
27
  ticket_resolver = NdrDevSupport::RakeCI::Redmine::TicketResolver.new(api_key, hostname)
28
28
  resolved_tickets = ticket_resolver.process_commit(@commit.author[:name],
29
29
  @friendly_revision_name,
30
- @commit.message)
30
+ @commit.message, args.tests_passed)
31
31
  rescue
32
32
  @attachments << {
33
33
  color: 'danger',
@@ -57,5 +57,5 @@ Gem::Specification.new do |spec|
57
57
 
58
58
  spec.add_development_dependency 'bundler'
59
59
  spec.add_development_dependency 'mocha'
60
- spec.add_development_dependency 'rake', '~> 10.0'
60
+ spec.add_development_dependency 'rake', '~> 12.3', '>= 12.3.3'
61
61
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ndr_dev_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.6.0
4
+ version: 5.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - NCRS Development Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-14 00:00:00.000000000 Z
11
+ date: 2020-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -366,14 +366,20 @@ dependencies:
366
366
  requirements:
367
367
  - - "~>"
368
368
  - !ruby/object:Gem::Version
369
- version: '10.0'
369
+ version: '12.3'
370
+ - - ">="
371
+ - !ruby/object:Gem::Version
372
+ version: 12.3.3
370
373
  type: :development
371
374
  prerelease: false
372
375
  version_requirements: !ruby/object:Gem::Requirement
373
376
  requirements:
374
377
  - - "~>"
375
378
  - !ruby/object:Gem::Version
376
- version: '10.0'
379
+ version: '12.3'
380
+ - - ">="
381
+ - !ruby/object:Gem::Version
382
+ version: 12.3.3
377
383
  description: Provides support to developers of NDR projects
378
384
  email: []
379
385
  executables: []