ndr_dev_support 5.0.1 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/code_safety.yml +7 -7
- data/lib/minitest/rake_ci_plugin.rb +7 -3
- data/lib/ndr_dev_support/daemon/ci_server.rb +2 -1
- data/lib/ndr_dev_support/rake_ci/concerns/commit_metadata_persistable.rb +15 -16
- data/lib/ndr_dev_support/version.rb +1 -1
- data/lib/tasks/ci/prometheus.rake +7 -5
- data/lib/tasks/ci/redmine.rake +16 -5
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b33b208c31e16b68d55cbbc40f482d5e1d6146ef2190999b9481670706851535
|
4
|
+
data.tar.gz: 3cdc280a9023b1e326680f86e753d67e1124ce185046cc9fefb590b0cd5a9a34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f453af8d2db1f63f3cf9fe95141ba4943b80394a4769f76f194864168d1d20c7499d22f8ee5a5e74ada6cd2261bb95f1cde31b9e99dd1c47046d29fd48b6a06f
|
7
|
+
data.tar.gz: 2470eac3017806dd8ad4707044ffb67e133df973414d729a374525ca3b6e36226ced375335ac4f1c0e1ccf0d74a247f692130c7c532607b526ad31884bf9f46a
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
*no unreleased changes*
|
3
3
|
|
4
|
+
## 5.1.0 / 2019-01-31
|
5
|
+
### Added
|
6
|
+
* CI: send a slack message whenever tests pass
|
7
|
+
* CI: send a slack message if Redmine update fails
|
8
|
+
|
9
|
+
### Fixed
|
10
|
+
* prevent `commit_metadata_persistable` from wiping prior result immediately
|
11
|
+
* fix issue with multiple prometheus clients erasing each others' pushes
|
12
|
+
* CI: improve git cleanup to aid auto-recovery after failure
|
13
|
+
|
4
14
|
## 5.0.1 / 2019-01-31
|
5
15
|
### Fixed
|
6
16
|
* fix CI issue when Rails isn't fully loaded.
|
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:
|
22
|
+
safe_revision: 21bcc26b9d466ccd9283dcb170fbee9138b7bfee
|
23
23
|
CODE_OF_CONDUCT.md:
|
24
24
|
comments:
|
25
25
|
reviewed_by: timgentry
|
@@ -55,7 +55,7 @@ file safety:
|
|
55
55
|
lib/minitest/rake_ci_plugin.rb:
|
56
56
|
comments:
|
57
57
|
reviewed_by: josh.pencheon
|
58
|
-
safe_revision:
|
58
|
+
safe_revision: 9023b4def89e618d3f22333e9fbabd6a816873bf
|
59
59
|
lib/ndr_dev_support.rb:
|
60
60
|
comments:
|
61
61
|
reviewed_by: timgentry
|
@@ -95,7 +95,7 @@ file safety:
|
|
95
95
|
lib/ndr_dev_support/daemon/ci_server.rb:
|
96
96
|
comments:
|
97
97
|
reviewed_by: josh.pencheon
|
98
|
-
safe_revision:
|
98
|
+
safe_revision: 5075331fb3f33cd214c2ca76b199f27ddd743170
|
99
99
|
lib/ndr_dev_support/daemon/stoppable.rb:
|
100
100
|
comments:
|
101
101
|
reviewed_by: josh.pencheon
|
@@ -159,7 +159,7 @@ file safety:
|
|
159
159
|
lib/ndr_dev_support/rake_ci/concerns/commit_metadata_persistable.rb:
|
160
160
|
comments:
|
161
161
|
reviewed_by: josh.pencheon
|
162
|
-
safe_revision:
|
162
|
+
safe_revision: d3347202d1efafc419c1d79d2643f3fdfcbfdd65
|
163
163
|
lib/ndr_dev_support/rake_ci/redmine/ticket_resolver.rb:
|
164
164
|
comments:
|
165
165
|
reviewed_by: josh.pencheon
|
@@ -195,7 +195,7 @@ file safety:
|
|
195
195
|
lib/ndr_dev_support/version.rb:
|
196
196
|
comments:
|
197
197
|
reviewed_by: josh.pencheon
|
198
|
-
safe_revision:
|
198
|
+
safe_revision: 21bcc26b9d466ccd9283dcb170fbee9138b7bfee
|
199
199
|
lib/tasks/audit_code.rake:
|
200
200
|
comments: Identical to the version reviewed by josh.pencheon when contained within
|
201
201
|
ndr_support
|
@@ -236,11 +236,11 @@ file safety:
|
|
236
236
|
lib/tasks/ci/prometheus.rake:
|
237
237
|
comments:
|
238
238
|
reviewed_by: josh.pencheon
|
239
|
-
safe_revision:
|
239
|
+
safe_revision: 2d1b9d19acafebe6ca5f995bf15243abe2847eec
|
240
240
|
lib/tasks/ci/redmine.rake:
|
241
241
|
comments:
|
242
242
|
reviewed_by: josh.pencheon
|
243
|
-
safe_revision:
|
243
|
+
safe_revision: 2d1b9d19acafebe6ca5f995bf15243abe2847eec
|
244
244
|
lib/tasks/ci/rugged.rake:
|
245
245
|
comments:
|
246
246
|
reviewed_by: timgentry
|
@@ -76,7 +76,7 @@ module Minitest
|
|
76
76
|
@current_attachments = []
|
77
77
|
@current_attachments << failures_attachment if failures.positive?
|
78
78
|
@current_attachments << errors_attachment if errors.positive?
|
79
|
-
@current_attachments << pass_attachment if
|
79
|
+
@current_attachments << pass_attachment if passing?
|
80
80
|
@current_attachments
|
81
81
|
end
|
82
82
|
|
@@ -99,13 +99,17 @@ module Minitest
|
|
99
99
|
def pass_attachment
|
100
100
|
{
|
101
101
|
color: 'good',
|
102
|
-
text: 'Tests now pass',
|
102
|
+
text: newly_passing? ? 'Tests now pass! :tada:' : 'Tests passed',
|
103
103
|
footer: 'bundle exec rake ci:minitest'
|
104
104
|
}
|
105
105
|
end
|
106
106
|
|
107
|
+
def passing?
|
108
|
+
!(failures.positive? || errors.positive?)
|
109
|
+
end
|
110
|
+
|
107
111
|
def newly_passing?
|
108
|
-
return false
|
112
|
+
return false unless passing?
|
109
113
|
|
110
114
|
last_commit_hash = load_last_commit_data
|
111
115
|
return false if last_commit_hash.nil?
|
@@ -47,17 +47,18 @@ module NdrDevSupport
|
|
47
47
|
log('running once...')
|
48
48
|
|
49
49
|
git_fetch
|
50
|
+
git_discard_changes
|
50
51
|
git_checkout(MASTER_BRANCH_NAME)
|
51
52
|
|
52
53
|
objectids_between_master_and_remote.each do |oid|
|
53
54
|
log("testing #{oid}...")
|
55
|
+
git_discard_changes
|
54
56
|
git_rebase(oid)
|
55
57
|
|
56
58
|
WithCleanRbenv.with_clean_rbenv do
|
57
59
|
# TODO: rbenv_install
|
58
60
|
bundle_install
|
59
61
|
system('rbenv exec bundle exec rake ci:all --trace')
|
60
|
-
git_discard_changes
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
@@ -13,30 +13,29 @@ module CommitMetadataPersistable
|
|
13
13
|
private
|
14
14
|
|
15
15
|
def load_last_commit_data
|
16
|
-
|
17
|
-
|
18
|
-
if commit.parents.map(&:oid).include?(hash[:commit])
|
19
|
-
# payload from parent commit
|
20
|
-
hash[:payload]
|
21
|
-
end
|
22
|
-
rescue Errno::ENOENT
|
23
|
-
nil
|
16
|
+
load_hash_matching(*commit.parents.map(&:oid))[:payload]
|
24
17
|
end
|
25
18
|
|
26
19
|
def load_current_commit_data
|
27
|
-
|
20
|
+
load_hash_matching(commit.oid)[:payload]
|
21
|
+
end
|
28
22
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
23
|
+
def load_hash_matching(*commits)
|
24
|
+
match = Array.wrap(YAML.load_file(filename)).
|
25
|
+
detect { |h| commits.include? h[:commit] }
|
26
|
+
|
27
|
+
match || {}
|
33
28
|
rescue Errno::ENOENT
|
34
|
-
|
29
|
+
{}
|
35
30
|
end
|
36
31
|
|
37
32
|
def save_current_commit_data(data)
|
38
|
-
|
39
|
-
|
33
|
+
hashes = [
|
34
|
+
load_hash_matching(*commit.parents.map(&:oid)),
|
35
|
+
{ commit: commit.oid, payload: data }
|
36
|
+
].reject(&:blank?)
|
37
|
+
|
38
|
+
File.write(filename, YAML.dump(hashes))
|
40
39
|
end
|
41
40
|
|
42
41
|
def filename
|
@@ -14,7 +14,10 @@ namespace :ci do
|
|
14
14
|
|
15
15
|
desc 'Push Prometheus stats'
|
16
16
|
task publish: :setup do
|
17
|
-
|
17
|
+
gateway = ENV['PROMETHEUS_PUSHGATEWAY']
|
18
|
+
project = ENV['PROMETHEUS_PROJECTNAME']
|
19
|
+
|
20
|
+
next if @metrics.empty? || gateway.nil?
|
18
21
|
|
19
22
|
require 'prometheus/client'
|
20
23
|
require 'prometheus/client/push'
|
@@ -35,7 +38,7 @@ namespace :ci do
|
|
35
38
|
if prometheus.exist?(name)
|
36
39
|
prometheus.get(name)
|
37
40
|
else
|
38
|
-
prometheus.gauge(name, docstring, project:
|
41
|
+
prometheus.gauge(name, docstring, project: project)
|
39
42
|
end
|
40
43
|
gauge.set(label_set, value)
|
41
44
|
else
|
@@ -43,7 +46,7 @@ namespace :ci do
|
|
43
46
|
end
|
44
47
|
end
|
45
48
|
|
46
|
-
client = Prometheus::Client::Push.new(
|
49
|
+
client = Prometheus::Client::Push.new("rake-ci-#{project}", nil, gateway)
|
47
50
|
|
48
51
|
begin
|
49
52
|
client.add(prometheus)
|
@@ -55,8 +58,7 @@ namespace :ci do
|
|
55
58
|
color: 'danger',
|
56
59
|
title: 'Publishing Error',
|
57
60
|
text: 'Build metrics could not be pushed - the Prometheus gateway was uncontactable',
|
58
|
-
footer: 'bundle exec rake ci:prometheus:publish'
|
59
|
-
mrkdwn_in: ['text']
|
61
|
+
footer: 'bundle exec rake ci:prometheus:publish'
|
60
62
|
}
|
61
63
|
end
|
62
64
|
end
|
data/lib/tasks/ci/redmine.rake
CHANGED
@@ -17,12 +17,24 @@ namespace :ci do
|
|
17
17
|
hostname = ENV['REDMINE_HOSTNAME']
|
18
18
|
next if api_key.nil? || hostname.nil?
|
19
19
|
|
20
|
+
resolved_tickets = []
|
21
|
+
@attachments ||= []
|
22
|
+
|
20
23
|
require 'ndr_dev_support/rake_ci/redmine/ticket_resolver'
|
21
24
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
25
|
+
begin
|
26
|
+
ticket_resolver = NdrDevSupport::RakeCI::Redmine::TicketResolver.new(api_key, hostname)
|
27
|
+
resolved_tickets = ticket_resolver.process_commit(@commit.author[:name],
|
28
|
+
@friendly_revision_name,
|
29
|
+
@commit.message)
|
30
|
+
rescue
|
31
|
+
@attachments << {
|
32
|
+
color: 'danger',
|
33
|
+
title: 'Redmine Update Error',
|
34
|
+
text: 'Ticket(s) could not be resolved on Redmine!',
|
35
|
+
footer: 'bundle exec rake ci:redmine:update_tickets'
|
36
|
+
}
|
37
|
+
end
|
26
38
|
|
27
39
|
next if resolved_tickets.empty?
|
28
40
|
resolved_tickets.map! { |ticket_id| "https://#{hostname}/issues/#{ticket_id}" }
|
@@ -36,7 +48,6 @@ namespace :ci do
|
|
36
48
|
footer: 'bundle exec rake ci:minitest',
|
37
49
|
mrkdwn_in: ['text']
|
38
50
|
}
|
39
|
-
@attachments ||= []
|
40
51
|
@attachments << attachment
|
41
52
|
end
|
42
53
|
end
|