pact_broker 2.68.0 → 2.68.1

Sign up to get free protection for your applications and to get access to all the features.
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