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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '09772ac584dd72c870b97fcaf82485425a5c506f7ab0b8a30bc0ce23eb071484'
4
- data.tar.gz: 34ae1ca468c7ebbecfb49570b9374be0db7792da67476ae46d73667c9323615c
3
+ metadata.gz: d1076b8629f5570c2304ec89fc169be77c2b6f54aaf832ceec91d5a939806f97
4
+ data.tar.gz: 28c09fcdf4d7abc16f367b8c6aaebfd3f3baaa68850ae5809aefb33d92bae8fa
5
5
  SHA512:
6
- metadata.gz: d9d3de22aee4d8d8f106c26fa2eec1148c5f5535d9b2fc34f33c26cb9ef67fa193eddf833865a041479fd4a67bb8be59fb06bb17f79117416575612c37301299
7
- data.tar.gz: 73f0a9e7b14e74a9d685ff1039cf1650bf76f9b47ee863acf71a90dd81449684183c35797889c6682e95239c4f9f9bfd57de4050aef60d6a6521fd0a8a274189
6
+ metadata.gz: 6fd730f1c2500942f680f66c4f526b138e71fd6f27a194b85fc280f9f1d959d6ecf79e88cb4aa685d451373cc9c3ac80714751a7d3658ec75c00f874925a8a39
7
+ data.tar.gz: 4327534a89cbaae5d76a86bb36aeb220668fd41805837923188e4ae1bfe2e3968d416b4c26338c6b80cc911552bb3f41db2ac0feef4a0bf70470820d1f780136
@@ -1,3 +1,10 @@
1
+ <a name="v2.68.1"></a>
2
+ ### v2.68.1 (2020-10-24)
3
+
4
+ #### Bug Fixes
5
+
6
+ * set default User-Agent header in webhook requests ([caa71f9b](/../../commit/caa71f9b))
7
+
1
8
  <a name="v2.68.0"></a>
2
9
  ### v2.68.0 (2020-10-23)
3
10
 
@@ -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.delete("user-agent")
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
@@ -1,3 +1,3 @@
1
1
  module PactBroker
2
- VERSION = '2.68.0'
2
+ VERSION = '2.68.1'
3
3
  end
@@ -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.0
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-23 00:00:00.000000000 Z
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