pact_broker 2.68.0 → 2.68.1
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 +7 -0
- data/docker-compose-issue-repro.yml +18 -0
- data/issue-reproduction/Dockerfile-pact-broker +42 -0
- data/lib/pact_broker/configuration.rb +3 -0
- data/lib/pact_broker/domain/webhook_request.rb +2 -1
- data/lib/pact_broker/test/http_test_data_builder.rb +121 -0
- data/lib/pact_broker/version.rb +1 -1
- data/script/reproduce-issue.rb +20 -0
- data/spec/lib/pact_broker/domain/webhook_request_spec.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1076b8629f5570c2304ec89fc169be77c2b6f54aaf832ceec91d5a939806f97
|
4
|
+
data.tar.gz: 28c09fcdf4d7abc16f367b8c6aaebfd3f3baaa68850ae5809aefb33d92bae8fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6fd730f1c2500942f680f66c4f526b138e71fd6f27a194b85fc280f9f1d959d6ecf79e88cb4aa685d451373cc9c3ac80714751a7d3658ec75c00f874925a8a39
|
7
|
+
data.tar.gz: 4327534a89cbaae5d76a86bb36aeb220668fd41805837923188e4ae1bfe2e3968d416b4c26338c6b80cc911552bb3f41db2ac0feef4a0bf70470820d1f780136
|
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
version: "3"
|
2
|
+
|
3
|
+
services:
|
4
|
+
pact-broker:
|
5
|
+
build:
|
6
|
+
context: .
|
7
|
+
dockerfile: issue-reproduction/Dockerfile-pact-broker
|
8
|
+
ports:
|
9
|
+
- "9292:9292"
|
10
|
+
command: bundle exec rackup -p 9292 -o 0.0.0.0
|
11
|
+
|
12
|
+
repro-issue:
|
13
|
+
build:
|
14
|
+
context: .
|
15
|
+
dockerfile: issue-reproduction/Dockerfile-pact-broker
|
16
|
+
depends_on:
|
17
|
+
- pact-broker
|
18
|
+
command: dockerize -wait http://pact-broker:9292 -timeout 30s /home/script/reproduce-issue.rb
|
@@ -0,0 +1,42 @@
|
|
1
|
+
FROM ruby:2.5.3-alpine
|
2
|
+
|
3
|
+
RUN apk update \
|
4
|
+
&& apk --no-cache add \
|
5
|
+
"build-base>=0.5" \
|
6
|
+
"bash>=4.4" \
|
7
|
+
"ca-certificates>=20190108" \
|
8
|
+
"git>=2.20" \
|
9
|
+
"postgresql-dev>=11.3" \
|
10
|
+
"sqlite-dev>=3.28" \
|
11
|
+
"sqlite>=3.28" \
|
12
|
+
"tzdata>=2019" \
|
13
|
+
"mariadb-dev>=10.3" \
|
14
|
+
&& rm -rf /var/cache/apk/*
|
15
|
+
|
16
|
+
RUN apk add --no-cache openssl less
|
17
|
+
|
18
|
+
ENV DOCKERIZE_VERSION v0.6.1
|
19
|
+
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
|
20
|
+
&& tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
|
21
|
+
&& rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz
|
22
|
+
|
23
|
+
|
24
|
+
WORKDIR /home
|
25
|
+
|
26
|
+
COPY Gemfile /home/Gemfile
|
27
|
+
COPY pact_broker.gemspec /home/pact_broker.gemspec
|
28
|
+
COPY lib/pact_broker/version.rb /home/lib/pact_broker/version.rb
|
29
|
+
COPY .gitignore /home/.gitignore
|
30
|
+
|
31
|
+
RUN gem install bundler -v '~>2.0.0' \
|
32
|
+
&& bundle install --jobs 3 --retry 3
|
33
|
+
|
34
|
+
COPY lib /home/lib
|
35
|
+
COPY db /home/db
|
36
|
+
COPY public /home/public
|
37
|
+
COPY tasks /home/tasks
|
38
|
+
COPY config.ru /home/config.ru
|
39
|
+
COPY Rakefile /home/Rakefile
|
40
|
+
COPY script /home/script
|
41
|
+
|
42
|
+
RUN ls /home
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'pact_broker/version'
|
1
2
|
require 'pact_broker/error'
|
2
3
|
require 'pact_broker/config/space_delimited_string_list'
|
3
4
|
require 'semantic_logger'
|
@@ -46,6 +47,7 @@ module PactBroker
|
|
46
47
|
attr_accessor :warning_error_class_names
|
47
48
|
attr_accessor :check_for_potential_duplicate_pacticipant_names
|
48
49
|
attr_accessor :webhook_retry_schedule
|
50
|
+
attr_accessor :user_agent
|
49
51
|
attr_reader :webhook_http_method_whitelist, :webhook_scheme_whitelist, :webhook_host_whitelist
|
50
52
|
attr_accessor :semver_formats
|
51
53
|
attr_accessor :enable_public_badge_access, :shields_io_base_url, :badge_provider_mode
|
@@ -93,6 +95,7 @@ module PactBroker
|
|
93
95
|
require 'pact_broker/db/seed_example_data'
|
94
96
|
PactBroker::DB::SeedExampleData.call
|
95
97
|
end
|
98
|
+
config.user_agent = "Pact Broker v#{PactBroker::VERSION}"
|
96
99
|
config.base_equality_only_on_content_that_affects_verification_results = true
|
97
100
|
config.order_versions_by_date = true
|
98
101
|
config.semver_formats = ["%M.%m.%p%s%d", "%M.%m", "%M"]
|
@@ -9,6 +9,7 @@ require 'cgi'
|
|
9
9
|
require 'delegate'
|
10
10
|
require 'rack/utils'
|
11
11
|
require 'pact_broker/webhooks/webhook_request_logger'
|
12
|
+
require 'pact_broker/configuration'
|
12
13
|
|
13
14
|
module PactBroker
|
14
15
|
module Domain
|
@@ -61,7 +62,7 @@ module PactBroker
|
|
61
62
|
@http_request ||= begin
|
62
63
|
req = Net::HTTP.const_get(method.capitalize).new(uri.request_uri)
|
63
64
|
req.delete("accept-encoding")
|
64
|
-
req
|
65
|
+
req["user-agent"] = PactBroker.configuration.user_agent
|
65
66
|
headers.each_pair { | name, value | req[name] = value }
|
66
67
|
req.basic_auth(username, password) if username && username.size > 0
|
67
68
|
req.body = body unless body.nil?
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_middleware'
|
3
|
+
require 'logger'
|
4
|
+
require 'erb'
|
5
|
+
require 'yaml'
|
6
|
+
|
7
|
+
module PactBroker
|
8
|
+
module Test
|
9
|
+
class HttpTestDataBuilder
|
10
|
+
|
11
|
+
attr_reader :client, :last_consumer_name, :last_provider_name, :last_consumer_version_number, :last_provider_version_number
|
12
|
+
|
13
|
+
def initialize(pact_broker_base_url, auth)
|
14
|
+
@client = Faraday.new(url: pact_broker_base_url) do |faraday|
|
15
|
+
faraday.request :json
|
16
|
+
faraday.response :json, :content_type => /\bjson$/
|
17
|
+
faraday.response :logger, ::Logger.new($stdout), headers: false do | logger |
|
18
|
+
logger.filter(/(Authorization: ).*/,'\1[REMOVED]')
|
19
|
+
end
|
20
|
+
# faraday.headers['Authorization'] = "Bearer #{pactflow_api_token}"
|
21
|
+
faraday.adapter Faraday.default_adapter
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def sleep
|
26
|
+
Kernel.sleep 1
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_tagged_pacticipant_version(pacticipant:, version:, tag:)
|
31
|
+
[*tag].each do | tag |
|
32
|
+
create_tag(pacticipant: pacticipant, version: version, tag: tag)
|
33
|
+
end
|
34
|
+
self
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_tag(pacticipant:, version:, tag:)
|
38
|
+
puts "Creating tag '#{tag}' for #{pacticipant} version #{version}"
|
39
|
+
client.put("/pacticipants/#{encode(pacticipant)}/versions/#{encode(version)}/tags/#{encode(tag)}", {})
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
43
|
+
def publish_pact(consumer: last_consumer_name, consumer_version:, provider: last_provider_name, content_id:, tag:)
|
44
|
+
@last_consumer_name = consumer
|
45
|
+
@last_provider_name = provider
|
46
|
+
@last_consumer_version_number = consumer_version
|
47
|
+
|
48
|
+
[*tag].each do | tag |
|
49
|
+
create_tag(pacticipant: consumer, version: consumer_version, tag: tag)
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
content = generate_content(consumer, provider, content_id)
|
54
|
+
puts "Publishing pact for consumer #{consumer} version #{consumer_version} and provider #{provider}"
|
55
|
+
pact_path = "/pacts/provider/#{encode(provider)}/consumer/#{encode(consumer)}/version/#{encode(consumer_version)}"
|
56
|
+
@publish_pact_response = client.put(pact_path, content)
|
57
|
+
self
|
58
|
+
end
|
59
|
+
|
60
|
+
def get_pacts_for_verification(provider: last_provider_name, provider_version_tag: , consumer_version_selectors:, enable_pending: false, include_wip_pacts_since: nil)
|
61
|
+
puts "Fetching pacts for verification for #{provider}"
|
62
|
+
body = {
|
63
|
+
providerVersionTags: [*provider_version_tag],
|
64
|
+
consumerVersionSelectors: consumer_version_selectors,
|
65
|
+
includePendingStatus: enable_pending,
|
66
|
+
includeWipPactsSince: include_wip_pacts_since
|
67
|
+
}
|
68
|
+
@pacts_for_verification_response = client.post("/pacts/provider/#{encode(provider)}/for-verification", body)
|
69
|
+
self
|
70
|
+
end
|
71
|
+
|
72
|
+
def print_pacts_for_verification
|
73
|
+
puts "Pacts for verification:"
|
74
|
+
@pacts_for_verification_response.body["_embedded"]["pacts"].each do | pact |
|
75
|
+
puts({
|
76
|
+
"url" => pact["_links"]["self"]["href"],
|
77
|
+
"wip" => pact["verificationProperties"]["wip"],
|
78
|
+
"pending" => pact["verificationProperties"]["pending"]
|
79
|
+
}.to_yaml)
|
80
|
+
end
|
81
|
+
self
|
82
|
+
end
|
83
|
+
|
84
|
+
def print_pacts_for_verification_response
|
85
|
+
puts @pacts_for_verification_response.body
|
86
|
+
self
|
87
|
+
end
|
88
|
+
|
89
|
+
def delete_integration(consumer:, provider:)
|
90
|
+
client.delete("/integrations/provider/#{encode(provider)}/consumer/#{encode(consumer)}")
|
91
|
+
self
|
92
|
+
end
|
93
|
+
|
94
|
+
def generate_content(consumer_name, provider_name, content_id)
|
95
|
+
{
|
96
|
+
consumer: {
|
97
|
+
name: consumer_name
|
98
|
+
},
|
99
|
+
provider: {
|
100
|
+
name: provider_name
|
101
|
+
},
|
102
|
+
interactions: [
|
103
|
+
{
|
104
|
+
request: {
|
105
|
+
method: "GET",
|
106
|
+
path: "/things/#{content_id}"
|
107
|
+
},
|
108
|
+
response: {
|
109
|
+
status: 200
|
110
|
+
}
|
111
|
+
}
|
112
|
+
]
|
113
|
+
}
|
114
|
+
end
|
115
|
+
|
116
|
+
def encode string
|
117
|
+
ERB::Util.url_encode(string)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
data/lib/pact_broker/version.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH << "#{Dir.pwd}/lib"
|
4
|
+
|
5
|
+
require 'pact_broker/test/http_test_data_builder'
|
6
|
+
|
7
|
+
td = PactBroker::Test::HttpTestDataBuilder.new('http://pact-broker:9292', { })
|
8
|
+
td.delete_integration(consumer: "Foo", provider: "Bar")
|
9
|
+
.create_tagged_pacticipant_version(pacticipant: "Bar", version: "1", tag: "master")
|
10
|
+
.sleep
|
11
|
+
.publish_pact(consumer: "Foo", consumer_version: "1", provider: "Bar", content_id: "111", tag: "master")
|
12
|
+
.sleep
|
13
|
+
.publish_pact(consumer_version: "2", content_id: "222", tag: "feat-x")
|
14
|
+
.sleep
|
15
|
+
.get_pacts_for_verification(
|
16
|
+
enable_pending: true,
|
17
|
+
provider_version_tag: "master",
|
18
|
+
include_wip_pacts_since: "2020-01-01",
|
19
|
+
consumer_version_selectors: [{ tag: "master", latest: true }])
|
20
|
+
.print_pacts_for_verification
|
@@ -77,7 +77,7 @@ module PactBroker
|
|
77
77
|
describe "execute" do
|
78
78
|
let!(:http_request) do
|
79
79
|
stub_request(:post, "http://example.org/hook").
|
80
|
-
with(:headers => {'Content-Type'=>'text/plain'}, :body => request_body).
|
80
|
+
with(:headers => {'Content-Type'=>'text/plain', 'User-Agent' => /Pact Broker/}, :body => request_body).
|
81
81
|
to_return(:status => status, :body => "respbod", :headers => {'Content-Type' => 'text/foo, blah'})
|
82
82
|
end
|
83
83
|
|
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.68.
|
4
|
+
version: 2.68.1
|
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: 2020-10-
|
13
|
+
date: 2020-10-25 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
@@ -555,6 +555,7 @@ files:
|
|
555
555
|
- db/test/change_migration_strategy/Rakefile
|
556
556
|
- db/test/change_migration_strategy/before/Gemfile
|
557
557
|
- docker-compose-dev-postgres.yml
|
558
|
+
- docker-compose-issue-repro.yml
|
558
559
|
- docker-compose-test.yml
|
559
560
|
- docs/images/Pactflow logo - black small.png
|
560
561
|
- example/Gemfile
|
@@ -565,6 +566,7 @@ files:
|
|
565
566
|
- example/basic_auth/config.ru
|
566
567
|
- example/config.ru
|
567
568
|
- example/example_data.sql
|
569
|
+
- issue-reproduction/Dockerfile-pact-broker
|
568
570
|
- lib/db.rb
|
569
571
|
- lib/pact/doc/README.md
|
570
572
|
- lib/pact/doc/doc_file.rb
|
@@ -873,6 +875,7 @@ files:
|
|
873
875
|
- lib/pact_broker/tasks/delete_overwritten_data_task.rb
|
874
876
|
- lib/pact_broker/tasks/migration_task.rb
|
875
877
|
- lib/pact_broker/tasks/version_task.rb
|
878
|
+
- lib/pact_broker/test/http_test_data_builder.rb
|
876
879
|
- lib/pact_broker/test/test_data_builder.rb
|
877
880
|
- lib/pact_broker/ui.rb
|
878
881
|
- lib/pact_broker/ui/app.rb
|
@@ -1039,6 +1042,7 @@ files:
|
|
1039
1042
|
- script/recreate-test-database.sh
|
1040
1043
|
- script/release-via-github-action.sh
|
1041
1044
|
- script/release.sh
|
1045
|
+
- script/reproduce-issue.rb
|
1042
1046
|
- script/restart.sh
|
1043
1047
|
- script/run-with-ssl.rb
|
1044
1048
|
- script/seed-example-matrix.rb
|