pact_broker 2.85.1 → 2.86.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release_gem.yml +1 -1
  3. data/.github/workflows/trigger_pact_docs_update.yml +22 -0
  4. data/CHANGELOG.md +10 -0
  5. data/DEVELOPER_DOCUMENTATION.md +0 -2
  6. data/db/migrations/20210914_add_labels_to_webhooks.rb +14 -0
  7. data/db/migrations/20210915_add_verified_by_to_verification.rb +6 -0
  8. data/docker-compose-ci-mysql.yml +1 -0
  9. data/docs/CONFIGURATION.md +255 -66
  10. data/docs/configuration.yml +166 -101
  11. data/lib/db.rb +0 -1
  12. data/lib/pact_broker/api/contracts/webhook_contract.rb +24 -2
  13. data/lib/pact_broker/api/decorators/verification_decorator.rb +4 -0
  14. data/lib/pact_broker/api/decorators/webhook_decorator.rb +27 -4
  15. data/lib/pact_broker/api/pact_broker_urls.rb +4 -0
  16. data/lib/pact_broker/api/resources/all_webhooks.rb +2 -2
  17. data/lib/pact_broker/config/runtime_configuration.rb +4 -0
  18. data/lib/pact_broker/config/runtime_configuration_database_methods.rb +1 -1
  19. data/lib/pact_broker/db/clean.rb +1 -2
  20. data/lib/pact_broker/doc/views/pacticipant/label.markdown +12 -0
  21. data/lib/pact_broker/doc/views/webhooks.markdown +17 -0
  22. data/lib/pact_broker/domain/pacticipant.rb +4 -0
  23. data/lib/pact_broker/domain/verification.rb +16 -4
  24. data/lib/pact_broker/domain/webhook.rb +5 -5
  25. data/lib/pact_broker/domain/webhook_pacticipant.rb +6 -0
  26. data/lib/pact_broker/locale/en.yml +1 -0
  27. data/lib/pact_broker/matrix/head_row.rb +1 -1
  28. data/lib/pact_broker/matrix/quick_row.rb +0 -1
  29. data/lib/pact_broker/matrix/repository.rb +0 -1
  30. data/lib/pact_broker/matrix/row.rb +2 -2
  31. data/lib/pact_broker/pacts/latest_pact_publication_id_for_consumer_version.rb +0 -1
  32. data/lib/pact_broker/pacts/pact_publication.rb +7 -0
  33. data/lib/pact_broker/pacts/pact_publication_clean_selector_dataset_module.rb +19 -0
  34. data/lib/pact_broker/pacts/pact_publication_dataset_module.rb +30 -2
  35. data/lib/pact_broker/pacts/pact_version.rb +24 -1
  36. data/lib/pact_broker/pacts/pacts_for_verification_repository.rb +2 -2
  37. data/lib/pact_broker/pacts/repository.rb +50 -47
  38. data/lib/pact_broker/test/http_test_data_builder.rb +37 -10
  39. data/lib/pact_broker/test/test_data_builder.rb +22 -5
  40. data/lib/pact_broker/verifications/repository.rb +5 -2
  41. data/lib/pact_broker/verifications/service.rb +4 -1
  42. data/lib/pact_broker/version.rb +1 -1
  43. data/lib/pact_broker/webhooks/event_listener.rb +4 -2
  44. data/lib/pact_broker/webhooks/pact_and_verification_parameters.rb +1 -0
  45. data/lib/pact_broker/webhooks/repository.rb +10 -4
  46. data/lib/pact_broker/webhooks/webhook.rb +66 -8
  47. data/script/data/verify-pact-for-multiple-selectors.rb +30 -0
  48. data/script/docs/generate-configuration-docs.rb +24 -3
  49. data/script/generate-erd +55 -0
  50. data/spec/features/create_webhook_spec.rb +55 -10
  51. data/spec/features/get_pact_spec.rb +2 -3
  52. data/spec/fixtures/verification.json +4 -0
  53. data/spec/integration/webhooks/pact_publication_spec.rb +51 -0
  54. data/spec/lib/pact_broker/api/contracts/webhook_contract_spec.rb +50 -0
  55. data/spec/lib/pact_broker/api/decorators/verification_decorator_spec.rb +8 -1
  56. data/spec/lib/pact_broker/api/decorators/verification_summary_decorator_spec.rb +3 -1
  57. data/spec/lib/pact_broker/api/decorators/webhook_decorator_spec.rb +4 -4
  58. data/spec/lib/pact_broker/config/runtime_configuration_documentation_spec.rb +30 -0
  59. data/spec/lib/pact_broker/deployments/environment_service_spec.rb +1 -1
  60. data/spec/lib/pact_broker/matrix/head_row_spec.rb +9 -5
  61. data/spec/lib/pact_broker/pacts/{latest_tagged_pact_publications_spec.rb → pact_publication_clean_selector_dataset_module_spec.rb} +7 -9
  62. data/spec/lib/pact_broker/pacts/pact_version_spec.rb +32 -0
  63. data/spec/lib/pact_broker/pacts/repository_spec.rb +33 -0
  64. data/spec/lib/pact_broker/verifications/service_spec.rb +16 -2
  65. data/spec/lib/pact_broker/webhooks/repository_spec.rb +158 -15
  66. data/spec/lib/pact_broker/webhooks/webhook_spec.rb +8 -5
  67. metadata +16 -11
  68. data/lib/pact_broker/pacts/all_pact_publications.rb +0 -158
  69. data/lib/pact_broker/pacts/latest_pact_publications.rb +0 -48
  70. data/lib/pact_broker/pacts/latest_pact_publications_by_consumer_version.rb +0 -26
  71. data/lib/pact_broker/pacts/latest_tagged_pact_publications.rb +0 -45
  72. data/lib/pact_broker/verifications/latest_verification_for_pact_version.rb +0 -39
  73. data/spec/lib/pact_broker/verifications/latest_verification_for_pact_version_spec.rb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 274321ebbf970f7e282a64933d9d89522323c82d48b40b29b7c3921dec918e81
4
- data.tar.gz: 89e6686d83aa69c88292675c4530adfbd48eff00b2c0f59ed901a13cbd14db2c
3
+ metadata.gz: 349e4547b3d6dbd536df4c39648a8ab89975580509e895d98283535b4406cf06
4
+ data.tar.gz: '096c7874fd1497771def8096b581bd68e675a0339ed43dfbc340e21f455a73f6'
5
5
  SHA512:
6
- metadata.gz: 1cb98e0a974f7c440d803a47cd947579351573eeaa232e7768d012dc3b74ed9255e1520e585c56cf25eb856c43ba593cb9bceb890afb21bc61431c15ca193224
7
- data.tar.gz: 893d6548ae9080919eeee2fbaee934c422da2a070b1f1ce32bb494a311a5d6f72db5b89652a683af23a1ddc14af09e1859bec47ebe3492644d612a656c171586
6
+ metadata.gz: f1e9248d5f73dc92fc48ddc0ba33f735533dda17276398bbddf38b9437808fc7dc4ecb8fa16ed55532b88b72101883490778447eafd6996c4af8e1e2b1684ec0
7
+ data.tar.gz: 750b601c780b37d3df11570e468348e58accaed804d9a34904200c24895be014c4a898d07d714aeb8c0828620db230317b4e41f844c77448c80f065b348053e5
@@ -35,7 +35,7 @@ jobs:
35
35
  needs: release
36
36
  strategy:
37
37
  matrix:
38
- repository: [pact-foundation/pact-broker-docker, DiUS/pact_broker-docker]
38
+ repository: [pact-foundation/pact-broker-docker, DiUS/pact_broker-docker, pact-foundation/gem-released]
39
39
  runs-on: ubuntu-latest
40
40
  steps:
41
41
  - name: Notify ${{ matrix.repository }} of gem release
@@ -0,0 +1,22 @@
1
+ name: Trigger update to docs.pact.io
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ paths:
8
+ - '**/*.md'
9
+ repository_dispatch:
10
+ types:
11
+ - gem-released
12
+
13
+ jobs:
14
+ build:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - name: Trigger docs.pact.io update workflow
18
+ uses: peter-evans/repository-dispatch@v1
19
+ with:
20
+ token: ${{ secrets.GHTOKENFORTRIGGERINGPACTDOCSUPDATE }}
21
+ repository: pact-foundation/docs.pact.io
22
+ event-type: pact-broker-docs-updated
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ <a name="v2.86.0"></a>
2
+ ### v2.86.0 (2021-09-17)
3
+
4
+ #### Features
5
+
6
+ * allow webhooks to match pacticipants by label (#501) ([f30a9dcc](/../../commit/f30a9dcc))
7
+ * in the webhook body for contract_published and contract_content_changed, use the latest verification from the main branch if present ([b45398bd](/../../commit/b45398bd))
8
+ * change default database_connection_validation_timeout from -1 (every request) to nil (which Sequel will set to 3600 seconds) ([0c508572](/../../commit/0c508572))
9
+ * add version details of the implementation that verified a Pact (#363) ([021a8692](/../../commit/021a8692))
10
+
1
11
  <a name="v2.85.1"></a>
2
12
  ### v2.85.1 (2021-09-14)
3
13
 
@@ -85,8 +85,6 @@ pact publication resource will be created with an incremented revision number, b
85
85
 
86
86
  * `latest_pact_publications_by_consumer_versions` - This view has the same columns as `all_pact_publications`, but it only contains the latest revision of the pact for each provider/consumer/version. It maps to what a user would consider the "pact" resource ie. `/pacts/provider/PROVIDER/consumer/CONSUMER/version/VERSION`. Previous revisions are not currently exposed via the API.
87
87
 
88
- The `AllPactPublications` Sequel model in the code is what is used when querying data for displaying in a response, rather than the normalised separate PactPublication and PactVersion models.
89
-
90
88
  * `latest_pact_publications` - This view has the same columns as `all_pact_publications`, but it only contains the latest revision of the pact for the latest consumer version for each consumer/provider pair. It is what a user would consider the "latest pact", and maps to the resource at `/pacts/provider/PROVIDER/consumer/CONSUMER/latest`
91
89
 
92
90
  * `latest_tagged_pact_publications` - This view has the same columns as `all_pact_publications`, plus a `tag_name` column. It is used to return the pact for the latest tagged version of a consumer.
@@ -0,0 +1,14 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:webhooks) do
4
+ add_column(:consumer_label, String)
5
+ add_column(:provider_label, String)
6
+ end
7
+
8
+ # SQLite workaround - with one `alter_table` block it adds only last constraint.
9
+ alter_table(:webhooks) do
10
+ add_constraint(:consumer_label_exclusion, "consumer_id IS NULL OR (consumer_id IS NOT NULL AND consumer_label IS NULL)")
11
+ add_constraint(:provider_label_exclusion, "provider_id IS NULL OR (provider_id IS NOT NULL AND provider_label IS NULL)")
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,6 @@
1
+ Sequel.migration do
2
+ change do
3
+ add_column(:verifications, :verified_by_implementation, String)
4
+ add_column(:verifications, :verified_by_version, String)
5
+ end
6
+ end
@@ -33,5 +33,6 @@ services:
33
33
  - ./.gitignore:/home/.gitignore
34
34
  - ./public:/home/public
35
35
  - ./script/docker-container/test.sh:/usr/local/bin/test
36
+ - ./docs:/home/docs
36
37
  entrypoint: dockerize
37
38
  command: --wait tcp://mysql:3306 -timeout 60s test
@@ -1,6 +1,68 @@
1
1
  # Pact Broker Configuration
2
2
 
3
3
 
4
+ <!-- This is a generated file. Please do not edit it directly. -->
5
+
6
+ The Pact Broker supports configuration via environment variables or a YAML file.
7
+
8
+ To configure the application using a YAML file, place it in the location `config/pact_broker.yml`,
9
+ relative to the working directory of the application, or set the environment
10
+ variable `PACT_BROKER_CONF` to the full path to the configuration file.
11
+ <br/>
12
+
13
+ ## Logging
14
+
15
+ <hr/>
16
+
17
+
18
+ ### log_level
19
+
20
+ The application log level
21
+
22
+ **YAML configuration key name:** `log_level`<br/>
23
+ **Environment variable name:** `PACT_BROKER_LOG_LEVEL`<br/>
24
+ **Default:** `info`<br/>
25
+ **Allowed values:** `debug`, `info`, `warn`, `error`, `fatal`<br/>
26
+
27
+ ### log_format
28
+
29
+ The application log format. Can be any value supported by Semantic Logger.
30
+
31
+ **YAML configuration key name:** `log_format`<br/>
32
+ **Environment variable name:** `PACT_BROKER_LOG_FORMAT`<br/>
33
+ **Default:** `default`<br/>
34
+ **Allowed values:** `default`, `json`, `color`<br/>
35
+ **More information:** https://github.com/rocketjob/semantic_logger/tree/master/lib/semantic_logger/formatters<br/>
36
+
37
+ ### log_dir
38
+
39
+ The log file directory
40
+
41
+ **YAML configuration key name:** `log_dir`<br/>
42
+ **Environment variable name:** `PACT_BROKER_LOG_DIR`<br/>
43
+ **Default:** `./logs`<br/>
44
+
45
+ ### log_stream
46
+
47
+ The stream to which the logs will be sent.
48
+
49
+ While the default is `file` for the Ruby application, it is set to `stdout` on the supported Docker images.
50
+
51
+ **YAML configuration key name:** `log_stream`<br/>
52
+ **Environment variable name:** `PACT_BROKER_LOG_STREAM`<br/>
53
+ **Default:** `file`<br/>
54
+ **Allowed values:** `stdout`, `file`<br/>
55
+
56
+ ### hide_pactflow_messages
57
+
58
+ Set to `true` to hide the messages in the logs about Pactflow
59
+
60
+ **YAML configuration key name:** `hide_pactflow_messages`<br/>
61
+ **Environment variable name:** `PACT_BROKER_HIDE_PACTFLOW_MESSAGES`<br/>
62
+ **Default:** `true`<br/>
63
+ **Allowed values:** `true`, `false`<br/>
64
+ **More information:** https://pactflow.io<br/>
65
+
4
66
  <br/>
5
67
 
6
68
  ## Database
@@ -15,6 +77,8 @@ The database adapter. For production use, Postgres must be used.
15
77
  For investigations/spikes on a development machine, you can use SQlite. It is not supported as a production database, as it does not support
16
78
  concurrent requests.
17
79
 
80
+ **YAML configuration key name:** `database_adapter`<br/>
81
+ **Environment variable name:** `PACT_BROKER_DATABASE_ADAPTER`<br/>
18
82
  **Default:** `postgres`<br/>
19
83
  **Allowed values:** `postgres` (for production use), `sqlite` (for spikes only)<br/>
20
84
 
@@ -22,39 +86,53 @@ concurrent requests.
22
86
 
23
87
  The database username
24
88
 
89
+ **YAML configuration key name:** `database_username`<br/>
90
+ **Environment variable name:** `PACT_BROKER_DATABASE_USERNAME`<br/>
25
91
 
26
92
  ### database_password
27
93
 
28
94
  The database password
29
95
 
96
+ **YAML configuration key name:** `database_password`<br/>
97
+ **Environment variable name:** `PACT_BROKER_DATABASE_PASSWORD`<br/>
30
98
 
31
99
  ### database_name
32
100
 
33
101
  The database name. If using the `sqlite` adapter, this will be the path to the database file.
34
102
 
103
+ **YAML configuration key name:** `database_name`<br/>
104
+ **Environment variable name:** `PACT_BROKER_DATABASE_NAME`<br/>
35
105
  **Examples:** `pact_broker`, `/tmp/pact_broker.sqlite3`, `./tmp/pact_broker.sqlite3`<br/>
36
106
 
37
107
  ### database_host
38
108
 
39
109
  The database host
40
110
 
111
+ **YAML configuration key name:** `database_host`<br/>
112
+ **Environment variable name:** `PACT_BROKER_DATABASE_HOST`<br/>
41
113
 
42
114
  ### database_port
43
115
 
44
116
  The database port. If ommited, the default port for the adapter will be used.
45
117
 
118
+ **YAML configuration key name:** `database_port`<br/>
119
+ **Environment variable name:** `PACT_BROKER_DATABASE_PORT`<br/>
46
120
 
47
121
  ### database_url
48
122
 
49
123
  The full database URL may be specified instead of the separate adapter, username, password, name, host and port.
50
124
 
51
- **Format:** {database_adapter}://{database_username}:{database_password}@{database_host}:{database_port}/{database_name}<br/>
52
- **Examples:** `postgres://pact_broker_user:pact_broker_password@pact_broker_db_host/pact_broker`, `sqlite:////tmp/pact_broker.sqlite3`<br/>
125
+ **YAML configuration key name:** `database_url`<br/>
126
+ **Environment variable name:** `PACT_BROKER_DATABASE_URL`<br/>
127
+ **Format:** `{database_adapter}://{database_username}:{database_password}@{database_host}:{database_port}/{database_name}`<br/>
128
+ **Examples:** `postgres://pact_broker_user:pact_broker_password@pact_broker_db_host/pact_broker`, `sqlite:///tmp/pact_broker.sqlite3` (relative path to working directory), `sqlite:////tmp/pact_broker.sqlite3` (absolute path)<br/>
53
129
 
54
130
  ### database_sslmode
55
131
 
56
132
  The Postgresql ssl mode.
57
133
 
134
+ **YAML configuration key name:** `database_sslmode`<br/>
135
+ **Environment variable name:** `PACT_BROKER_DATABASE_SSLMODE`<br/>
58
136
  **Default:** `prefer`<br/>
59
137
  **Allowed values:** `disable`, `allow`, `prefer`, `require`, `verify-ca`, `verify-full`<br/>
60
138
  **More information:** https://ankane.org/postgres-sslmode-explained<br/>
@@ -65,118 +143,116 @@ The log level that will be used when the SQL query statements are logged.
65
143
 
66
144
  To disable noisy SQL query logging when the application `log_level` is set to `debug` for other reasons, use the value `none`.
67
145
 
146
+ **YAML configuration key name:** `sql_log_level`<br/>
147
+ **Environment variable name:** `PACT_BROKER_SQL_LOG_LEVEL`<br/>
68
148
  **Default:** `debug`<br/>
69
149
  **Allowed values:** `none`, `debug`, `info`, `warn`, `error`, `fatal`<br/>
70
150
 
71
151
  ### sql_log_warn_duration
72
152
 
153
+ The number of seconds after which to log an SQL query at warn level. Use this for detecting slow queries.
73
154
 
74
-
155
+ **YAML configuration key name:** `sql_log_warn_duration`<br/>
156
+ **Environment variable name:** `PACT_BROKER_SQL_LOG_WARN_DURATION`<br/>
75
157
  **Default:** `5`<br/>
158
+ **Allowed values:** A positive integer or float, as a string.<br/>
159
+ **More information:** https://sequel.jeremyevans.net/rdoc/files/doc/opening_databases_rdoc.html#label-General+connection+options<br/>
76
160
 
77
161
  ### database_max_connections
78
162
 
163
+ The maximum size of the connection pool (4 connections by default on most databases)
79
164
 
80
-
81
- **Default:** `nil`<br/>
165
+ **YAML configuration key name:** `database_max_connections`<br/>
166
+ **Environment variable name:** `PACT_BROKER_DATABASE_MAX_CONNECTIONS`<br/>
167
+ **Default:** `4`<br/>
168
+ **Allowed values:** A positive integer value.<br/>
169
+ **More information:** https://sequel.jeremyevans.net/rdoc/files/doc/opening_databases_rdoc.html#label-General+connection+options<br/>
82
170
 
83
171
  ### database_pool_timeout
84
172
 
173
+ The number of seconds to wait if a connection cannot be acquired before raising an error
85
174
 
86
-
175
+ **YAML configuration key name:** `database_pool_timeout`<br/>
176
+ **Environment variable name:** `PACT_BROKER_DATABASE_POOL_TIMEOUT`<br/>
87
177
  **Default:** `5`<br/>
178
+ **Allowed values:** A positive integer.<br/>
179
+ **More information:** https://sequel.jeremyevans.net/rdoc/files/doc/opening_databases_rdoc.html#label-General+connection+options<br/>
88
180
 
89
181
  ### database_connect_max_retries
90
182
 
183
+ When running the Pact Broker Docker image experimentally using Docker Compose on a local development machine,
184
+ the Broker application process may be ready before the database is available for connection, causing the application
185
+ container to exit with an error. Setting the max retries to a non-zero number will allow it to retry the connection the
186
+ configured number of times, waiting 3 seconds between attempts.
91
187
 
92
-
188
+ **YAML configuration key name:** `database_connect_max_retries`<br/>
189
+ **Environment variable name:** `PACT_BROKER_DATABASE_CONNECT_MAX_RETRIES`<br/>
93
190
  **Default:** `0`<br/>
191
+ **Allowed values:** A positive integer value.<br/>
94
192
 
95
193
  ### auto_migrate_db
96
194
 
195
+ Whether or not to run the database schema migrations on start up. It is recommended to set this to `true`.
97
196
 
98
-
197
+ **YAML configuration key name:** `auto_migrate_db`<br/>
198
+ **Environment variable name:** `PACT_BROKER_AUTO_MIGRATE_DB`<br/>
99
199
  **Default:** `true`<br/>
200
+ **Allowed values:** `true`, `false`<br/>
100
201
 
101
202
  ### auto_migrate_db_data
102
203
 
204
+ Whether or not to run the database data migrations on start up. It is recommended to set this to `true`.
103
205
 
104
-
206
+ **YAML configuration key name:** `auto_migrate_db_data`<br/>
207
+ **Environment variable name:** `PACT_BROKER_AUTO_MIGRATE_DB_DATA`<br/>
105
208
  **Default:** `true`<br/>
209
+ **Allowed values:** `true`, `false`<br/>
106
210
 
107
211
  ### allow_missing_migration_files
108
212
 
213
+ If `true`, will not raise an error if a database migration is recorded in the database that does not have an
214
+ equivalent file in the codebase. If this is true, an older version of the code may be used with a newer version of the database,
215
+ however, data integrity issues may occur.
109
216
 
110
-
111
- **Default:** `true`<br/>
112
-
113
- ### validate_database_connection_config
114
-
115
-
116
-
217
+ **YAML configuration key name:** `allow_missing_migration_files`<br/>
218
+ **Environment variable name:** `PACT_BROKER_ALLOW_MISSING_MIGRATION_FILES`<br/>
117
219
  **Default:** `true`<br/>
220
+ **More information:** https://sequel.jeremyevans.net/rdoc/classes/Sequel/Migrator.html<br/>
118
221
 
119
222
  ### database_statement_timeout
120
223
 
224
+ The number of seconds after which an SQL query will be aborted. Only supported for Postgresql connections.
121
225
 
122
-
226
+ **YAML configuration key name:** `database_statement_timeout`<br/>
227
+ **Environment variable name:** `PACT_BROKER_DATABASE_STATEMENT_TIMEOUT`<br/>
123
228
  **Default:** `15`<br/>
229
+ **Allowed values:** A positive integer or float.<br/>
230
+ **More information:** https://www.postgresql.org/docs/9.3/runtime-config-client.html<br/>
124
231
 
125
232
  ### metrics_sql_statement_timeout
126
233
 
234
+ The number of seconds after which the SQL queries used for the metrics endpoint will be aborted.
235
+ This is configurable separately from the standard `database_statement_timeout` as it may need to be significantly
236
+ longer than the desired value for standard queries.
127
237
 
128
-
238
+ **YAML configuration key name:** `metrics_sql_statement_timeout`<br/>
239
+ **Environment variable name:** `PACT_BROKER_METRICS_SQL_STATEMENT_TIMEOUT`<br/>
129
240
  **Default:** `30`<br/>
241
+ **Allowed values:** A positive integer.<br/>
130
242
 
131
243
  ### database_connection_validation_timeout
132
244
 
245
+ The number of seconds after which to check the health of a connection from a connection pool before passing it to the application.
133
246
 
247
+ `-1` means that connections will be validated every time, which avoids errors
248
+ when databases are restarted and connections are killed. This has a performance
249
+ penalty, so consider increasing this timeout if building a frequently accessed service.
134
250
 
135
-
136
- <br/>
137
-
138
- ## Logging
139
-
140
- <hr/>
141
-
142
-
143
- ### log_level
144
-
145
- The application log level
146
-
147
- **Default:** `info`<br/>
148
- **Allowed values:** `debug`, `info`, `warn`, `error`, `fatal`<br/>
149
-
150
- ### log_format
151
-
152
- The application log format. Can be any value supported by Semantic Logger.
153
-
154
- **Default:** `default`<br/>
155
- **Allowed values:** `default`, `json`, `color`<br/>
156
- **More information:** https://github.com/rocketjob/semantic_logger/tree/master/lib/semantic_logger/formatters<br/>
157
-
158
- ### log_dir
159
-
160
- The log file directory
161
-
162
- **Default:** `./logs`<br/>
163
-
164
- ### log_stream
165
-
166
- The stream to which the logs will be sent.
167
-
168
- While the default is `file` for the Ruby application, it is set to `stdout` on the supported Docker images.
169
-
170
- **Default:** `file`<br/>
171
- **Allowed values:** `stdout`, `file`<br/>
172
-
173
- ### hide_pactflow_messages
174
-
175
- Set to `true` to hide the messages in the logs about Pactflow
176
-
177
- **Default:** `true`<br/>
178
- **Allowed values:** `true`, `false`<br/>
179
- **More information:** https://pactflow.io<br/>
251
+ **YAML configuration key name:** `database_connection_validation_timeout`<br/>
252
+ **Environment variable name:** `PACT_BROKER_DATABASE_CONNECTION_VALIDATION_TIMEOUT`<br/>
253
+ **Default:** -1 for v2.85.1 and earlier, 3600 for later versions.<br/>
254
+ **Allowed values:** -1 or any positive integer.<br/>
255
+ **More information:** https://sequel.jeremyevans.net/rdoc-plugins/files/lib/sequel/extensions/connection_validator_rb.html<br/>
180
256
 
181
257
  <br/>
182
258
 
@@ -190,8 +266,10 @@ should be used for CI/CD.
190
266
 
191
267
  ### basic_auth_enabled
192
268
 
193
- Whether to enable basic authorization
269
+ Whether to enable basic authorization. This is automatically set to true for the Docker images if the `basic_auth_username` and `basic_auth_password` are set.
194
270
 
271
+ **YAML configuration key name:** `basic_auth_enabled`<br/>
272
+ **Environment variable name:** `PACT_BROKER_BASIC_AUTH_ENABLED`<br/>
195
273
  **Default:** `false`<br/>
196
274
  **Allowed values:** `true`, `false`<br/>
197
275
 
@@ -199,26 +277,36 @@ Whether to enable basic authorization
199
277
 
200
278
  The username for the read/write basic auth user.
201
279
 
280
+ **YAML configuration key name:** `basic_auth_username`<br/>
281
+ **Environment variable name:** `PACT_BROKER_BASIC_AUTH_USERNAME`<br/>
202
282
 
203
283
  ### basic_auth_password
204
284
 
205
285
  The password for the read/write basic auth user.
206
286
 
287
+ **YAML configuration key name:** `basic_auth_password`<br/>
288
+ **Environment variable name:** `PACT_BROKER_BASIC_AUTH_PASSWORD`<br/>
207
289
 
208
290
  ### basic_auth_read_only_username
209
291
 
210
292
  The username for the read only basic auth user.
211
293
 
294
+ **YAML configuration key name:** `basic_auth_read_only_username`<br/>
295
+ **Environment variable name:** `PACT_BROKER_BASIC_AUTH_READ_ONLY_USERNAME`<br/>
212
296
 
213
297
  ### basic_auth_read_only_password
214
298
 
215
299
  The password for the read only basic auth user.
216
300
 
301
+ **YAML configuration key name:** `basic_auth_read_only_password`<br/>
302
+ **Environment variable name:** `PACT_BROKER_BASIC_AUTH_READ_ONLY_PASSWORD`<br/>
217
303
 
218
304
  ### allow_public_read
219
305
 
220
306
  If you want to allow public read access, but still require credentials for writing, then leave `basic_auth_read_only_username` and `basic_auth_read_only_password` unset, and set `allow_public_read` to `true`.
221
307
 
308
+ **YAML configuration key name:** `allow_public_read`<br/>
309
+ **Environment variable name:** `PACT_BROKER_ALLOW_PUBLIC_READ`<br/>
222
310
  **Default:** `false`<br/>
223
311
  **Allowed values:** `true`, `false`<br/>
224
312
 
@@ -226,6 +314,8 @@ If you want to allow public read access, but still require credentials for writi
226
314
 
227
315
  If you have enabled basic auth, but require unauthenticated access to the heartbeat URL (eg. for use within an AWS autoscaling group), set `public_heartbeat` to `true`.
228
316
 
317
+ **YAML configuration key name:** `public_heartbeat`<br/>
318
+ **Environment variable name:** `PACT_BROKER_PUBLIC_HEARTBEAT`<br/>
229
319
  **Default:** `false`<br/>
230
320
  **Allowed values:** `true`, `false`<br/>
231
321
 
@@ -233,6 +323,8 @@ If you have enabled basic auth, but require unauthenticated access to the heartb
233
323
 
234
324
  Set this to true to allow status badges to be embedded in README files without requiring a hardcoded password.
235
325
 
326
+ **YAML configuration key name:** `enable_public_badge_access`<br/>
327
+ **Environment variable name:** `PACT_BROKER_ENABLE_PUBLIC_BADGE_ACCESS`<br/>
236
328
  **Default:** `false`<br/>
237
329
  **Allowed values:** `true`, `false`<br/>
238
330
 
@@ -248,6 +340,8 @@ Set this to true to allow status badges to be embedded in README files without r
248
340
  The schedule of seconds to wait between webhook execution attempts.
249
341
  The default schedule is 10 sec, 1 min, 2 min, 5 min, 10 min, 20 min (38 minutes in total).
250
342
 
343
+ **YAML configuration key name:** `webhook_retry_schedule`<br/>
344
+ **Environment variable name:** `PACT_BROKER_WEBHOOK_RETRY_SCHEDULE`<br/>
251
345
  **Format:** A space separated list of integers.<br/>
252
346
  **Default:** `10 60 120 300 600 1200`<br/>
253
347
 
@@ -256,6 +350,8 @@ The default schedule is 10 sec, 1 min, 2 min, 5 min, 10 min, 20 min (38 minutes
256
350
  The allowed HTTP methods for webhooks.
257
351
  It is highly recommended that only `POST` requests are allowed to ensure that webhooks cannot be used to retrieve sensitive information from hosts within the same network.
258
352
 
353
+ **YAML configuration key name:** `webhook_http_method_whitelist`<br/>
354
+ **Environment variable name:** `PACT_BROKER_WEBHOOK_HTTP_METHOD_WHITELIST`<br/>
259
355
  **Format:** A space separated list.<br/>
260
356
  **Default:** `POST`<br/>
261
357
  **Allowed values:** `POST`, `GET` (not recommended), `PUT` (not recommended), `PATCH` (not recommended), `DELETE` (not recommended)<br/>
@@ -268,6 +364,8 @@ considered a success, otherwise the webhook will be re-triggered based on the `w
268
364
  In most cases, configuring this is not necessary, but there are some CI systems that return a non 200 status for a success,
269
365
  which is why this feature exists.
270
366
 
367
+ **YAML configuration key name:** `webhook_http_code_success`<br/>
368
+ **Environment variable name:** `PACT_BROKER_WEBHOOK_HTTP_CODE_SUCCESS`<br/>
271
369
  **Format:** A space separated list of integers.<br/>
272
370
  **Default:** `200 201 202 203 204 205 206`<br/>
273
371
  **Allowed values:** `Any valid HTTP status code`<br/>
@@ -276,6 +374,8 @@ which is why this feature exists.
276
374
 
277
375
  The allowed URL schemes for webhooks.
278
376
 
377
+ **YAML configuration key name:** `webhook_scheme_whitelist`<br/>
378
+ **Environment variable name:** `PACT_BROKER_WEBHOOK_SCHEME_WHITELIST`<br/>
279
379
  **Format:** A space delimited list.<br/>
280
380
  **Default:** `https`<br/>
281
381
  **Allowed values:** `https`, `http`<br/>
@@ -285,8 +385,10 @@ The allowed URL schemes for webhooks.
285
385
  A list of hosts, network ranges, or host regular expressions.
286
386
  Regular expressions should start and end with a `/` to differentiate them from Strings.
287
387
  Note that backslashes need to be escaped with a second backslash when setting via an environment variable.
288
- Please read the Webhook whitelists section of the Pact Broker configuration documentation to understand how the whitelist is used.
388
+ Please read the [Webhook whitelists section](https://docs.pact.io/pact_broker/configuration/features#webhooks) of the Pact Broker configuration documentation to understand how the whitelist is used.
289
389
 
390
+ **YAML configuration key name:** `webhook_host_whitelist`<br/>
391
+ **Environment variable name:** `PACT_BROKER_WEBHOOK_HOST_WHITELIST`<br/>
290
392
  **Examples:** `github.com`, `10.2.3.41/24`, `/.*\\.foo\\.com$/`<br/>
291
393
  **More information:** https://docs.pact.io/pact_broker/configuration/#webhook-whitelists<br/>
292
394
 
@@ -294,12 +396,22 @@ Please read the Webhook whitelists section of the Pact Broker configuration docu
294
396
 
295
397
  If set to true, SSL verification will be disabled for the HTTP requests made by the webhooks
296
398
 
399
+ **YAML configuration key name:** `disable_ssl_verification`<br/>
400
+ **Environment variable name:** `PACT_BROKER_DISABLE_SSL_VERIFICATION`<br/>
297
401
  **Default:** `false`<br/>
298
402
  **Allowed values:** `true`, `false`<br/>
299
403
 
404
+ ### user_agent
405
+
406
+ The user agent to set when making HTTP requests for webhooks.
407
+
408
+ **YAML configuration key name:** `user_agent`<br/>
409
+ **Environment variable name:** `PACT_BROKER_USER_AGENT`<br/>
410
+ **Default:** `Pact Broker v{VERSION}`<br/>
411
+
300
412
  <br/>
301
413
 
302
- ## HTTP
414
+ ## Resources
303
415
 
304
416
  <hr/>
305
417
 
@@ -310,6 +422,8 @@ The HTTP port that the Pact Broker application will run on. This will only be ho
310
422
  a package that actually reads this property (eg. one of the supported Docker images). If you are running the vanilla Ruby application,
311
423
  the application will run on the port the server has been configured to run on (eg. `bundle exec rackup -p 9393`)
312
424
 
425
+ **YAML configuration key name:** `port`<br/>
426
+ **Environment variable name:** `PACT_BROKER_PORT`<br/>
313
427
  **Default:** `9292`<br/>
314
428
 
315
429
  ### base_url
@@ -321,6 +435,8 @@ deploying the Pact Broker to production as it prevents cache poisoning security
321
435
  It is also required when deploying the Broker behind a reverse proxy, and when the application has been mounted at a non-root context.
322
436
  Note that this attribute does not change where the application is actually mounted (that is the concern of the deployment configuration) - it just changes the links.
323
437
 
438
+ **YAML configuration key name:** `base_url`<br/>
439
+ **Environment variable name:** `PACT_BROKER_BASE_URL`<br/>
324
440
  **Examples:** `https://pact-broker.mycompany.com`, `https://my-company.com:9292/pact-broker`<br/>
325
441
 
326
442
  ### base_urls
@@ -328,6 +444,8 @@ Note that this attribute does not change where the application is actually mount
328
444
  An alias of base_url. From version 2.79.0, multiple base URLs can be configured for architectures that use
329
445
  gateways or proxies that allow the same Pact Broker instance to be addressed with different base URLs.
330
446
 
447
+ **YAML configuration key name:** `base_urls`<br/>
448
+ **Environment variable name:** `PACT_BROKER_BASE_URLS`<br/>
331
449
  **Format:** A space separated list.<br/>
332
450
  **Example:** `http://my-internal-pact-broker:9292 https://my-external-pact-broker`<br/>
333
451
 
@@ -335,9 +453,34 @@ gateways or proxies that allow the same Pact Broker instance to be addressed wit
335
453
 
336
454
  The URL of the shields.io server used to generate the README badges.
337
455
 
456
+ **YAML configuration key name:** `shields_io_base_url`<br/>
457
+ **Environment variable name:** `PACT_BROKER_SHIELDS_IO_BASE_URL`<br/>
338
458
  **Default:** `https://img.shields.io`<br/>
339
459
  **More information:** https://shields.io<br/>
340
460
 
461
+ ### badge_provider_mode
462
+
463
+ The method by which the badges are generated. When set to `redirect`, a request to the Pact Broker for a badge will be sent a redirect response
464
+ to render the badge from the shields.io server directly in the browser. This is the recommended value.
465
+ When set to `proxy`, the Pact Broker will make a request directly to the configured shields.io server, and then send the returned file
466
+ back to the browser. This mode is not recommended for security and performance reasons.
467
+
468
+ **YAML configuration key name:** `badge_provider_mode`<br/>
469
+ **Environment variable name:** `PACT_BROKER_BADGE_PROVIDER_MODE`<br/>
470
+ **Default:** `redirect`<br/>
471
+ **Allowed values:** `redirect`, `proxy`<br/>
472
+
473
+ ### enable_diagnostic_endpoints
474
+
475
+ Whether or not to enable the diagnostic endpoints at `/diagnostic/status/heartbeat` and `"diagnostic/status/dependencies`.
476
+ The heartbeat endpoint is for use by load balancers, and the dependencies endpoint is for checking that the database
477
+ is available (do not use this for load balancing, as it makes a database connection).
478
+
479
+ **YAML configuration key name:** `enable_diagnostic_endpoints`<br/>
480
+ **Environment variable name:** `PACT_BROKER_ENABLE_DIAGNOSTIC_ENDPOINTS`<br/>
481
+ **Default:** `true`<br/>
482
+ **Allowed values:** `true`, `false`<br/>
483
+
341
484
  <br/>
342
485
 
343
486
  ## Domain
@@ -359,6 +502,8 @@ or that the pacticipant should be created manually if it was intended to be a ne
359
502
  To turn this feature off, set `check_for_potential_duplicate_pacticipant_names` to `false`, and make sure everyone is very careful with their naming!
360
503
  The usefulness of the Broker depends on the integrity of the data, which in turn depends on the correctness of the pacticipant names.
361
504
 
505
+ **YAML configuration key name:** `check_for_potential_duplicate_pacticipant_names`<br/>
506
+ **Environment variable name:** `PACT_BROKER_CHECK_FOR_POTENTIAL_DUPLICATE_PACTICIPANT_NAMES`<br/>
362
507
  **Default:** `true`<br/>
363
508
  **Allowed values:** `true`, `false`<br/>
364
509
 
@@ -369,6 +514,9 @@ also created for the pacticipant version.
369
514
 
370
515
  This is to assist in the migration from using tags to track deployments to using the deployed and released versions feature.
371
516
 
517
+ **YAML configuration key name:** `create_deployed_versions_for_tags`<br/>
518
+ **Environment variable name:** `PACT_BROKER_CREATE_DEPLOYED_VERSIONS_FOR_TAGS`<br/>
519
+ **Supported versions:** From v2.81.0<br/>
372
520
  **Default:** `true`<br/>
373
521
  **Allowed values:** `true`, `false`<br/>
374
522
  **More information:** https://docs.pact.io/pact_broker/recording_deployments_and_releases/<br/>
@@ -380,9 +528,48 @@ will be used to populate the `branch` property of the version.
380
528
 
381
529
  This is to assist in the migration from using tags to track branches to using the branches feature.
382
530
 
531
+ **YAML configuration key name:** `use_first_tag_as_branch`<br/>
532
+ **Environment variable name:** `PACT_BROKER_USE_FIRST_TAG_AS_BRANCH`<br/>
533
+ **Supported versions:** From v2.82.0<br/>
534
+ **Default:** `true`<br/>
535
+ **Allowed values:** `true`, `false`<br/>
536
+
537
+ ### auto_detect_main_branch
538
+
539
+ When `true` and a pacticipant version is created with a tag or a branch that matches one of the names in `main_branch_candidates`,
540
+ the `mainBranch` property is set for that pacticipant if it is not already set.
541
+
542
+ This is to assist in the migration from using tags to track branches to using the branches feature.
543
+
544
+ **YAML configuration key name:** `auto_detect_main_branch`<br/>
545
+ **Environment variable name:** `PACT_BROKER_AUTO_DETECT_MAIN_BRANCH`<br/>
546
+ **Supported versions:** From v2.82.0<br/>
383
547
  **Default:** `true`<br/>
384
548
  **Allowed values:** `true`, `false`<br/>
385
549
 
550
+ ### main_branch_candidates
551
+
552
+ An array of potential main branch names used when automatically detecting the main branch for a pacticipant.
553
+
554
+ **YAML configuration key name:** `main_branch_candidates`<br/>
555
+ **Environment variable name:** `PACT_BROKER_MAIN_BRANCH_CANDIDATES`<br/>
556
+ **Supported versions:** From v2.82.0<br/>
557
+ **Format:** A space delimited list.<br/>
558
+ **Default:** `develop main master`<br/>
559
+
560
+ ### allow_dangerous_contract_modification
561
+
562
+ Whether or not to allow the pact content for an existing consumer version to be modified. It is strongly recommended that this is set to false,
563
+ as allowing modification makes the results of can-i-deploy unreliable. When this is set to false as recommended, each commit must publish pacts
564
+ with a unique version number.
565
+
566
+ **YAML configuration key name:** `allow_dangerous_contract_modification`<br/>
567
+ **Environment variable name:** `PACT_BROKER_ALLOW_DANGEROUS_CONTRACT_MODIFICATION`<br/>
568
+ **Supported versions:** From v2.82.0<br/>
569
+ **Default:** For new installations of v2.82.0 and later, this defaults to `false`.<br/>
570
+ **Allowed values:** `true`, `false`<br/>
571
+ **More information:** https://docs.pact.io/versioning<br/>
572
+
386
573
  <br/>
387
574
 
388
575
  ## Miscellaneous
@@ -394,5 +581,7 @@ This is to assist in the migration from using tags to track branches to using th
394
581
 
395
582
  A list of features to enable in the Pact Broker for beta testing before public release.
396
583
 
584
+ **YAML configuration key name:** `features`<br/>
585
+ **Environment variable name:** `PACT_BROKER_FEATURES`<br/>
397
586
  **Format:** A space separated list.<br/>
398
587