pact_broker 2.17.1 → 2.18.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 +18 -0
- data/lib/pact/doc/sort_interactions.rb +1 -1
- data/lib/pact_broker/api/decorators/dashboard_decorator.rb +2 -2
- data/lib/pact_broker/api/pact_broker_urls.rb +5 -1
- data/lib/pact_broker/api/renderers/html_pact_renderer.rb +9 -2
- data/lib/pact_broker/db/clean.rb +49 -0
- data/lib/pact_broker/tasks.rb +1 -0
- data/lib/pact_broker/tasks/clean_task.rb +25 -0
- data/lib/pact_broker/ui/views/matrix/show.haml +1 -1
- data/lib/pact_broker/version.rb +1 -1
- data/spec/lib/pact_broker/db/clean_spec.rb +65 -0
- data/tasks/test_db.rake +8 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be2a40680787302de6ff629cc8522bed68b57c86
|
4
|
+
data.tar.gz: e5fe341fb89a53b5a5b93ba801bfaad429fa34d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40bbfae215d62a2bbed81cdcae2e76236f1c952d5a7b274cb9811052b1a03e29b81e4feb344be5f7e62827c009d913ed057e6a3b0a8006b3a769774b2062c495
|
7
|
+
data.tar.gz: e7867be0091b5ca6e2748f032c0964f1a2409ecdb1f7d578f8dbdf071f6f35c7d4706f82a8333dc37133566027cb951436c3e18752388cb8d7bb3b40475d761f
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
<a name="v2.18.0"></a>
|
2
|
+
### v2.18.0 (2018-04-05)
|
3
|
+
|
4
|
+
|
5
|
+
#### Features
|
6
|
+
|
7
|
+
* add link to matrix from HTML pact page ([f9e3c23](/../../commit/f9e3c23))
|
8
|
+
* sort tags in dashboard API response ([d2fd090](/../../commit/d2fd090))
|
9
|
+
* add rake task to clean unused data to improve performance ([fc705a2](/../../commit/fc705a2))
|
10
|
+
|
11
|
+
|
12
|
+
#### Bug Fixes
|
13
|
+
|
14
|
+
* show JSON view when *any* error occurs creating the HTML view for a pact. ([e4342f0](/../../commit/e4342f0))
|
15
|
+
* only show verification matrix number when verification is present ([766f7c0](/../../commit/766f7c0))
|
16
|
+
* correctly display interaction with nil description in HTML view ([56528d3](/../../commit/56528d3))
|
17
|
+
|
18
|
+
|
1
19
|
<a name="v2.17.1"></a>
|
2
20
|
### v2.17.1 (2018-03-30)
|
3
21
|
|
@@ -8,7 +8,7 @@ module Pact
|
|
8
8
|
private
|
9
9
|
|
10
10
|
def self.sortable_id interaction
|
11
|
-
"#{interaction.description.downcase} #{interaction.response.status} #{(interaction.provider_state || '').downcase}"
|
11
|
+
"#{(interaction.description || '').downcase} #{interaction.response.status} #{(interaction.provider_state || '').downcase}"
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -112,7 +112,7 @@ module PactBroker
|
|
112
112
|
end
|
113
113
|
|
114
114
|
def pact_tags(index_item, base_url)
|
115
|
-
index_item.tag_names.collect do | tag_name |
|
115
|
+
index_item.tag_names.sort.collect do | tag_name |
|
116
116
|
fake_tag = OpenStruct.new(name: tag_name, version: index_item.consumer_version)
|
117
117
|
{
|
118
118
|
name: tag_name,
|
@@ -127,7 +127,7 @@ module PactBroker
|
|
127
127
|
end
|
128
128
|
|
129
129
|
def verification_tags(index_item, base_url)
|
130
|
-
index_item.latest_verification_latest_tags.collect do | tag |
|
130
|
+
index_item.latest_verification_latest_tags.sort{ |t1, t2| t1.name <=> t2.name }.collect do | tag |
|
131
131
|
fake_tag = OpenStruct.new(name: tag.name, version: index_item.provider_version)
|
132
132
|
{
|
133
133
|
name: tag.name,
|
@@ -160,10 +160,14 @@ module PactBroker
|
|
160
160
|
"#{base_url}/webhooks/#{triggered_webhook.webhook_uuid}/trigger/#{triggered_webhook.trigger_uuid}/logs"
|
161
161
|
end
|
162
162
|
|
163
|
-
|
163
|
+
def badge_url_for_latest_pact pact, base_url = ''
|
164
164
|
"#{latest_pact_url(base_url, pact)}/badge.svg"
|
165
165
|
end
|
166
166
|
|
167
|
+
def matrix_url_from_params params, base_url = ''
|
168
|
+
"#{base_url}/matrix/provider/#{url_encode(params.fetch(:provider_name))}/consumer/#{url_encode(params.fetch(:consumer_name))}"
|
169
|
+
end
|
170
|
+
|
167
171
|
def hal_browser_url target_url
|
168
172
|
"/hal-browser/browser.html#" + target_url
|
169
173
|
end
|
@@ -63,6 +63,9 @@ module PactBroker
|
|
63
63
|
<li>
|
64
64
|
<a href=\"#{json_url}\">View in API Browser</a>
|
65
65
|
</li>
|
66
|
+
<li>
|
67
|
+
<a href=\"#{matrix_url}\">View Matrix</a>
|
68
|
+
</li>
|
66
69
|
<li>
|
67
70
|
<a href=\"/\">Home</a>
|
68
71
|
</li>
|
@@ -120,6 +123,10 @@ module PactBroker
|
|
120
123
|
PactBroker::Api::PactBrokerUrls.pact_url '', @pact
|
121
124
|
end
|
122
125
|
|
126
|
+
def matrix_url
|
127
|
+
PactBroker::Api::PactBrokerUrls.matrix_url_from_params consumer_name: @pact.consumer.name, provider_name: @pact.provider.name
|
128
|
+
end
|
129
|
+
|
123
130
|
def badge_target_url
|
124
131
|
base_url
|
125
132
|
end
|
@@ -138,9 +145,9 @@ module PactBroker
|
|
138
145
|
|
139
146
|
def markdown
|
140
147
|
Pact::Doc::Markdown::ConsumerContractRenderer.call consumer_contract
|
141
|
-
rescue
|
148
|
+
rescue StandardError
|
142
149
|
heading = "### A contract between #{@pact.consumer.name} and #{@pact.provider.name}"
|
143
|
-
warning = "_Note: this contract could not be parsed to a Pact, showing raw content instead._"
|
150
|
+
warning = "_Note: this contract could not be parsed to a v1 or v2 Pact, showing raw content instead._"
|
144
151
|
pretty_json = JSON.pretty_generate(@pact.content_hash)
|
145
152
|
"#{heading}\n#{warning}\n```json\n#{pretty_json}\n```\n"
|
146
153
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'sequel'
|
2
|
+
require 'pact_broker/project_root'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module DB
|
6
|
+
class Clean
|
7
|
+
def self.call database_connection, options = {}
|
8
|
+
new(database_connection, options).call
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize database_connection, options = {}
|
12
|
+
@db = database_connection
|
13
|
+
@options = options
|
14
|
+
end
|
15
|
+
|
16
|
+
def call
|
17
|
+
db[:verifications].where(id: db[:materialized_head_matrix].select(:verification_id)).invert.delete
|
18
|
+
pp_ids = db[:materialized_head_matrix].select(:pact_publication_id)
|
19
|
+
|
20
|
+
triggered_webhook_ids = db[:triggered_webhooks].where(pact_publication_id: pp_ids).invert.select(:id)
|
21
|
+
db[:webhook_executions].where(triggered_webhook_id: triggered_webhook_ids).delete
|
22
|
+
db[:triggered_webhooks].where(id: triggered_webhook_ids).delete
|
23
|
+
db[:webhook_executions].where(pact_publication_id: pp_ids).invert.delete
|
24
|
+
|
25
|
+
db[:pact_publications].where(id: pp_ids).invert.delete
|
26
|
+
|
27
|
+
referenced_pact_version_ids = db[:pact_publications].select(:pact_version_id).collect{ | h| h[:pact_version_id] } +
|
28
|
+
db[:verifications].select(:pact_version_id).collect{ | h| h[:pact_version_id] }
|
29
|
+
db[:pact_versions].where(id: referenced_pact_version_ids).invert.delete
|
30
|
+
|
31
|
+
referenced_version_ids = db[:pact_publications].select(:consumer_version_id).collect{ | h| h[:consumer_version_id] } +
|
32
|
+
db[:verifications].select(:provider_version_id).collect{ | h| h[:provider_version_id] }
|
33
|
+
|
34
|
+
db[:tags].where(version_id: referenced_version_ids).invert.delete
|
35
|
+
db[:versions].where(id: referenced_version_ids).invert.delete
|
36
|
+
|
37
|
+
db[:materialized_matrix].delete
|
38
|
+
db[:materialized_matrix].insert(db[:matrix].select_all)
|
39
|
+
db[:materialized_head_matrix].delete
|
40
|
+
db[:materialized_head_matrix].insert(db[:head_matrix].select_all)
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
attr_reader :db
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/pact_broker/tasks.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
module PactBroker
|
2
|
+
module DB
|
3
|
+
class CleanTask < ::Rake::TaskLib
|
4
|
+
|
5
|
+
attr_accessor :database_connection
|
6
|
+
|
7
|
+
def initialize &block
|
8
|
+
rake_task &block
|
9
|
+
end
|
10
|
+
|
11
|
+
def rake_task &block
|
12
|
+
namespace :pact_broker do
|
13
|
+
namespace :db do
|
14
|
+
desc "Clean unused pacts and verifications from database"
|
15
|
+
task :clean do | t, args |
|
16
|
+
require 'pact_broker/db/clean'
|
17
|
+
instance_eval(&block)
|
18
|
+
PactBroker::DB::Clean.call(database_connection)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -144,7 +144,7 @@
|
|
144
144
|
= tag.name
|
145
145
|
%td.verification-result{class: line.verification_status_class, "title": line.inherited_verification_message, "data-toggle": "tooltip"}
|
146
146
|
%a{href: line.verification_status_url}
|
147
|
-
- if options.all_rows_checked
|
147
|
+
- if options.all_rows_checked && line.number
|
148
148
|
= "#{line.verification_status} (number #{line.number})"
|
149
149
|
- else
|
150
150
|
= line.verification_status
|
data/lib/pact_broker/version.rb
CHANGED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'pact_broker/db/clean'
|
2
|
+
|
3
|
+
IS_MYSQL = !!DB.mysql?
|
4
|
+
|
5
|
+
module PactBroker
|
6
|
+
module DB
|
7
|
+
describe Clean do
|
8
|
+
# Inner queries don't work on MySQL. Seriously, MySQL???
|
9
|
+
describe ".call", pending: IS_MYSQL do
|
10
|
+
let(:td) { TestDataBuilder.new }
|
11
|
+
let(:db) { PactBroker::DB.connection }
|
12
|
+
|
13
|
+
before do
|
14
|
+
td.create_pact_with_hierarchy("Foo", "0", "Bar")
|
15
|
+
.create_consumer_version_tag("prod")
|
16
|
+
.create_consumer_version("1")
|
17
|
+
.create_pact
|
18
|
+
.create_consumer_version_tag("prod")
|
19
|
+
.comment("keep")
|
20
|
+
.create_verification(provider_version: "20")
|
21
|
+
.create_consumer_version("2")
|
22
|
+
.create_pact
|
23
|
+
.comment("don't keep")
|
24
|
+
.create_webhook
|
25
|
+
.create_triggered_webhook
|
26
|
+
.create_webhook_execution
|
27
|
+
.create_deprecated_webhook_execution
|
28
|
+
.create_verification(provider_version: "30")
|
29
|
+
.create_consumer_version("3")
|
30
|
+
.create_pact
|
31
|
+
.comment("keep")
|
32
|
+
.create_verification(provider_version: "40")
|
33
|
+
.create_verification(provider_version: "50", number: 2)
|
34
|
+
end
|
35
|
+
|
36
|
+
subject { Clean.call(PactBroker::DB.connection) }
|
37
|
+
|
38
|
+
it "does not delete any rows in the head matrix" do
|
39
|
+
head_matrix_before = db[:head_matrix].select_all
|
40
|
+
subject
|
41
|
+
head_matrix_after = db[:head_matrix].select_all
|
42
|
+
expect(head_matrix_before).to eq head_matrix_after
|
43
|
+
end
|
44
|
+
|
45
|
+
it "deletes rows that aren't the latest or latest tagged" do
|
46
|
+
subject
|
47
|
+
expect(db[:materialized_matrix].where(consumer_version_number: "2").count).to eq 0
|
48
|
+
end
|
49
|
+
|
50
|
+
it "deletes orphan pact_versions" do
|
51
|
+
subject
|
52
|
+
expect(db[:pact_versions].count).to eq 2
|
53
|
+
end
|
54
|
+
|
55
|
+
it "deletes orphan versions" do
|
56
|
+
subject
|
57
|
+
expect(db[:versions].where(number: "20").count).to be 1
|
58
|
+
expect(db[:versions].where(number: "30").count).to be 0
|
59
|
+
expect(db[:versions].where(number: "40").count).to be 0
|
60
|
+
expect(db[:versions].where(number: "50").count).to be 1
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/tasks/test_db.rake
CHANGED
@@ -1,11 +1,19 @@
|
|
1
1
|
require 'pact_broker/tasks'
|
2
2
|
|
3
3
|
PactBroker::DB::MigrationTask.new do | task |
|
4
|
+
ENV['RACK_ENV'] ||= 'test'
|
4
5
|
require 'db'
|
5
6
|
task.database_connection = DB::PACT_BROKER_DB
|
6
7
|
end
|
7
8
|
|
8
9
|
PactBroker::DB::VersionTask.new do | task |
|
10
|
+
ENV['RACK_ENV'] ||= 'test'
|
11
|
+
require 'db'
|
12
|
+
task.database_connection = DB::PACT_BROKER_DB
|
13
|
+
end
|
14
|
+
|
15
|
+
PactBroker::DB::CleanTask.new do | task |
|
16
|
+
ENV['RACK_ENV'] ||= 'test'
|
9
17
|
require 'db'
|
10
18
|
task.database_connection = DB::PACT_BROKER_DB
|
11
19
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact_broker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bethany Skurrie
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-
|
13
|
+
date: 2018-04-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
@@ -765,6 +765,7 @@ files:
|
|
765
765
|
- lib/pact_broker/dashboard/service.rb
|
766
766
|
- lib/pact_broker/date_helper.rb
|
767
767
|
- lib/pact_broker/db.rb
|
768
|
+
- lib/pact_broker/db/clean.rb
|
768
769
|
- lib/pact_broker/db/migrate.rb
|
769
770
|
- lib/pact_broker/db/validate_encoding.rb
|
770
771
|
- lib/pact_broker/db/version.rb
|
@@ -841,6 +842,7 @@ files:
|
|
841
842
|
- lib/pact_broker/tags/service.rb
|
842
843
|
- lib/pact_broker/tags/tag_with_latest_flag.rb
|
843
844
|
- lib/pact_broker/tasks.rb
|
845
|
+
- lib/pact_broker/tasks/clean_task.rb
|
844
846
|
- lib/pact_broker/tasks/migration_task.rb
|
845
847
|
- lib/pact_broker/tasks/version_task.rb
|
846
848
|
- lib/pact_broker/ui.rb
|
@@ -1069,6 +1071,7 @@ files:
|
|
1069
1071
|
- spec/lib/pact_broker/config/save_and_load_spec.rb
|
1070
1072
|
- spec/lib/pact_broker/config/save_spec.rb
|
1071
1073
|
- spec/lib/pact_broker/configuration_spec.rb
|
1074
|
+
- spec/lib/pact_broker/db/clean_spec.rb
|
1072
1075
|
- spec/lib/pact_broker/db/validate_encoding_spec.rb
|
1073
1076
|
- spec/lib/pact_broker/diagnostic/resources/dependencies_spec.rb
|
1074
1077
|
- spec/lib/pact_broker/diagnostic/resources/heartbeat_spec.rb
|
@@ -1346,6 +1349,7 @@ test_files:
|
|
1346
1349
|
- spec/lib/pact_broker/config/save_and_load_spec.rb
|
1347
1350
|
- spec/lib/pact_broker/config/save_spec.rb
|
1348
1351
|
- spec/lib/pact_broker/configuration_spec.rb
|
1352
|
+
- spec/lib/pact_broker/db/clean_spec.rb
|
1349
1353
|
- spec/lib/pact_broker/db/validate_encoding_spec.rb
|
1350
1354
|
- spec/lib/pact_broker/diagnostic/resources/dependencies_spec.rb
|
1351
1355
|
- spec/lib/pact_broker/diagnostic/resources/heartbeat_spec.rb
|