pact_broker 2.83.0 → 2.84.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 +19 -0
- data/Dockerfile +1 -1
- data/db/migrations/20210816_create_branches_tables.rb +40 -0
- data/db/migrations/20210831_add_index_to_pact_publications.rb +7 -0
- data/db/migrations/20210908_add_auto_created.rb +24 -0
- data/issue-reproduction/Dockerfile-pact-broker +1 -1
- data/lib/pact_broker/api/contracts/{verifiable_pacts_json_query_schema.rb → pacts_for_verification_json_query_schema.rb} +1 -1
- data/lib/pact_broker/api/contracts/{verifiable_pacts_query_schema.rb → pacts_for_verification_query_string_schema.rb} +1 -1
- data/lib/pact_broker/api/decorators/branch_version_decorator.rb +20 -0
- data/lib/pact_broker/api/decorators/dashboard_decorator.rb +4 -2
- data/lib/pact_broker/api/decorators/embedded_branch_version_decorator.rb +21 -0
- data/lib/pact_broker/api/decorators/embedded_tag_decorator.rb +0 -5
- data/lib/pact_broker/api/decorators/matrix_decorator.rb +11 -2
- data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +8 -0
- data/lib/pact_broker/api/decorators/{verifiable_pacts_query_decorator.rb → pacts_for_verification_query_decorator.rb} +2 -2
- data/lib/pact_broker/api/decorators/version_decorator.rb +1 -1
- data/lib/pact_broker/api/pact_broker_urls.rb +8 -0
- data/lib/pact_broker/api/resources/branch_version.rb +48 -0
- data/lib/pact_broker/api/resources/index.rb +6 -0
- data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +6 -6
- data/lib/pact_broker/api/resources/version.rb +0 -8
- data/lib/pact_broker/api.rb +1 -0
- data/lib/pact_broker/config/runtime_configuration.rb +12 -0
- data/lib/pact_broker/contracts/service.rb +1 -1
- data/lib/pact_broker/db/data_migrations/create_branches.rb +97 -0
- data/lib/pact_broker/db/data_migrations/set_pacticipant_main_branch.rb +2 -0
- data/lib/pact_broker/db/migrate_data.rb +1 -1
- data/lib/pact_broker/db/models.rb +6 -0
- data/lib/pact_broker/deployments/deployed_version.rb +4 -0
- data/lib/pact_broker/deployments/deployed_version_service.rb +4 -3
- data/lib/pact_broker/deployments/environment.rb +4 -0
- data/lib/pact_broker/deployments/environment_service.rb +13 -8
- data/lib/pact_broker/doc/views/index/pacticipant-branch-version.markdown +14 -0
- data/lib/pact_broker/doc/views/webhooks.markdown +1 -0
- data/lib/pact_broker/domain/index_item.rb +15 -17
- data/lib/pact_broker/domain/pacticipant.rb +11 -0
- data/lib/pact_broker/domain/tag.rb +1 -2
- data/lib/pact_broker/domain/verification.rb +16 -13
- data/lib/pact_broker/domain/version.rb +87 -33
- data/lib/pact_broker/index/service.rb +8 -4
- data/lib/pact_broker/locale/en.yml +1 -0
- data/lib/pact_broker/matrix/quick_row.rb +6 -6
- data/lib/pact_broker/metrics/service.rb +7 -1
- data/lib/pact_broker/pacts/pact_publication.rb +22 -25
- data/lib/pact_broker/pacts/pact_publication_dataset_module.rb +74 -33
- data/lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb +18 -13
- data/lib/pact_broker/pacts/pact_publication_wip_dataset_module.rb +16 -4
- data/lib/pact_broker/pacts/pact_version.rb +11 -0
- data/lib/pact_broker/pacts/pacts_for_verification_repository.rb +3 -3
- data/lib/pact_broker/pacts/selected_pact.rb +2 -2
- data/lib/pact_broker/pacts/selector.rb +98 -33
- data/lib/pact_broker/repositories.rb +5 -0
- data/lib/pact_broker/services.rb +9 -0
- data/lib/pact_broker/test/http_test_data_builder.rb +32 -7
- data/lib/pact_broker/test/test_data_builder.rb +25 -24
- data/lib/pact_broker/ui/view_models/index_item.rb +11 -0
- data/lib/pact_broker/ui/view_models/matrix_branch.rb +39 -0
- data/lib/pact_broker/ui/view_models/matrix_line.rb +11 -16
- data/lib/pact_broker/ui/views/index/show-with-tags.haml +12 -11
- data/lib/pact_broker/ui/views/matrix/show.haml +8 -8
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/versions/branch.rb +29 -0
- data/lib/pact_broker/versions/branch_head.rb +45 -0
- data/lib/pact_broker/versions/branch_service.rb +24 -0
- data/lib/pact_broker/versions/branch_version.rb +64 -0
- data/lib/pact_broker/versions/branch_version_repository.rb +34 -0
- data/lib/pact_broker/versions/eager_loaders.rb +0 -42
- data/lib/pact_broker/versions/repository.rb +25 -12
- data/lib/pact_broker/versions/service.rb +3 -22
- data/lib/pact_broker/webhooks/pact_and_verification_parameters.rb +11 -2
- data/lib/sequel/plugins/insert_ignore.rb +4 -0
- data/lib/sequel/plugins/upsert.rb +4 -0
- data/public/javascripts/index.js +129 -34
- data/scaffolding/templates/decorator.rb.erb +3 -1
- data/scaffolding/templates/migration.erb +1 -1
- data/scaffolding/templates/model.erb +2 -2
- data/scaffolding/templates/repository.rb.erb +2 -2
- data/scaffolding/templates/repository_spec.rb.erb +1 -1
- data/scaffolding/templates/resource.erb +2 -2
- data/scaffolding/templates/resource_spec.rb.erb +1 -1
- data/scaffolding/templates/service.rb.erb +3 -3
- data/scaffolding/templates/service_spec.rb.erb +1 -1
- data/script/data/branches.rb +35 -0
- data/script/data/issue-494.rb +25 -0
- data/spec/features/create_branch_version_spec.rb +29 -0
- data/spec/features/create_tag_spec.rb +1 -1
- data/spec/features/create_version_spec.rb +2 -4
- data/spec/features/get_branch_version_spec.rb +12 -0
- data/spec/features/publish_pact_all_in_one_spec.rb +0 -1
- data/spec/features/update_version_spec.rb +0 -55
- data/spec/fixtures/approvals/modifiable_resources.approved.json +3 -0
- data/spec/fixtures/approvals/publish_contract_nothing_exists.approved.json +1 -2
- data/spec/fixtures/approvals/publish_contract_nothing_exists_with_webhook.approved.json +1 -2
- data/spec/fixtures/approvals/publish_contract_verification_already_exists.approved.json +1 -2
- data/spec/fixtures/dashboard.json +4 -2
- data/spec/integration/ui/index_spec.rb +0 -2
- data/spec/integration/ui/matrix_spec.rb +0 -1
- data/spec/lib/pact_broker/api/contracts/{verifiable_pacts_json_query_schema_combinations_spec.rb → pacts_for_verification_json_query_schema_combinations_spec.rb} +6 -6
- data/spec/lib/pact_broker/api/contracts/{verifiable_pacts_json_query_schema_spec.rb → pacts_for_verification_json_query_schema_spec.rb} +3 -3
- data/spec/lib/pact_broker/api/contracts/{verifiable_pacts_query_schema_spec.rb → pacts_for_verification_query_string_schema_spec.rb} +3 -3
- data/spec/lib/pact_broker/api/decorators/dashboard_decorator_spec.rb +7 -7
- data/spec/lib/pact_broker/api/decorators/matrix_decorator_spec.rb +19 -4
- data/spec/lib/pact_broker/api/decorators/{verifiable_pacts_query_decorator_spec.rb → pacts_for_verification_query_decorator_spec.rb} +3 -3
- data/spec/lib/pact_broker/api/decorators/version_decorator_spec.rb +7 -3
- data/spec/lib/pact_broker/contracts/service_spec.rb +24 -3
- data/spec/lib/pact_broker/db/data_migrations/create_branches_spec.rb +57 -0
- data/spec/lib/pact_broker/domain/index_item_spec.rb +1 -1
- data/spec/lib/pact_broker/domain/version_spec.rb +1 -35
- data/spec/lib/pact_broker/metrics/service_spec.rb +4 -1
- data/spec/lib/pact_broker/pacts/pact_publication_dataset_module_spec.rb +109 -10
- data/spec/lib/pact_broker/pacts/pact_publication_selector_dataset_module_spec.rb +3 -2
- data/spec/lib/pact_broker/pacts/pact_publication_spec.rb +5 -5
- data/spec/lib/pact_broker/pacts/repository_find_for_currently_deployed_spec.rb +2 -2
- data/spec/lib/pact_broker/pacts/repository_find_for_currently_supported_releases_spec.rb +2 -2
- data/spec/lib/pact_broker/pacts/selector_spec.rb +45 -3
- data/spec/lib/pact_broker/pacts/verifiable_pact_messages_spec.rb +5 -5
- data/spec/lib/pact_broker/relationships/groupify_spec.rb +0 -5
- data/spec/lib/pact_broker/ui/view_models/index_item_spec.rb +15 -3
- data/spec/lib/pact_broker/verifications/repository_spec.rb +1 -1
- data/spec/lib/pact_broker/versions/branch_service_spec.rb +71 -0
- data/spec/lib/pact_broker/versions/branch_version_repository_spec.rb +81 -0
- data/spec/lib/pact_broker/versions/branch_version_spec.rb +27 -0
- data/spec/lib/pact_broker/versions/repository_spec.rb +91 -6
- data/spec/lib/pact_broker/versions/service_spec.rb +4 -3
- data/spec/lib/pact_broker/webhooks/render_spec.rb +6 -0
- data/spec/lib/sequel/plugins/upsert_spec.rb +11 -5
- data/spec/migrations/44_add_provider_version_to_verification_spec.rb +6 -9
- metadata +42 -15
- data/lib/pact_broker/versions/lazy_loaders.rb +0 -13
@@ -16,28 +16,31 @@ module PactBroker
|
|
16
16
|
# Do the "latest" logic last so that the provider/consumer criteria get included in the "latest" query before the join, rather than after
|
17
17
|
query = query.latest_for_main_branches if selector.latest_for_main_branch?
|
18
18
|
query = query.latest_for_consumer_branch(selector.branch) if selector.latest_for_branch?
|
19
|
-
query = query.
|
19
|
+
query = query.for_latest_consumer_versions_with_tag(selector.tag) if selector.latest_for_tag?
|
20
20
|
query = query.overall_latest if selector.overall_latest?
|
21
21
|
query
|
22
22
|
end
|
23
23
|
# rubocop: enable Metrics/CyclomaticComplexity
|
24
24
|
|
25
|
+
# Updated logic - the pacts for the latest version of each main branch,
|
26
|
+
# not the latest pact that belongs to the main branch.
|
25
27
|
def latest_for_main_branches
|
26
|
-
|
27
|
-
Sequel[:pact_publications][:provider_id] => Sequel[:pp2][:provider_id],
|
28
|
-
Sequel[:pact_publications][:consumer_id] => Sequel[:pp2][:consumer_id],
|
29
|
-
Sequel[:cv][:branch] => Sequel[:pp2][:branch]
|
30
|
-
}
|
31
|
-
|
32
|
-
base_query = join_consumers(:consumers)
|
33
|
-
.join_consumer_versions(:cv, { Sequel[:cv][:branch] => Sequel[:consumers][:main_branch] })
|
28
|
+
consumers_join = { Sequel[:pact_publications][:consumer_id] => Sequel[:consumers][:id] }
|
34
29
|
|
35
|
-
|
30
|
+
branch_heads_join = {
|
31
|
+
Sequel[:pact_publications][:consumer_version_id] => Sequel[:branch_heads][:version_id],
|
32
|
+
Sequel[:consumers][:main_branch] => Sequel[:branch_heads][:branch_name]
|
33
|
+
}
|
36
34
|
|
37
|
-
|
38
|
-
|
35
|
+
query = self
|
36
|
+
if no_columns_selected?
|
37
|
+
query = query.select_all_qualified.select_append(Sequel[:branch_heads][:branch_name].as(:branch_name))
|
39
38
|
end
|
40
|
-
|
39
|
+
|
40
|
+
query
|
41
|
+
.join(:pacticipants, consumers_join, { table_alias: :consumers })
|
42
|
+
.join(:branch_heads, branch_heads_join)
|
43
|
+
.remove_overridden_revisions_from_complete_query
|
41
44
|
end
|
42
45
|
|
43
46
|
def for_currently_deployed_versions(environment_name)
|
@@ -60,6 +63,7 @@ module PactBroker
|
|
60
63
|
.join(:deployed_versions, deployed_versions_join)
|
61
64
|
.join(:currently_deployed_version_ids, currently_deployed_versions_join)
|
62
65
|
.join(:environments, environments_join)
|
66
|
+
.remove_overridden_revisions_from_complete_query
|
63
67
|
end
|
64
68
|
|
65
69
|
def for_currently_supported_versions(environment_name)
|
@@ -79,6 +83,7 @@ module PactBroker
|
|
79
83
|
query
|
80
84
|
.join(:released_versions, released_versions_join)
|
81
85
|
.join(:environments, environments_join)
|
86
|
+
.remove_overridden_revisions_from_complete_query
|
82
87
|
end
|
83
88
|
|
84
89
|
def for_environment(environment_name)
|
@@ -16,14 +16,22 @@ module PactBroker
|
|
16
16
|
from_self(alias: :pp)
|
17
17
|
.select(Sequel[:pp].*)
|
18
18
|
.join_successful_non_wip_verifications_for_provider_id(provider_id)
|
19
|
-
.join_provider_versions_for_provider_id(provider_id)
|
20
|
-
|
21
|
-
end
|
19
|
+
.join_provider_versions_for_provider_id(provider_id)
|
20
|
+
.join_branch_versions_excluding_branch(provider_version_branch)
|
22
21
|
.where(Sequel[:pp][:provider_id] => provider_id)
|
23
22
|
.verified_before_creation_date_of(first_version_for_branch)
|
24
23
|
.distinct
|
25
24
|
end
|
26
25
|
|
26
|
+
def join_branch_versions_excluding_branch(branch_name)
|
27
|
+
branch_versions_join = {
|
28
|
+
Sequel[:provider_versions][:id] => Sequel[:branch_versions][:version_id]
|
29
|
+
}
|
30
|
+
join(:branch_versions, branch_versions_join) do
|
31
|
+
Sequel.lit("branch_versions.branch_name != ?", branch_name)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
27
35
|
def successfully_verified_by_provider_tag_when_not_wip(provider_id, provider_tag)
|
28
36
|
from_self(alias: :pp)
|
29
37
|
.select(Sequel[:pp].*)
|
@@ -80,10 +88,14 @@ module PactBroker
|
|
80
88
|
def join_provider_versions_for_provider_id_and_branch(provider_id, provider_version_branch)
|
81
89
|
versions_join = {
|
82
90
|
Sequel[:verifications][:provider_version_id] => Sequel[:provider_versions][:id],
|
83
|
-
Sequel[:provider_versions][:branch] => provider_version_branch,
|
84
91
|
Sequel[:provider_versions][:pacticipant_id] => provider_id
|
85
92
|
}
|
93
|
+
branch_versions_join = {
|
94
|
+
Sequel[:provider_versions][:id] => Sequel[:branch_versions][:version_id],
|
95
|
+
Sequel[:branch_versions][:branch_name] => provider_version_branch
|
96
|
+
}
|
86
97
|
join(:versions, versions_join, { table_alias: :provider_versions } )
|
98
|
+
.join(:branch_versions, branch_versions_join)
|
87
99
|
end
|
88
100
|
|
89
101
|
def join_provider_versions_for_provider_id(provider_id, &block)
|
@@ -2,6 +2,7 @@ require "sequel"
|
|
2
2
|
require "pact_broker/repositories/helpers"
|
3
3
|
require "pact_broker/verifications/latest_verification_for_pact_version"
|
4
4
|
require "pact_broker/verifications/latest_verification_id_for_pact_version_and_provider_version"
|
5
|
+
require "pact_broker/pacts/content"
|
5
6
|
|
6
7
|
module PactBroker
|
7
8
|
module Pacts
|
@@ -125,6 +126,16 @@ module PactBroker
|
|
125
126
|
.join_successful_verifications
|
126
127
|
.any?
|
127
128
|
end
|
129
|
+
|
130
|
+
def set_interactions_and_messages_counts!
|
131
|
+
if interactions_count.nil? || messages_count.nil?
|
132
|
+
content_object = PactBroker::Pacts::Content.from_json(content)
|
133
|
+
update(
|
134
|
+
messages_count: content_object.messages&.count || 0,
|
135
|
+
interactions_count: content_object.interactions&.count || 0
|
136
|
+
)
|
137
|
+
end
|
138
|
+
end
|
128
139
|
end
|
129
140
|
end
|
130
141
|
end
|
@@ -215,7 +215,7 @@ module PactBroker
|
|
215
215
|
if pact_publication.values[:tag_name]
|
216
216
|
Selectors.create_for_latest_for_tag(pact_publication.values[:tag_name])
|
217
217
|
else
|
218
|
-
Selectors.create_for_latest_for_branch(pact_publication.
|
218
|
+
Selectors.create_for_latest_for_branch(pact_publication.values.fetch(:branch_name))
|
219
219
|
end
|
220
220
|
end
|
221
221
|
|
@@ -285,8 +285,8 @@ module PactBroker
|
|
285
285
|
pact_publications_query.eager(:provider).eager(:consumer).eager(:consumer_version).order(:consumer_version_order).all.sort.collect do |p|
|
286
286
|
suffix = if p.values[:tag_name]
|
287
287
|
" (tag #{p.values[:tag_name]})"
|
288
|
-
elsif p.values[:
|
289
|
-
" (branch #{p.values[:
|
288
|
+
elsif p.values[:branch_name]
|
289
|
+
" (branch #{p.values[:branch_name]})"
|
290
290
|
else
|
291
291
|
""
|
292
292
|
end
|
@@ -15,8 +15,8 @@ module PactBroker
|
|
15
15
|
selected_pacts
|
16
16
|
.group_by{ |p| [p.consumer_name, p.pact_version_sha] }
|
17
17
|
.values
|
18
|
-
.collect do |
|
19
|
-
SelectedPact.merge(
|
18
|
+
.collect do | selected_pacts_for_pact_version_sha |
|
19
|
+
SelectedPact.merge(selected_pacts_for_pact_version_sha)
|
20
20
|
end
|
21
21
|
.sort
|
22
22
|
end
|
@@ -2,6 +2,7 @@ require "pact_broker/hash_refinements"
|
|
2
2
|
|
3
3
|
module PactBroker
|
4
4
|
module Pacts
|
5
|
+
# rubocop: disable Metrics/ClassLength
|
5
6
|
class Selector < Hash
|
6
7
|
using PactBroker::HashRefinements
|
7
8
|
|
@@ -266,51 +267,89 @@ module PactBroker
|
|
266
267
|
other.class == self.class && super
|
267
268
|
end
|
268
269
|
|
269
|
-
# rubocop: disable Metrics/CyclomaticComplexity
|
270
|
+
# rubocop: disable Metrics/CyclomaticComplexity
|
270
271
|
def <=> other
|
272
|
+
# elsif consumer || other.consumer
|
273
|
+
# consumer_comparison(other)
|
271
274
|
if overall_latest? || other.overall_latest?
|
272
|
-
|
273
|
-
0
|
274
|
-
else
|
275
|
-
overall_latest? ? -1 : 1
|
276
|
-
end
|
275
|
+
overall_latest_comparison(other)
|
277
276
|
elsif latest_for_branch? || other.latest_for_branch?
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
277
|
+
branch_comparison(other)
|
278
|
+
elsif latest_for_tag? || other.latest_for_tag?
|
279
|
+
latest_for_tag_comparison(other)
|
280
|
+
elsif tag || other.tag
|
281
|
+
tag_comparison(other)
|
283
282
|
elsif currently_deployed? || other.currently_deployed?
|
284
|
-
|
285
|
-
environment_name <=> other.environment_name
|
286
|
-
else
|
287
|
-
currently_deployed? ? -1 : 1
|
288
|
-
end
|
283
|
+
currently_deployed_comparison(other)
|
289
284
|
elsif currently_supported? || other.currently_supported?
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
285
|
+
currently_supported_comparison(other)
|
286
|
+
else
|
287
|
+
0
|
288
|
+
end
|
289
|
+
end
|
290
|
+
# rubocop: enable Metrics/CyclomaticComplexity
|
291
|
+
|
292
|
+
private
|
293
|
+
|
294
|
+
def overall_latest_comparison(other)
|
295
|
+
if overall_latest? == other.overall_latest?
|
296
|
+
0
|
297
|
+
else
|
298
|
+
overall_latest? ? -1 : 1
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
def branch_comparison(other)
|
303
|
+
if latest_for_branch? == other.latest_for_branch?
|
304
|
+
branch <=> other.branch
|
305
|
+
else
|
306
|
+
latest_for_branch? ? -1 : 1
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
def currently_deployed_comparison(other)
|
311
|
+
if currently_deployed? == other.currently_deployed?
|
312
|
+
environment_name <=> other.environment_name
|
313
|
+
else
|
314
|
+
currently_deployed? ? -1 : 1
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
def currently_supported_comparison(other)
|
319
|
+
if currently_supported? == other.currently_supported?
|
320
|
+
environment_name <=> other.environment_name
|
321
|
+
else
|
322
|
+
currently_supported? ? -1 : 1
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
def latest_for_tag_comparison(other)
|
327
|
+
if latest_for_tag? == other.latest_for_tag?
|
328
|
+
tag <=> other.tag
|
329
|
+
else
|
330
|
+
latest_for_tag? ? -1 : 1
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
def tag_comparison(other)
|
335
|
+
if tag && other.tag
|
336
|
+
if tag == other.tag
|
337
|
+
consumer_comparison(other)
|
298
338
|
else
|
299
|
-
latest_for_tag? ? -1 : 1
|
300
|
-
end
|
301
|
-
elsif consumer || other.consumer
|
302
|
-
if consumer == other.consumer
|
303
339
|
tag <=> other.tag
|
304
|
-
else
|
305
|
-
consumer ? -1 : 1
|
306
340
|
end
|
307
341
|
else
|
308
|
-
tag
|
342
|
+
tag ? -1 : 1
|
309
343
|
end
|
310
344
|
end
|
311
|
-
# rubocop: enable Metrics/CyclomaticComplexity, Metrics/MethodLength
|
312
345
|
|
313
|
-
|
346
|
+
def consumer_comparison(other)
|
347
|
+
if consumer == other.consumer
|
348
|
+
0
|
349
|
+
else
|
350
|
+
consumer ? -1 : 1
|
351
|
+
end
|
352
|
+
end
|
314
353
|
|
315
354
|
def latest?
|
316
355
|
!!self[:latest]
|
@@ -347,6 +386,32 @@ module PactBroker
|
|
347
386
|
comparison
|
348
387
|
end
|
349
388
|
end
|
389
|
+
|
390
|
+
def currently_deployed_comparison(other)
|
391
|
+
if currently_deployed? == other.currently_deployed?
|
392
|
+
production_comparison(other)
|
393
|
+
else
|
394
|
+
currently_deployed? ? -1 : 1
|
395
|
+
end
|
396
|
+
|
397
|
+
end
|
398
|
+
|
399
|
+
def currently_supported_comparison(other)
|
400
|
+
if currently_supported? == other.currently_supported?
|
401
|
+
production_comparison(other)
|
402
|
+
else
|
403
|
+
currently_supported? ? -1 : 1
|
404
|
+
end
|
405
|
+
end
|
406
|
+
|
407
|
+
def production_comparison(other)
|
408
|
+
if environment.production? == other.environment.production?
|
409
|
+
environment.name <=> other.environment.name
|
410
|
+
else
|
411
|
+
environment.production? ? 1 : -1
|
412
|
+
end
|
413
|
+
end
|
350
414
|
end
|
415
|
+
# rubocop: enable Metrics/ClassLength
|
351
416
|
end
|
352
417
|
end
|
data/lib/pact_broker/services.rb
CHANGED
@@ -89,6 +89,10 @@ module PactBroker
|
|
89
89
|
get(:contract_service)
|
90
90
|
end
|
91
91
|
|
92
|
+
def branch_service
|
93
|
+
get(:branch_service)
|
94
|
+
end
|
95
|
+
|
92
96
|
# rubocop: disable Metrics/MethodLength
|
93
97
|
def register_default_services
|
94
98
|
register_service(:index_service) do
|
@@ -185,6 +189,11 @@ module PactBroker
|
|
185
189
|
require "pact_broker/contracts/service"
|
186
190
|
PactBroker::Contracts::Service
|
187
191
|
end
|
192
|
+
|
193
|
+
register_service(:branch_service) do
|
194
|
+
require "pact_broker/versions/branch_service"
|
195
|
+
PactBroker::Versions::BranchService
|
196
|
+
end
|
188
197
|
end
|
189
198
|
# rubocop: enable Metrics/MethodLength
|
190
199
|
end
|
@@ -3,6 +3,7 @@ require "faraday_middleware"
|
|
3
3
|
require "logger"
|
4
4
|
require "erb"
|
5
5
|
require "yaml"
|
6
|
+
require "base64"
|
6
7
|
|
7
8
|
module PactBroker
|
8
9
|
module Test
|
@@ -53,11 +54,12 @@ module PactBroker
|
|
53
54
|
self
|
54
55
|
end
|
55
56
|
|
56
|
-
def create_version(pacticipant:, version:, branch:)
|
57
|
-
|
58
|
-
branch
|
59
|
-
|
60
|
-
|
57
|
+
def create_version(pacticipant:, version:, branch: nil)
|
58
|
+
if branch
|
59
|
+
client.put("pacticipants/#{encode(pacticipant)}/branches/#{encode(branch)}/versions/#{encode(version)}", {}).tap { |response| check_for_error(response) }
|
60
|
+
else
|
61
|
+
client.put("pacticipants/#{encode(pacticipant)}/versions/#{encode(version)}").tap { |response| check_for_error(response) }
|
62
|
+
end
|
61
63
|
self
|
62
64
|
end
|
63
65
|
|
@@ -100,6 +102,29 @@ module PactBroker
|
|
100
102
|
self
|
101
103
|
end
|
102
104
|
|
105
|
+
def publish_contract(consumer: last_consumer_name, consumer_version:, provider: last_provider_name, content_id:, tag: nil, branch: nil)
|
106
|
+
content = generate_content(consumer, provider, content_id)
|
107
|
+
request_body_hash = {
|
108
|
+
:pacticipantName => consumer,
|
109
|
+
:pacticipantVersionNumber => consumer_version,
|
110
|
+
:branch => branch,
|
111
|
+
:tags => tag ? [tag] : nil,
|
112
|
+
:contracts => [
|
113
|
+
{
|
114
|
+
:consumerName => consumer,
|
115
|
+
:providerName => provider,
|
116
|
+
:specification => "pact",
|
117
|
+
:contentType => "application/json",
|
118
|
+
:content => Base64.strict_encode64(content.to_json)
|
119
|
+
}
|
120
|
+
]
|
121
|
+
}.compact
|
122
|
+
response = client.post("contracts/publish", request_body_hash).tap { |resp| check_for_error(resp) }
|
123
|
+
puts response.body["logs"].collect{ |log| log["message"]}
|
124
|
+
separate
|
125
|
+
self
|
126
|
+
end
|
127
|
+
|
103
128
|
def publish_pact(consumer: last_consumer_name, consumer_version:, provider: last_provider_name, content_id:, tag: nil, branch: nil)
|
104
129
|
@last_consumer_name = consumer
|
105
130
|
@last_provider_name = provider
|
@@ -120,7 +145,7 @@ module PactBroker
|
|
120
145
|
self
|
121
146
|
end
|
122
147
|
|
123
|
-
def get_pacts_for_verification(provider: last_provider_name, provider_version_tag: nil, provider_version_branch: nil, consumer_version_selectors:
|
148
|
+
def get_pacts_for_verification(provider: last_provider_name, provider_version_tag: nil, provider_version_branch: nil, consumer_version_selectors: nil, enable_pending: false, include_wip_pacts_since: nil)
|
124
149
|
@last_provider_name = provider
|
125
150
|
@last_provider_version_tag = provider_version_tag
|
126
151
|
@last_provder_version_branch = provider_version_branch
|
@@ -258,7 +283,7 @@ module PactBroker
|
|
258
283
|
def can_i_deploy(pacticipant:, version:, to: nil, to_environment: nil)
|
259
284
|
can_i_deploy_response = client.get("can-i-deploy", { pacticipant: pacticipant, version: version, to: to, environment: to_environment}.compact ).tap { |response| check_for_error(response) }
|
260
285
|
can = !!(can_i_deploy_response.body["summary"] || {})["deployable"]
|
261
|
-
puts "can-i-deploy #{pacticipant} version #{version} to #{to}: #{can ? 'yes' : 'no'}"
|
286
|
+
puts "can-i-deploy #{pacticipant} version #{version} to #{to || to_environment}: #{can ? 'yes' : 'no'}"
|
262
287
|
summary = can_i_deploy_response.body["summary"]
|
263
288
|
verification_result_urls = (can_i_deploy_response.body["matrix"] || []).collect do | row |
|
264
289
|
row.dig("verificationResult", "_links", "self", "href")
|
@@ -29,6 +29,7 @@ require "pact_broker/matrix/row"
|
|
29
29
|
require "pact_broker/deployments/environment_service"
|
30
30
|
require "pact_broker/deployments/deployed_version_service"
|
31
31
|
require "pact_broker/deployments/released_version_service"
|
32
|
+
require "pact_broker/versions/branch_version_repository"
|
32
33
|
require "ostruct"
|
33
34
|
|
34
35
|
module PactBroker
|
@@ -162,37 +163,17 @@ module PactBroker
|
|
162
163
|
end
|
163
164
|
|
164
165
|
def create_version version_number = "1.0.#{model_counter}", params = {}
|
165
|
-
params
|
166
|
-
@version = PactBroker::Domain::Version.create(:number => version_number, :pacticipant => @pacticipant)
|
166
|
+
@version = create_pacticipant_version(version_number, pacticipant, params)
|
167
167
|
self
|
168
168
|
end
|
169
169
|
|
170
170
|
def create_consumer_version version_number = "1.0.#{model_counter}", params = {}
|
171
|
-
params
|
172
|
-
tag_names = [params.delete(:tag_names), params.delete(:tag_name)].flatten.compact
|
173
|
-
@consumer_version = PactBroker::Domain::Version.create(
|
174
|
-
number: version_number,
|
175
|
-
pacticipant: @consumer,
|
176
|
-
branch: params[:branch],
|
177
|
-
build_url: params[:build_url]
|
178
|
-
)
|
179
|
-
set_created_at_if_set params[:created_at], :versions, { id: @consumer_version.id }
|
180
|
-
tag_names.each do | tag_name |
|
181
|
-
tag = PactBroker::Domain::Tag.create(name: tag_name, version: consumer_version)
|
182
|
-
set_created_at_if_set(params[:created_at], :tags, { name: tag.name, version_id: consumer_version.id })
|
183
|
-
end
|
171
|
+
@consumer_version = create_pacticipant_version(version_number, consumer, params)
|
184
172
|
self
|
185
173
|
end
|
186
174
|
|
187
175
|
def create_provider_version version_number = "1.0.#{model_counter}", params = {}
|
188
|
-
params
|
189
|
-
tag_names = [params.delete(:tag_names), params.delete(:tag_name)].flatten.compact
|
190
|
-
@version = PactBroker::Domain::Version.create(:number => version_number, :pacticipant => @provider, branch: params[:branch])
|
191
|
-
@provider_version = @version
|
192
|
-
tag_names.each do | tag_name |
|
193
|
-
tag = PactBroker::Domain::Tag.create(name: tag_name, version: provider_version)
|
194
|
-
set_created_at_if_set(params[:created_at], :tags, { name: tag.name, version_id: provider_version.id })
|
195
|
-
end
|
176
|
+
@provider_version = create_pacticipant_version(version_number, provider, params)
|
196
177
|
self
|
197
178
|
end
|
198
179
|
|
@@ -376,7 +357,7 @@ module PactBroker
|
|
376
357
|
pact_version = PactBroker::Pacts::Repository.new.find_pact_version(@consumer, @provider, pact.pact_version_sha)
|
377
358
|
@verification = PactBroker::Verifications::Repository.new.create(verification, provider_version_number, pact_version)
|
378
359
|
@provider_version = PactBroker::Domain::Version.where(pacticipant_id: @provider.id, number: provider_version_number).single_record
|
379
|
-
@provider_version
|
360
|
+
PactBroker::Versions::BranchVersionRepository.new.add_branch(@provider_version, branch) if branch
|
380
361
|
|
381
362
|
set_created_at_if_set(parameters[:created_at], :verifications, id: @verification.id)
|
382
363
|
set_created_at_if_set(parameters[:created_at], :versions, id: @provider_version.id)
|
@@ -542,6 +523,26 @@ module PactBroker
|
|
542
523
|
|
543
524
|
private
|
544
525
|
|
526
|
+
def create_pacticipant_version(version_number, pacticipant, params = {})
|
527
|
+
params.delete(:comment)
|
528
|
+
tag_names = [params.delete(:tag_names), params.delete(:tag_name)].flatten.compact
|
529
|
+
args = {
|
530
|
+
number: version_number,
|
531
|
+
pacticipant_id: pacticipant.id,
|
532
|
+
branch: params[:branch],
|
533
|
+
build_url: params[:build_url]
|
534
|
+
}
|
535
|
+
|
536
|
+
version = PactBroker::Versions::Repository.new.create(args)
|
537
|
+
|
538
|
+
set_created_at_if_set params[:created_at], :versions, { id: version.id }
|
539
|
+
tag_names.each do | tag_name |
|
540
|
+
tag = PactBroker::Domain::Tag.create(name: tag_name, version: version)
|
541
|
+
set_created_at_if_set(params[:created_at], :tags, { name: tag.name, version_id: version.id })
|
542
|
+
end
|
543
|
+
version
|
544
|
+
end
|
545
|
+
|
545
546
|
def create_deployed_version(uuid: , currently_deployed: , version:, environment_name: , target: nil, created_at: nil)
|
546
547
|
env = find_environment(environment_name)
|
547
548
|
@deployed_version = PactBroker::Deployments::DeployedVersionService.find_or_create(uuid, version, env, target)
|