pact_broker 2.110.0 → 2.111.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 +13 -0
- data/lib/pact_broker/api/decorators/label_decorator.rb +19 -13
- data/lib/pact_broker/api/decorators/labels_decorator.rb +23 -0
- data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +1 -1
- data/lib/pact_broker/api/paths.rb +2 -1
- data/lib/pact_broker/api/resources/can_i_merge_badge.rb +36 -0
- data/lib/pact_broker/api/resources/labels.rb +37 -0
- data/lib/pact_broker/api.rb +4 -0
- data/lib/pact_broker/badges/service.rb +18 -0
- data/lib/pact_broker/labels/repository.rb +5 -0
- data/lib/pact_broker/labels/service.rb +4 -0
- data/lib/pact_broker/matrix/service.rb +26 -0
- data/lib/pact_broker/pacticipants/repository.rb +10 -1
- data/lib/pact_broker/test/test_data_builder.rb +9 -2
- data/lib/pact_broker/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e21e3c2fc82cfe4697582921613bd435e026cf6f381c64c33d703b8c31c586be
|
4
|
+
data.tar.gz: 6b6bc75a486f936441b172c7a80a7e8541f3bbb1731be03b1e33a869327014bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2afe779170a4910f06ace0a29b8ee66fa81bc355fc1a1c22a532fb3f9f64f5775309543c23b3b7ae4c4c837c1a66d0b10ddb0f62e8e9f586b7fd4942dc29d33c
|
7
|
+
data.tar.gz: 3b2738f3785dc1c272d4e1ba24104b4786bd467780808d41bdf2dd7f2ce0e83f0f11645a8ca3b8fd16642055a897d60b573ea7fc8392751cf0a59ecafeba6130
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
<a name="v2.111.0"></a>
|
2
|
+
### v2.111.0 (2024-07-26)
|
3
|
+
|
4
|
+
#### Features
|
5
|
+
|
6
|
+
* add new label api (#703) ([ff3f84e2](/../../commit/ff3f84e2))
|
7
|
+
* search pacticipants by display_name ([c5945801](/../../commit/c5945801))
|
8
|
+
|
9
|
+
#### Bug Fixes
|
10
|
+
|
11
|
+
* **docs**
|
12
|
+
* Update OAS with correct ref to Notice schema ([6729b7f8](/../../commit/6729b7f8))
|
13
|
+
|
1
14
|
<a name="v2.110.0"></a>
|
2
15
|
### v2.110.0 (2024-04-02)
|
3
16
|
|
@@ -11,20 +11,26 @@ module PactBroker
|
|
11
11
|
|
12
12
|
include Timestamps
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
# This method is overridden to conditionally render the links based on the user_options
|
15
|
+
def to_hash(options)
|
16
|
+
hash = super
|
17
|
+
|
18
|
+
unless options.dig(:user_options, :hide_label_decorator_links)
|
19
|
+
hash[:_links] = {
|
20
|
+
self: {
|
21
|
+
title: "Label",
|
22
|
+
name: represented.name,
|
23
|
+
href: label_url(represented, options.dig(:user_options, :base_url))
|
24
|
+
},
|
25
|
+
pacticipant: {
|
26
|
+
title: "Pacticipant",
|
27
|
+
name: represented.pacticipant.name,
|
28
|
+
href: pacticipant_url(options.dig(:user_options, :base_url), represented.pacticipant)
|
29
|
+
}
|
30
|
+
}
|
31
|
+
end
|
21
32
|
|
22
|
-
|
23
|
-
{
|
24
|
-
title: "Pacticipant",
|
25
|
-
name: represented.pacticipant.name,
|
26
|
-
href: pacticipant_url(options.fetch(:base_url), represented.pacticipant)
|
27
|
-
}
|
33
|
+
hash
|
28
34
|
end
|
29
35
|
end
|
30
36
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative "base_decorator"
|
2
|
+
require_relative "pagination_links"
|
3
|
+
require_relative "label_decorator"
|
4
|
+
require "pact_broker/domain/label"
|
5
|
+
|
6
|
+
module PactBroker
|
7
|
+
module Api
|
8
|
+
module Decorators
|
9
|
+
class LabelsDecorator < BaseDecorator
|
10
|
+
collection :entries, :as => :labels, :class => PactBroker::Domain::Label, :extend => PactBroker::Api::Decorators::LabelDecorator, embedded: true
|
11
|
+
|
12
|
+
include PaginationLinks
|
13
|
+
|
14
|
+
link :self do | options |
|
15
|
+
{
|
16
|
+
title: "Labels",
|
17
|
+
href: options.fetch(:resource_url)
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -20,7 +20,7 @@ module PactBroker
|
|
20
20
|
property :main_branch
|
21
21
|
|
22
22
|
property :latest_version, as: :latestVersion, :class => PactBroker::Domain::Version, extend: PactBroker::Api::Decorators::EmbeddedVersionDecorator, embedded: true, writeable: false
|
23
|
-
collection :labels, :class => PactBroker::Domain::Label, extend: PactBroker::Api::Decorators::EmbeddedLabelDecorator, embedded: true
|
23
|
+
collection :labels, :class => PactBroker::Domain::Label, extend: PactBroker::Api::Decorators::EmbeddedLabelDecorator, embedded: true, writeable: false
|
24
24
|
|
25
25
|
include Timestamps
|
26
26
|
|
@@ -3,11 +3,12 @@ module PactBroker
|
|
3
3
|
module Paths
|
4
4
|
PACT_BADGE_PATH = %r{^/pacts/provider/[^/]+/consumer/.*/badge(?:\.[A-Za-z]+)?$}.freeze
|
5
5
|
MATRIX_BADGE_PATH = %r{^/matrix/provider/[^/]+/latest/[^/]+/consumer/[^/]+/latest/[^/]+/badge(?:\.[A-Za-z]+)?$}.freeze
|
6
|
+
CAN_I_MERGE_BADGE_PATH = %r{^/pacticipants/[^/]+/main-branch/can-i-merge/badge(?:\.[A-Za-z]+)?$}.freeze
|
6
7
|
CAN_I_DEPLOY_TAG_BADGE_PATH = %r{^/pacticipants/[^/]+/latest-version/[^/]+/can-i-deploy/to/[^/]+/badge(?:\.[A-Za-z]+)?$}.freeze
|
7
8
|
CAN_I_DEPLOY_BRANCH_ENV_BADGE_PATH = %r{^/pacticipants/[^/]+/branches/[^/]+/latest-version/can-i-deploy/to-environment/[^/]+/badge(?:\.[A-Za-z]+)?$}.freeze
|
8
9
|
VERIFICATION_RESULTS = %r{^/pacts/provider/[^/]+/consumer/[^/]+/pact-version/[^/]+/verification-results/[^/]+}
|
9
10
|
|
10
|
-
BADGE_PATHS = [PACT_BADGE_PATH, MATRIX_BADGE_PATH, CAN_I_DEPLOY_TAG_BADGE_PATH, CAN_I_DEPLOY_BRANCH_ENV_BADGE_PATH]
|
11
|
+
BADGE_PATHS = [PACT_BADGE_PATH, MATRIX_BADGE_PATH, CAN_I_DEPLOY_TAG_BADGE_PATH, CAN_I_DEPLOY_BRANCH_ENV_BADGE_PATH, CAN_I_MERGE_BADGE_PATH]
|
11
12
|
|
12
13
|
extend self
|
13
14
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "pact_broker/api/resources/base_resource"
|
2
|
+
require "pact_broker/api/resources/badge_methods"
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module Api
|
6
|
+
module Resources
|
7
|
+
class CanIMergeBadge < BaseResource
|
8
|
+
include BadgeMethods # This module contains all necessary webmachine methods for badge implementation
|
9
|
+
|
10
|
+
def badge_url
|
11
|
+
if pacticipant.nil? # pacticipant method is defined in BaseResource
|
12
|
+
# if the pacticipant is nil, we return an error badge url
|
13
|
+
badge_service.error_badge_url("pacticipant", "not found")
|
14
|
+
elsif version.nil?
|
15
|
+
# when there is no main branch version, we return an error badge url
|
16
|
+
badge_service.error_badge_url("main branch version", "not found")
|
17
|
+
else
|
18
|
+
# we call badge_service to build the badge url
|
19
|
+
badge_service.can_i_merge_badge_url(deployable: results)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def results
|
26
|
+
# can_i_merge returns true or false if the main branch version is compatible with all the integrations
|
27
|
+
@results ||= matrix_service.can_i_merge(pacticipant: pacticipant, latest_main_branch_version: version)
|
28
|
+
end
|
29
|
+
|
30
|
+
def version
|
31
|
+
@version ||= version_service.find_latest_version_from_main_branch(pacticipant)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "pact_broker/api/resources/base_resource"
|
2
|
+
require "pact_broker/api/decorators/labels_decorator"
|
3
|
+
require "pact_broker/api/resources/pagination_methods"
|
4
|
+
|
5
|
+
module PactBroker
|
6
|
+
module Api
|
7
|
+
module Resources
|
8
|
+
class Labels < BaseResource
|
9
|
+
include PaginationMethods
|
10
|
+
|
11
|
+
def content_types_provided
|
12
|
+
[["application/hal+json", :to_json]]
|
13
|
+
end
|
14
|
+
|
15
|
+
def allowed_methods
|
16
|
+
["GET", "OPTIONS"]
|
17
|
+
end
|
18
|
+
|
19
|
+
def policy_name
|
20
|
+
:'labels::labels'
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_json
|
24
|
+
decorator_class(:labels_decorator).new(labels).to_json(
|
25
|
+
**decorator_options(
|
26
|
+
hide_label_decorator_links: true,
|
27
|
+
)
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def labels
|
32
|
+
label_service.get_all_unique_labels(pagination_options)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/pact_broker/api.rb
CHANGED
@@ -85,6 +85,9 @@ module PactBroker
|
|
85
85
|
add ["pacticipants", :pacticipant_name], Api::Resources::Pacticipant, {resource_name: "pacticipant"}
|
86
86
|
add ["pacticipants", :pacticipant_name, "labels", :label_name], Api::Resources::Label, {resource_name: "pacticipant_label"}
|
87
87
|
|
88
|
+
# Labels
|
89
|
+
add ["labels"], Api::Resources::Labels, {resource_name: "labels"}
|
90
|
+
|
88
91
|
# Versions
|
89
92
|
add ["pacticipants", :pacticipant_name, "versions"], Api::Resources::Versions, {resource_name: "pacticipant_versions"}
|
90
93
|
add ["pacticipants", :pacticipant_name, "branches", :branch_name, "versions"], Api::Resources::BranchVersions, {resource_name: "pacticipant_branch_versions"}
|
@@ -92,6 +95,7 @@ module PactBroker
|
|
92
95
|
add ["pacticipants", :pacticipant_name, "latest-version", :tag], Api::Resources::LatestVersion, {resource_name: "latest_tagged_pacticipant_version"}
|
93
96
|
add ["pacticipants", :pacticipant_name, "latest-version", :tag, "can-i-deploy", "to", :to], Api::Resources::CanIDeployPacticipantVersionByTagToTag, { resource_name: "can_i_deploy_latest_tagged_version_to_tag" }
|
94
97
|
add ["pacticipants", :pacticipant_name, "latest-version", :tag, "can-i-deploy", "to", :to, "badge"], Api::Resources::CanIDeployPacticipantVersionByTagToTagBadge, { resource_name: "can_i_deploy_latest_tagged_version_to_tag_badge" }
|
98
|
+
add ["pacticipants", :pacticipant_name, "main-branch", "can-i-merge", "badge"], Api::Resources::CanIMergeBadge, { resource_name: "can_i_merge_badge" }
|
95
99
|
add ["pacticipants", :pacticipant_name, "latest-version"], Api::Resources::LatestVersion, {resource_name: "latest_pacticipant_version"}
|
96
100
|
add ["pacticipants", :pacticipant_name, "versions", :pacticipant_version_number, "tags", :tag_name], Api::Resources::Tag, {resource_name: "pacticipant_version_tag"}
|
97
101
|
add ["pacticipants", :pacticipant_name, "branches"], Api::Resources::PacticipantBranches, {resource_name: "pacticipant_branches"}
|
@@ -40,6 +40,24 @@ module PactBroker
|
|
40
40
|
build_shield_io_uri(title, status, color)
|
41
41
|
end
|
42
42
|
|
43
|
+
def can_i_merge_badge_url(deployable: nil)
|
44
|
+
title = "can-i-merge"
|
45
|
+
|
46
|
+
# rubocop:disable Layout/EndAlignment
|
47
|
+
color, status = case deployable
|
48
|
+
when nil
|
49
|
+
[ "lightgrey", "unknown" ]
|
50
|
+
when true
|
51
|
+
[ "brightgreen", "success" ]
|
52
|
+
else
|
53
|
+
[ "red", "failed" ]
|
54
|
+
end
|
55
|
+
# rubocop:enable Layout/EndAlignment
|
56
|
+
|
57
|
+
# left text is "can-i-merge", right text is the version number
|
58
|
+
build_shield_io_uri(title, status, color)
|
59
|
+
end
|
60
|
+
|
43
61
|
def error_badge_url(left_text, right_text)
|
44
62
|
build_shield_io_uri(left_text, right_text, "lightgrey")
|
45
63
|
end
|
@@ -3,6 +3,11 @@ require "pact_broker/domain/label"
|
|
3
3
|
module PactBroker
|
4
4
|
module Labels
|
5
5
|
class Repository
|
6
|
+
|
7
|
+
def get_all_unique_labels pagination_options = {}
|
8
|
+
PactBroker::Domain::Label.distinct.select(:name).all_with_pagination_options(pagination_options)
|
9
|
+
end
|
10
|
+
|
6
11
|
def create args
|
7
12
|
Domain::Label.new(name: args.fetch(:name), pacticipant: args.fetch(:pacticipant)).save
|
8
13
|
end
|
@@ -9,6 +9,10 @@ module PactBroker
|
|
9
9
|
|
10
10
|
extend PactBroker::Repositories
|
11
11
|
|
12
|
+
def get_all_unique_labels pagination_options = {}
|
13
|
+
label_repository.get_all_unique_labels(pagination_options)
|
14
|
+
end
|
15
|
+
|
12
16
|
def create args
|
13
17
|
pacticipant = pacticipant_repository.find_by_name_or_create args.fetch(:pacticipant_name)
|
14
18
|
label_repository.create pacticipant: pacticipant, name: args.fetch(:label_name)
|
@@ -22,6 +22,32 @@ module PactBroker
|
|
22
22
|
QueryResultsWithDeploymentStatusSummary.new(query_results, DeploymentStatusSummary.new(query_results))
|
23
23
|
end
|
24
24
|
|
25
|
+
def can_i_merge(pacticipant_name: nil, pacticipant: nil, latest_main_branch_version: nil)
|
26
|
+
# first we find the pacticipant by name (or use the one passed in) if pacticipant is nil
|
27
|
+
if pacticipant.nil?
|
28
|
+
pacticipant = pacticipant_service.find_pacticipant_by_name(pacticipant_name)
|
29
|
+
raise PactBroker::Error.new("No pacticipant found with name '#{pacticipant_name}'") unless pacticipant
|
30
|
+
else
|
31
|
+
pacticipant_name = pacticipant.name
|
32
|
+
end
|
33
|
+
|
34
|
+
# then we find the latest version from the main branch if not passed in
|
35
|
+
if latest_main_branch_version.nil?
|
36
|
+
latest_main_branch_version = version_service.find_latest_version_from_main_branch(pacticipant)
|
37
|
+
raise PactBroker::Error.new("No main branch version found for pacticipant '#{pacticipant_name}'") unless latest_main_branch_version
|
38
|
+
end
|
39
|
+
|
40
|
+
selectors = PactBroker::Matrix::UnresolvedSelector.from_hash(
|
41
|
+
pacticipant_name: pacticipant_name,
|
42
|
+
pacticipant_version_number: latest_main_branch_version.number
|
43
|
+
)
|
44
|
+
|
45
|
+
options = { main_branch: true, latest: true, latestby: "cvp" }
|
46
|
+
query_results = can_i_deploy([selectors], options)
|
47
|
+
|
48
|
+
query_results.deployable?
|
49
|
+
end
|
50
|
+
|
25
51
|
def find selectors, options = {}
|
26
52
|
logger.info "Querying matrix", selectors: selectors, options: options
|
27
53
|
matrix_repository.find(selectors, options)
|
@@ -102,7 +102,16 @@ module PactBroker
|
|
102
102
|
|
103
103
|
def search_by_name(pacticipant_name)
|
104
104
|
terms = pacticipant_name.split.map { |v| v.gsub("_", "\\_") }
|
105
|
-
|
105
|
+
columns = [:name, :display_name]
|
106
|
+
string_match_query = Sequel.|(
|
107
|
+
*terms.map do |term|
|
108
|
+
Sequel.|(
|
109
|
+
*columns.map do |column|
|
110
|
+
Sequel.ilike(Sequel[:pacticipants][column], "%#{term}%")
|
111
|
+
end
|
112
|
+
)
|
113
|
+
end
|
114
|
+
)
|
106
115
|
scope_for(PactBroker::Domain::Pacticipant).where(string_match_query)
|
107
116
|
end
|
108
117
|
|
@@ -165,9 +165,16 @@ module PactBroker
|
|
165
165
|
|
166
166
|
def create_pacticipant pacticipant_name, params = {}
|
167
167
|
params.delete(:comment)
|
168
|
+
version_to_create = params.delete(:version)
|
169
|
+
|
168
170
|
repository_url = "https://github.com/#{params[:repository_namespace] || "example-organization"}/#{params[:repository_name] || pacticipant_name}"
|
169
171
|
merged_params = { name: pacticipant_name, repository_url: repository_url }.merge(params)
|
170
172
|
@pacticipant = PactBroker::Domain::Pacticipant.create(merged_params)
|
173
|
+
|
174
|
+
version = create_pacticipant_version(version_to_create, @pacticipant) if version_to_create
|
175
|
+
main_branch = params[:main_branch]
|
176
|
+
PactBroker::Versions::BranchVersionRepository.new.add_branch(version, main_branch) if version && main_branch
|
177
|
+
|
171
178
|
self
|
172
179
|
end
|
173
180
|
|
@@ -639,8 +646,6 @@ module PactBroker
|
|
639
646
|
}.to_json
|
640
647
|
end
|
641
648
|
|
642
|
-
private
|
643
|
-
|
644
649
|
def create_pacticipant_version(version_number, pacticipant, params = {})
|
645
650
|
params.delete(:comment)
|
646
651
|
tag_names = [params.delete(:tag_names), params.delete(:tag_name)].flatten.compact
|
@@ -665,6 +670,8 @@ module PactBroker
|
|
665
670
|
version
|
666
671
|
end
|
667
672
|
|
673
|
+
private
|
674
|
+
|
668
675
|
def create_deployed_version(uuid: , currently_deployed: , version:, environment_name: , target: nil, created_at: nil)
|
669
676
|
env = find_environment(environment_name)
|
670
677
|
@deployed_version = PactBroker::Deployments::DeployedVersionService.find_or_create(uuid, version, env, target)
|
data/lib/pact_broker/version.rb
CHANGED
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.111.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: 2024-
|
13
|
+
date: 2024-08-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
@@ -654,6 +654,7 @@ files:
|
|
654
654
|
- lib/pact_broker/api/decorators/integration_decorator.rb
|
655
655
|
- lib/pact_broker/api/decorators/integrations_decorator.rb
|
656
656
|
- lib/pact_broker/api/decorators/label_decorator.rb
|
657
|
+
- lib/pact_broker/api/decorators/labels_decorator.rb
|
657
658
|
- lib/pact_broker/api/decorators/latest_pact_decorator.rb
|
658
659
|
- lib/pact_broker/api/decorators/matrix_decorator.rb
|
659
660
|
- lib/pact_broker/api/decorators/matrix_text_decorator.rb
|
@@ -720,6 +721,7 @@ files:
|
|
720
721
|
- lib/pact_broker/api/resources/can_i_deploy_pacticipant_version_by_branch_to_environment_badge.rb
|
721
722
|
- lib/pact_broker/api/resources/can_i_deploy_pacticipant_version_by_tag_to_tag.rb
|
722
723
|
- lib/pact_broker/api/resources/can_i_deploy_pacticipant_version_by_tag_to_tag_badge.rb
|
724
|
+
- lib/pact_broker/api/resources/can_i_merge_badge.rb
|
723
725
|
- lib/pact_broker/api/resources/clean.rb
|
724
726
|
- lib/pact_broker/api/resources/currently_deployed_versions_for_environment.rb
|
725
727
|
- lib/pact_broker/api/resources/currently_supported_versions_for_environment.rb
|
@@ -739,6 +741,7 @@ files:
|
|
739
741
|
- lib/pact_broker/api/resources/integration.rb
|
740
742
|
- lib/pact_broker/api/resources/integrations.rb
|
741
743
|
- lib/pact_broker/api/resources/label.rb
|
744
|
+
- lib/pact_broker/api/resources/labels.rb
|
742
745
|
- lib/pact_broker/api/resources/latest_pact.rb
|
743
746
|
- lib/pact_broker/api/resources/latest_pacts.rb
|
744
747
|
- lib/pact_broker/api/resources/latest_provider_pacts.rb
|
@@ -1265,7 +1268,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1265
1268
|
- !ruby/object:Gem::Version
|
1266
1269
|
version: '0'
|
1267
1270
|
requirements: []
|
1268
|
-
rubygems_version: 3.5.
|
1271
|
+
rubygems_version: 3.5.17
|
1269
1272
|
signing_key:
|
1270
1273
|
specification_version: 4
|
1271
1274
|
summary: See description
|