pact_broker 2.96.0 → 2.99.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/CHANGELOG.md +43 -0
- data/Gemfile +1 -0
- data/docs/CONFIGURATION.md +131 -67
- data/lib/db.rb +1 -7
- data/lib/pact_broker/api/middleware/http_debug_logs.rb +42 -0
- data/lib/pact_broker/api/resources/base_resource.rb +4 -0
- data/lib/pact_broker/api/resources/latest_pacts.rb +1 -1
- data/lib/pact_broker/api/resources/pact.rb +0 -8
- data/lib/pact_broker/api/resources/pact_content_diff.rb +7 -2
- data/lib/pact_broker/api/resources/pact_versions.rb +1 -5
- data/lib/pact_broker/api/resources/pact_versions_for_branch.rb +1 -5
- data/lib/pact_broker/api/resources/provider_pacts.rb +1 -1
- data/lib/pact_broker/api/resources/tagged_pact_versions.rb +1 -5
- data/lib/pact_broker/api/resources/verification.rb +0 -4
- data/lib/pact_broker/api/resources/verifications.rb +0 -4
- data/lib/pact_broker/api/resources/version.rb +8 -0
- data/lib/pact_broker/app.rb +3 -7
- data/lib/pact_broker/config/runtime_configuration.rb +24 -5
- data/lib/pact_broker/config/runtime_configuration_coercion_methods.rb +11 -0
- data/lib/pact_broker/config/runtime_configuration_database_methods.rb +2 -2
- data/lib/pact_broker/config/runtime_configuration_logging_methods.rb +7 -2
- data/lib/pact_broker/configuration.rb +2 -0
- data/lib/pact_broker/db/models.rb +2 -2
- data/lib/pact_broker/index/service.rb +1 -2
- data/lib/pact_broker/integrations/integration.rb +21 -6
- data/lib/pact_broker/integrations/service.rb +1 -1
- data/lib/pact_broker/matrix/every_row.rb +19 -1
- data/lib/pact_broker/matrix/integration.rb +5 -5
- data/lib/pact_broker/matrix/quick_row.rb +36 -3
- data/lib/pact_broker/matrix/repository.rb +4 -3
- data/lib/pact_broker/matrix/service.rb +0 -1
- data/lib/pact_broker/metrics/service.rb +2 -2
- data/lib/pact_broker/pacts/create_formatted_diff.rb +1 -0
- data/lib/pact_broker/pacts/eager_loaders.rb +4 -1
- data/lib/pact_broker/pacts/pact_publication.rb +9 -6
- data/lib/pact_broker/pacts/pact_publication_dataset_module.rb +25 -0
- data/lib/pact_broker/pacts/pact_publication_wip_dataset_module.rb +0 -15
- data/lib/pact_broker/pacts/pact_version.rb +24 -28
- data/lib/pact_broker/pacts/pact_version_association_loaders.rb +36 -0
- data/lib/pact_broker/pacts/pacts_for_verification_repository.rb +9 -13
- data/lib/pact_broker/pacts/repository.rb +29 -27
- data/lib/pact_broker/test/http_test_data_builder.rb +11 -2
- data/lib/pact_broker/test/test_data_builder.rb +2 -1
- data/lib/pact_broker/ui/controllers/matrix.rb +14 -11
- data/lib/pact_broker/ui/views/groups/show.html.erb +2 -2
- data/lib/pact_broker/version.rb +1 -1
- data/pact_broker.gemspec +1 -1
- metadata +9 -16
- data/lib/pact_broker/matrix/aggregated_row.rb +0 -79
- data/lib/pact_broker/matrix/head_row.rb +0 -80
- data/lib/pact_broker/matrix/row.rb +0 -287
@@ -20,12 +20,11 @@ module PactBroker
|
|
20
20
|
delegate [:consumer_version_number, :name, :provider_name, :consumer_name] => :cached_domain_for_delegation
|
21
21
|
|
22
22
|
set_primary_key :id
|
23
|
-
associate(:many_to_one, :provider, :class => "PactBroker::Domain::Pacticipant", :key => :provider_id, :primary_key => :id
|
24
|
-
associate(:many_to_one, :consumer, :class => "PactBroker::Domain::Pacticipant", :key => :consumer_id, :primary_key => :id
|
25
|
-
associate(:many_to_one, :consumer_version, :class => "PactBroker::Domain::Version", :key => :consumer_version_id, :primary_key => :id
|
26
|
-
associate(:many_to_one, :pact_version, class: "PactBroker::Pacts::PactVersion", :key => :pact_version_id, :primary_key => :id
|
27
|
-
associate(:many_to_one, :integration, class: "PactBroker::Integrations::Integration", key: [:consumer_id, :provider_id], primary_key: [:consumer_id, :provider_id], forbid_lazy_load: false)
|
28
|
-
|
23
|
+
associate(:many_to_one, :provider, :class => "PactBroker::Domain::Pacticipant", :key => :provider_id, :primary_key => :id)
|
24
|
+
associate(:many_to_one, :consumer, :class => "PactBroker::Domain::Pacticipant", :key => :consumer_id, :primary_key => :id)
|
25
|
+
associate(:many_to_one, :consumer_version, :class => "PactBroker::Domain::Version", :key => :consumer_version_id, :primary_key => :id)
|
26
|
+
associate(:many_to_one, :pact_version, class: "PactBroker::Pacts::PactVersion", :key => :pact_version_id, :primary_key => :id)
|
27
|
+
associate(:many_to_one, :integration, class: "PactBroker::Integrations::Integration", key: [:consumer_id, :provider_id], primary_key: [:consumer_id, :provider_id], read_only: true, forbid_lazy_load: false)
|
29
28
|
# TODO rename to consumer_version_tags
|
30
29
|
associate(:one_to_many, :tags, :class => "PactBroker::Domain::Tag", :key => :version_id, :primary_key => :consumer_version_id)
|
31
30
|
|
@@ -57,6 +56,10 @@ module PactBroker
|
|
57
56
|
include PactPublicationDatasetModule
|
58
57
|
include PactPublicationCleanSelectorDatasetModule
|
59
58
|
include PactPublicationWipDatasetModule
|
59
|
+
|
60
|
+
def eager_for_domain_with_content
|
61
|
+
eager(:tags, :consumer, :provider, :consumer_version, :pact_version)
|
62
|
+
end
|
60
63
|
end
|
61
64
|
|
62
65
|
def self.subtract(a, *b)
|
@@ -111,7 +111,32 @@ module PactBroker
|
|
111
111
|
.limit(1)
|
112
112
|
end
|
113
113
|
|
114
|
+
# Return the pacts (if they exist) for the branch heads.
|
115
|
+
# This uses the new logic of finding the branch head and returning any associated pacts,
|
116
|
+
# rather than the old logic of returning the pact for the latest version
|
117
|
+
# on the branch that had a pact.
|
118
|
+
def for_branch_heads(branch_name)
|
119
|
+
branch_head_join = {
|
120
|
+
Sequel[:pact_publications][:consumer_version_id] => Sequel[:branch_heads][:version_id],
|
121
|
+
}
|
122
|
+
|
123
|
+
base_query = self
|
124
|
+
if no_columns_selected?
|
125
|
+
base_query = base_query.select_all_qualified.select_append(Sequel[:branch_heads][:branch_name].as(:branch_name))
|
126
|
+
end
|
127
|
+
|
128
|
+
base_query
|
129
|
+
.join(:branch_heads, branch_head_join) do
|
130
|
+
name_like(Sequel[:branch_heads][:branch_name], branch_name)
|
131
|
+
end
|
132
|
+
.remove_overridden_revisions_from_complete_query
|
133
|
+
end
|
134
|
+
|
114
135
|
def latest_for_consumer_branch(branch_name)
|
136
|
+
for_branch_heads(branch_name)
|
137
|
+
end
|
138
|
+
|
139
|
+
def old_latest_for_consumer_branch(branch_name)
|
115
140
|
branch_versions_join = {
|
116
141
|
Sequel[:pact_publications][:consumer_version_id] => Sequel[:branch_versions][:version_id]
|
117
142
|
}
|
@@ -47,21 +47,6 @@ module PactBroker
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def successfully_verified_by_provider_another_tag_before_this_tag_first_created(provider_id, provider_tag)
|
50
|
-
return new_successfully_verified_by_provider_another_tag_before_this_tag_first_created(provider_id, provider_tag) if PactBroker.feature_enabled?(:new_wip_calculation)
|
51
|
-
|
52
|
-
first_tag_with_name = PactBroker::Domain::Tag.where(pacticipant_id: provider_id, name: provider_tag).order(:created_at).first
|
53
|
-
from_self(alias: :pp)
|
54
|
-
.select(Sequel[:pp].*)
|
55
|
-
.where(Sequel[:pp][:provider_id] => provider_id)
|
56
|
-
.join_successful_non_wip_verifications_for_provider_id(provider_id)
|
57
|
-
.join_provider_version_tags do
|
58
|
-
Sequel.lit("provider_tags.name != ?", provider_tag)
|
59
|
-
end
|
60
|
-
.verified_before_creation_date_of(first_tag_with_name)
|
61
|
-
.distinct
|
62
|
-
end
|
63
|
-
|
64
|
-
def new_successfully_verified_by_provider_another_tag_before_this_tag_first_created(provider_id, provider_tag)
|
65
50
|
first_tag_with_name = PactBroker::Domain::Tag.where(pacticipant_id: provider_id, name: provider_tag).order(:created_at).first
|
66
51
|
|
67
52
|
pact_version_provider_tag_verifications_join = {
|
@@ -1,39 +1,32 @@
|
|
1
1
|
require "sequel"
|
2
2
|
require "pact_broker/repositories/helpers"
|
3
|
-
require "pact_broker/verifications/latest_verification_id_for_pact_version_and_provider_version"
|
4
3
|
require "pact_broker/pacts/content"
|
4
|
+
require "pact_broker/pacts/pact_version_association_loaders"
|
5
5
|
|
6
6
|
module PactBroker
|
7
7
|
module Pacts
|
8
8
|
class PactVersion < Sequel::Model(:pact_versions)
|
9
|
+
include PactVersionAssociationLoaders
|
10
|
+
|
9
11
|
plugin :timestamps
|
10
12
|
plugin :upsert, identifying_columns: [:consumer_id, :provider_id, :sha]
|
11
13
|
|
12
|
-
one_to_many
|
13
|
-
one_to_many
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
one_to_many(:pact_publications, reciprocal: :pact_version)
|
15
|
+
one_to_many(:verifications, reciprocal: :verification, order: :id, class: "PactBroker::Domain::Verification")
|
16
|
+
many_to_one(:provider, class: "PactBroker::Domain::Pacticipant", key: :provider_id, primary_key: :id)
|
17
|
+
many_to_one(:consumer, class: "PactBroker::Domain::Pacticipant", key: :consumer_id, primary_key: :id)
|
18
|
+
many_to_many(:consumer_versions,
|
19
|
+
class: "PactBroker::Domain::Version",
|
20
|
+
join_table: :pact_publications,
|
21
|
+
left_key: :pact_version_id,
|
22
|
+
right_key: :consumer_version_id,
|
23
|
+
order: :order
|
24
|
+
)
|
17
25
|
|
18
26
|
one_to_one(:latest_main_branch_verification,
|
19
27
|
class: "PactBroker::Domain::Verification",
|
20
28
|
read_only: true,
|
21
|
-
dataset:
|
22
|
-
providers_join = {
|
23
|
-
Sequel[:providers][:id] => Sequel[:latest_verification_id_for_pact_version_and_provider_version][:provider_id]
|
24
|
-
}
|
25
|
-
|
26
|
-
branch_versions_join = {
|
27
|
-
Sequel[:latest_verification_id_for_pact_version_and_provider_version][:provider_version_id] => Sequel[:branch_versions][:version_id],
|
28
|
-
Sequel[:providers][:main_branch] => Sequel[:branch_versions][:branch_name]
|
29
|
-
}
|
30
|
-
max_verification_id_for_pact_version = PactBroker::Verifications::LatestVerificationIdForPactVersionAndProviderVersion
|
31
|
-
.join(:pacticipants, providers_join, { table_alias: :providers })
|
32
|
-
.join(:branch_versions, branch_versions_join)
|
33
|
-
.select(Sequel.function(:max, :verification_id))
|
34
|
-
.where(pact_version_id: id)
|
35
|
-
PactBroker::Domain::Verification.where(id: max_verification_id_for_pact_version)
|
36
|
-
},
|
29
|
+
dataset: LATEST_MAIN_BRANCH_VERIFICATION,
|
37
30
|
key: :pact_version_id,
|
38
31
|
primary_key: :id,
|
39
32
|
eager_block: lambda { | ds | ds.from_provider_main_branch.latest_by_pact_version }
|
@@ -42,15 +35,18 @@ module PactBroker
|
|
42
35
|
one_to_one(:latest_verification,
|
43
36
|
class: "PactBroker::Domain::Verification",
|
44
37
|
read_only: true,
|
45
|
-
dataset:
|
38
|
+
dataset: LATEST_VERIFICATION_DATASET,
|
46
39
|
key: :pact_version_id, primary_key: :id,
|
47
40
|
eager_block: lambda { | ds | ds.latest_by_pact_version }
|
48
41
|
)
|
49
42
|
|
50
43
|
# do not eager load this - it won't work because of the limit(1)
|
51
|
-
one_through_one(:latest_consumer_version,
|
52
|
-
|
53
|
-
|
44
|
+
one_through_one(:latest_consumer_version,
|
45
|
+
class: "PactBroker::Domain::Version",
|
46
|
+
join_table: :pact_publications,
|
47
|
+
left_key: :pact_version_id,
|
48
|
+
right_key: :consumer_version_id, &LATEST_CONSUMER_VERSION_LAZY_LOADER
|
49
|
+
)
|
54
50
|
|
55
51
|
dataset_module do
|
56
52
|
include PactBroker::Repositories::Helpers
|
@@ -89,11 +85,11 @@ module PactBroker
|
|
89
85
|
end
|
90
86
|
|
91
87
|
def provider_name
|
92
|
-
|
88
|
+
provider.name
|
93
89
|
end
|
94
90
|
|
95
91
|
def consumer_name
|
96
|
-
|
92
|
+
consumer.name
|
97
93
|
end
|
98
94
|
|
99
95
|
def latest_pact_publication
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "pact_broker/verifications/latest_verification_id_for_pact_version_and_provider_version"
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Pacts
|
5
|
+
module PactVersionAssociationLoaders
|
6
|
+
|
7
|
+
LATEST_MAIN_BRANCH_VERIFICATION = lambda {
|
8
|
+
providers_join = {
|
9
|
+
Sequel[:providers][:id] => Sequel[:latest_verification_id_for_pact_version_and_provider_version][:provider_id]
|
10
|
+
}
|
11
|
+
|
12
|
+
branch_versions_join = {
|
13
|
+
Sequel[:latest_verification_id_for_pact_version_and_provider_version][:provider_version_id] => Sequel[:branch_versions][:version_id],
|
14
|
+
Sequel[:providers][:main_branch] => Sequel[:branch_versions][:branch_name]
|
15
|
+
}
|
16
|
+
max_verification_id_for_pact_version = PactBroker::Verifications::LatestVerificationIdForPactVersionAndProviderVersion
|
17
|
+
.join(:pacticipants, providers_join, { table_alias: :providers })
|
18
|
+
.join(:branch_versions, branch_versions_join)
|
19
|
+
.select(Sequel.function(:max, :verification_id))
|
20
|
+
.where(pact_version_id: id)
|
21
|
+
PactBroker::Domain::Verification.where(id: max_verification_id_for_pact_version)
|
22
|
+
}
|
23
|
+
|
24
|
+
LATEST_VERIFICATION_DATASET = lambda {
|
25
|
+
PactBroker::Domain::Verification
|
26
|
+
.where(
|
27
|
+
id: PactBroker::Verifications::LatestVerificationIdForPactVersionAndProviderVersion.select(
|
28
|
+
Sequel.function(:max, :verification_id)
|
29
|
+
).where(pact_version_id: id)
|
30
|
+
)
|
31
|
+
}
|
32
|
+
|
33
|
+
LATEST_CONSUMER_VERSION_LAZY_LOADER = lambda { | ds | ds.unlimited.order(Sequel.desc(:order)).limit(1) }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -23,7 +23,7 @@ module PactBroker
|
|
23
23
|
:provider,
|
24
24
|
:consumer,
|
25
25
|
:consumer_version,
|
26
|
-
pact_version
|
26
|
+
:pact_version
|
27
27
|
]
|
28
28
|
|
29
29
|
def find(provider_name, consumer_version_selectors)
|
@@ -162,16 +162,14 @@ module PactBroker
|
|
162
162
|
|
163
163
|
def find_pacts_for_which_the_latest_version_for_the_fallback_tag_is_required(provider_name, selectors)
|
164
164
|
selectors.collect do | selector |
|
165
|
-
query = scope_for(PactPublication).for_provider_name(provider_name).for_latest_consumer_versions_with_tag(selector.fallback_tag)
|
165
|
+
query = scope_for(PactPublication).eager_for_domain_with_content.for_provider_name(provider_name).for_latest_consumer_versions_with_tag(selector.fallback_tag)
|
166
166
|
query = query.for_consumer_name(selector.consumer) if selector.consumer
|
167
|
-
query.all
|
168
|
-
.
|
169
|
-
pact_publication
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
)
|
174
|
-
end
|
167
|
+
query.all.collect do | pact_publication |
|
168
|
+
SelectedPact.new(
|
169
|
+
pact_publication.to_domain,
|
170
|
+
Selectors.new(selector.resolve_for_fallback(pact_publication.consumer_version))
|
171
|
+
)
|
172
|
+
end
|
175
173
|
end.flatten
|
176
174
|
end
|
177
175
|
|
@@ -300,9 +298,7 @@ module PactBroker
|
|
300
298
|
|
301
299
|
def collect_consumer_name_and_version_number(pact_publications_query)
|
302
300
|
pact_publications = pact_publications_query
|
303
|
-
.eager(:
|
304
|
-
.eager(:consumer)
|
305
|
-
.eager(:consumer_version)
|
301
|
+
.eager(:consumer, :consumer_version)
|
306
302
|
.order(:consumer_version_order)
|
307
303
|
.all_forbidding_lazy_load
|
308
304
|
.sort
|
@@ -7,7 +7,6 @@ require "pact_broker/pacts/pact_version"
|
|
7
7
|
require "pact/shared/json_differ"
|
8
8
|
require "pact_broker/domain"
|
9
9
|
require "pact_broker/pacts/parse"
|
10
|
-
require "pact_broker/matrix/head_row"
|
11
10
|
require "pact_broker/pacts/latest_pact_publication_id_for_consumer_version"
|
12
11
|
require "pact_broker/pacts/verifiable_pact"
|
13
12
|
require "pact_broker/repositories/helpers"
|
@@ -117,8 +116,8 @@ module PactBroker
|
|
117
116
|
|
118
117
|
def find_all_pact_versions_between consumer_name, options
|
119
118
|
find_all_database_versions_between(consumer_name, options)
|
120
|
-
.eager(:tags)
|
121
119
|
.reverse_order(:consumer_version_order)
|
120
|
+
.all
|
122
121
|
.collect(&:to_domain)
|
123
122
|
end
|
124
123
|
|
@@ -143,7 +142,7 @@ module PactBroker
|
|
143
142
|
def find_latest_pacts_for_provider provider_name, tag = nil
|
144
143
|
query = scope_for(PactPublication)
|
145
144
|
.for_provider_name(provider_name)
|
146
|
-
.
|
145
|
+
.eager_for_domain_with_content
|
147
146
|
|
148
147
|
if tag
|
149
148
|
query = query.latest_for_consumer_tag(tag)
|
@@ -151,7 +150,7 @@ module PactBroker
|
|
151
150
|
query = query.overall_latest
|
152
151
|
end
|
153
152
|
|
154
|
-
query.sort_by{ | p| p.consumer_name.downcase }.collect(&:to_head_pact)
|
153
|
+
query.all.sort_by{ | p| p.consumer_name.downcase }.collect(&:to_head_pact)
|
155
154
|
end
|
156
155
|
|
157
156
|
def find_for_verification(provider_name, consumer_version_selectors)
|
@@ -165,41 +164,45 @@ module PactBroker
|
|
165
164
|
def find_pact_versions_for_provider provider_name, tag = nil
|
166
165
|
query = scope_for(PactPublication)
|
167
166
|
.select_all_qualified
|
167
|
+
.eager_for_domain_with_content
|
168
168
|
.for_provider_name(provider_name)
|
169
|
-
.eager(:consumer)
|
170
|
-
.eager(:provider)
|
171
169
|
query = query.for_consumer_version_tag(tag) if tag
|
172
|
-
query.collect(&:to_domain).sort
|
170
|
+
query.all.collect(&:to_domain).sort
|
173
171
|
end
|
174
172
|
|
175
173
|
# Returns latest pact version for the consumer_version_number
|
176
174
|
def find_by_consumer_version consumer_name, consumer_version_number
|
177
175
|
scope_for(PactPublication)
|
176
|
+
.eager_for_domain_with_content
|
178
177
|
.for_consumer_name_and_maybe_version_number(consumer_name, consumer_version_number)
|
179
178
|
.remove_overridden_revisions_from_complete_query
|
179
|
+
.all
|
180
180
|
.collect(&:to_domain_with_content)
|
181
181
|
end
|
182
182
|
|
183
183
|
def find_by_version_and_provider version_id, provider_id
|
184
184
|
scope_for(PactPublication)
|
185
|
-
.
|
185
|
+
.eager_for_domain_with_content
|
186
186
|
.where(consumer_version_id: version_id, provider_id: provider_id)
|
187
187
|
.remove_overridden_revisions_from_complete_query
|
188
188
|
.limit(1)
|
189
|
+
.all
|
189
190
|
.collect(&:to_domain_with_content)[0]
|
190
191
|
end
|
191
192
|
|
192
193
|
def find_latest_pacts
|
193
194
|
scope_for(PactPublication)
|
195
|
+
.eager_for_domain_with_content
|
194
196
|
.overall_latest
|
195
|
-
.eager(:consumer)
|
196
197
|
.eager(:provider)
|
198
|
+
.all
|
197
199
|
.collect(&:to_domain)
|
198
200
|
.sort
|
199
201
|
end
|
200
202
|
|
201
203
|
def find_latest_pact(consumer_name, provider_name, tag = nil)
|
202
204
|
query = scope_for(PactPublication)
|
205
|
+
.eager_for_domain_with_content
|
203
206
|
.select_all_qualified
|
204
207
|
.for_consumer_name(consumer_name)
|
205
208
|
.for_provider_name(provider_name)
|
@@ -214,7 +217,7 @@ module PactBroker
|
|
214
217
|
|
215
218
|
# Allows optional consumer_name and provider_name
|
216
219
|
def search_for_latest_pact(consumer_name, provider_name, tag = nil)
|
217
|
-
query = scope_for(PactPublication).select_all_qualified
|
220
|
+
query = scope_for(PactPublication).select_all_qualified.eager_for_domain_with_content
|
218
221
|
query = query.for_consumer_name(consumer_name) if consumer_name
|
219
222
|
query = query.for_provider_name(provider_name) if provider_name
|
220
223
|
|
@@ -233,6 +236,7 @@ module PactBroker
|
|
233
236
|
# rubocop: disable Metrics/CyclomaticComplexity, Metrics/MethodLength
|
234
237
|
def find_pact consumer_name, consumer_version_number, provider_name, pact_version_sha = nil
|
235
238
|
pact_publication_by_consumer_version = scope_for(PactPublication)
|
239
|
+
.eager_for_domain_with_content
|
236
240
|
.select_all_qualified
|
237
241
|
.for_consumer_name_and_maybe_version_number(consumer_name, consumer_version_number)
|
238
242
|
.for_provider_name(provider_name)
|
@@ -240,6 +244,7 @@ module PactBroker
|
|
240
244
|
.limit(1)
|
241
245
|
|
242
246
|
latest_pact_publication_by_sha = scope_for(PactPublication)
|
247
|
+
.eager_for_domain_with_content
|
243
248
|
.select_all_qualified
|
244
249
|
.for_consumer_name(consumer_name)
|
245
250
|
.for_provider_name(provider_name)
|
@@ -249,46 +254,39 @@ module PactBroker
|
|
249
254
|
|
250
255
|
if consumer_version_number && !pact_version_sha
|
251
256
|
pact_publication_by_consumer_version
|
252
|
-
.
|
253
|
-
.all_allowing_lazy_load
|
254
|
-
.collect(&:to_domain_with_content).first
|
257
|
+
.first&.to_domain_with_content
|
255
258
|
elsif pact_version_sha && !consumer_version_number
|
256
259
|
latest_pact_publication_by_sha
|
257
|
-
.
|
258
|
-
.collect(&:to_domain_with_content).first
|
260
|
+
.first&.to_domain_with_content
|
259
261
|
elsif consumer_version_number && pact_version_sha
|
260
|
-
pact_publication = pact_publication_by_consumer_version.
|
262
|
+
pact_publication = pact_publication_by_consumer_version.first
|
261
263
|
if pact_publication && pact_publication.pact_version.sha == pact_version_sha
|
262
|
-
pact_publication.tags
|
263
264
|
pact_publication.to_domain_with_content
|
264
265
|
else
|
265
|
-
latest_pact_publication_by_sha
|
266
|
-
.eager(:tags)
|
267
|
-
.all_allowing_lazy_load
|
268
|
-
.collect(&:to_domain_with_content).first
|
266
|
+
latest_pact_publication_by_sha.first&.to_domain_with_content
|
269
267
|
end
|
270
268
|
else
|
271
269
|
pact_publication_by_consumer_version
|
272
|
-
.eager(:tags)
|
273
270
|
.reverse_order(:consumer_version_order, :revision_number)
|
274
|
-
.
|
275
|
-
.collect(&:to_domain_with_content).first
|
271
|
+
.first&.to_domain_with_content
|
276
272
|
end
|
277
273
|
end
|
278
274
|
# rubocop: enable Metrics/CyclomaticComplexity, Metrics/MethodLength
|
279
275
|
|
280
276
|
def find_all_revisions consumer_name, consumer_version_number, provider_name
|
281
277
|
scope_for(PactPublication)
|
278
|
+
.eager_for_domain_with_content
|
282
279
|
.for_provider_name(provider_name)
|
283
280
|
.for_consumer_name_and_maybe_version_number(consumer_name, consumer_version_number)
|
284
281
|
.order_by_consumer_version_order
|
282
|
+
.all
|
285
283
|
.collect(&:to_domain_with_content)
|
286
284
|
end
|
287
285
|
|
288
286
|
def find_previous_pact pact, tag = nil
|
289
287
|
query = scope_for(PactPublication)
|
288
|
+
.eager_for_domain_with_content
|
290
289
|
.remove_overridden_revisions
|
291
|
-
.eager(:tags)
|
292
290
|
.for_consumer_name(pact.consumer.name)
|
293
291
|
.for_provider_name(pact.provider.name)
|
294
292
|
|
@@ -301,17 +299,19 @@ module PactBroker
|
|
301
299
|
query
|
302
300
|
.consumer_version_order_before(pact.consumer_version.order)
|
303
301
|
.latest_by_consumer_version_order
|
302
|
+
.all
|
304
303
|
.collect(&:to_domain_with_content)[0]
|
305
304
|
end
|
306
305
|
|
307
306
|
def find_next_pact pact
|
308
307
|
scope_for(PactPublication)
|
309
|
-
.
|
308
|
+
.eager_for_domain_with_content
|
310
309
|
.for_consumer_name(pact.consumer.name)
|
311
310
|
.for_provider_name(pact.provider.name)
|
312
311
|
.remove_overridden_revisions
|
313
312
|
.consumer_version_order_after(pact.consumer_version.order)
|
314
313
|
.earliest
|
314
|
+
.all_allowing_lazy_load
|
315
315
|
.collect(&:to_domain_with_content)[0]
|
316
316
|
end
|
317
317
|
|
@@ -343,12 +343,13 @@ module PactBroker
|
|
343
343
|
def find_previous_distinct_pact_by_sha pact
|
344
344
|
pact_version = PactVersion.for_pact_domain(pact)
|
345
345
|
scope_for(PactPublication)
|
346
|
-
.
|
346
|
+
.eager_for_domain_with_content
|
347
347
|
.for_consumer_name(pact.consumer.name)
|
348
348
|
.for_provider_name(pact.provider.name)
|
349
349
|
.consumer_version_order_before(pact.consumer_version.order)
|
350
350
|
.exclude(pact_version_id: pact_version.id)
|
351
351
|
.latest_by_consumer_version_order
|
352
|
+
.all_allowing_lazy_load
|
352
353
|
.collect(&:to_domain_with_content)[0]
|
353
354
|
end
|
354
355
|
|
@@ -377,6 +378,7 @@ module PactBroker
|
|
377
378
|
provider_name = options.fetch(:and)
|
378
379
|
|
379
380
|
query = scope_for(PactPublication)
|
381
|
+
.eager_for_domain_with_content
|
380
382
|
.for_consumer_name(consumer_name)
|
381
383
|
.for_provider_name(provider_name)
|
382
384
|
.remove_overridden_revisions
|
@@ -57,6 +57,8 @@ module PactBroker
|
|
57
57
|
|
58
58
|
def create_version(pacticipant:, version:, branch: nil)
|
59
59
|
if branch
|
60
|
+
puts "Adding #{pacticipant} version #{version} to branch #{branch}"
|
61
|
+
puts ""
|
60
62
|
client.put("pacticipants/#{encode(pacticipant)}/branches/#{encode(branch)}/versions/#{encode(version)}", {}).tap { |response| check_for_error(response) }
|
61
63
|
else
|
62
64
|
client.put("pacticipants/#{encode(pacticipant)}/versions/#{encode(version)}").tap { |response| check_for_error(response) }
|
@@ -74,8 +76,15 @@ module PactBroker
|
|
74
76
|
def record_deployment(pacticipant:, version:, environment_name:)
|
75
77
|
puts "Recording deployment of #{pacticipant} version #{version} to #{environment_name}"
|
76
78
|
version_body = client.get("/pacticipants/#{encode(pacticipant)}/versions/#{encode(version)}").tap { |response| check_for_error(response) }.body
|
79
|
+
|
77
80
|
environment_relation = version_body["_links"]["pb:record-deployment"].find { |relation| relation["name"] == environment_name }
|
78
|
-
|
81
|
+
if environment_relation.nil?
|
82
|
+
available_environments = version_body["_links"]["pb:record-deployment"].collect{ | relation | relation["name"]}.join
|
83
|
+
puts "Environment with name #{environment_name} not found. Available environments: #{available_environments}"
|
84
|
+
else
|
85
|
+
client.post(environment_relation["href"]).tap { |response| check_for_error(response) }
|
86
|
+
end
|
87
|
+
|
79
88
|
separate
|
80
89
|
self
|
81
90
|
end
|
@@ -84,7 +93,7 @@ module PactBroker
|
|
84
93
|
puts "Recording release of #{pacticipant} version #{version} to #{environment_name}"
|
85
94
|
version_body = client.get("/pacticipants/#{encode(pacticipant)}/versions/#{encode(version)}").tap { |response| check_for_error(response) }.body
|
86
95
|
environment_relation = version_body["_links"]["pb:record-release"].find { |relation| relation["name"] == environment_name }
|
87
|
-
client.post(environment_relation["href"]
|
96
|
+
client.post(environment_relation["href"]).tap { |response| check_for_error(response) }
|
88
97
|
separate
|
89
98
|
self
|
90
99
|
end
|
@@ -25,7 +25,6 @@ require "pact_broker/verifications/service"
|
|
25
25
|
require "pact_broker/tags/repository"
|
26
26
|
require "pact_broker/webhooks/repository"
|
27
27
|
require "pact_broker/certificates/certificate"
|
28
|
-
require "pact_broker/matrix/row"
|
29
28
|
require "pact_broker/deployments/environment_service"
|
30
29
|
require "pact_broker/deployments/deployed_version_service"
|
31
30
|
require "pact_broker/deployments/released_version_service"
|
@@ -260,6 +259,8 @@ module PactBroker
|
|
260
259
|
set_created_at_if_set(params[:created_at], :pact_versions, sha: @pact.pact_version_sha) if pact_versions_count_after > pact_versions_count_before
|
261
260
|
set_created_at_if_set(params[:created_at], :latest_pact_publication_ids_for_consumer_versions, consumer_version_id: @consumer_version.id)
|
262
261
|
@pact = PactBroker::Pacts::PactPublication.find(id: @pact.id).to_domain
|
262
|
+
consumer_version.reload
|
263
|
+
consumer_version.pact_publications.each{ | pp | pp.allow_lazy_load if pp.respond_to?(:allow_lazy_load) }
|
263
264
|
self
|
264
265
|
end
|
265
266
|
|
@@ -46,19 +46,22 @@ module PactBroker
|
|
46
46
|
end
|
47
47
|
|
48
48
|
get "/provider/:provider_name/consumer/:consumer_name" do
|
49
|
-
selectors = [
|
50
|
-
|
49
|
+
selectors = [
|
50
|
+
PactBroker::Matrix::UnresolvedSelector.new(pacticipant_name: params[:consumer_name]),
|
51
|
+
PactBroker::Matrix::UnresolvedSelector.new(pacticipant_name: params[:provider_name])
|
52
|
+
]
|
53
|
+
options = { latestby: "cvpv", limit: 100 }
|
51
54
|
lines = matrix_service.find(selectors, options)
|
52
55
|
lines = PactBroker::UI::ViewDomain::MatrixLines.new(lines, base_url: base_url)
|
53
|
-
locals =
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
56
|
+
locals = {
|
57
|
+
lines: lines,
|
58
|
+
consumer_name: params[:consumer_name],
|
59
|
+
provider_name: params[:provider_name],
|
60
|
+
selectors: create_selector_objects(selectors),
|
61
|
+
options: create_options_model(options),
|
62
|
+
badge_url: nil,
|
63
|
+
base_url: base_url
|
64
|
+
}
|
62
65
|
haml :'matrix/show', { locals: locals, layout: :'layouts/main', escape_html: true }
|
63
66
|
end
|
64
67
|
end
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<html lang="en">
|
7
7
|
<head>
|
8
8
|
<meta charset="utf-8">
|
9
|
-
<title><%= pacticipant_name %></title>
|
9
|
+
<title><%= escape_html(pacticipant_name) %></title>
|
10
10
|
<link rel='shortcut icon' href='<%= base_url %>/favicon.ico' type='image/x-icon'/>
|
11
11
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
12
12
|
<meta name="description" content="">
|
@@ -69,7 +69,7 @@ svg{
|
|
69
69
|
Main branch:
|
70
70
|
</div>
|
71
71
|
<div class="col col-md-6">
|
72
|
-
<%= pacticipant.main_branch %>
|
72
|
+
<%= escape_html(pacticipant.main_branch) %>
|
73
73
|
</div>
|
74
74
|
</div>
|
75
75
|
<div class="row">
|
data/lib/pact_broker/version.rb
CHANGED
data/pact_broker.gemspec
CHANGED
@@ -73,7 +73,7 @@ Gem::Specification.new do |gem|
|
|
73
73
|
gem.add_runtime_dependency "dry-logic", "0.4.2" # Later version cases ArgumentError: wrong number of arguments
|
74
74
|
gem.add_runtime_dependency "table_print", "~> 1.5"
|
75
75
|
gem.add_runtime_dependency "semantic_logger", "~> 4.3"
|
76
|
-
gem.add_runtime_dependency "sanitize", "
|
76
|
+
gem.add_runtime_dependency "sanitize", "6.0"
|
77
77
|
gem.add_runtime_dependency "wisper", "~> 2.0"
|
78
78
|
gem.add_runtime_dependency "anyway_config", "~> 2.1"
|
79
79
|
gem.add_runtime_dependency "request_store", "~> 1.5"
|