pact_broker 2.82.0 → 2.85.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.
Files changed (221) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +53 -0
  4. data/Dockerfile +1 -1
  5. data/db/migrations/20210815_add_provider_version_id_index_to_verifications.rb +7 -0
  6. data/db/migrations/20210816_create_branches_tables.rb +40 -0
  7. data/db/migrations/20210818_add_consumer_version_selectors_to_verification.rb +8 -0
  8. data/db/migrations/20210831_add_index_to_pact_publications.rb +7 -0
  9. data/db/migrations/20210908_add_auto_created.rb +24 -0
  10. data/db/migrations/20210913_add_pending_to_verifications.rb +7 -0
  11. data/issue-reproduction/Dockerfile-pact-broker +1 -1
  12. data/lib/pact/doc/markdown/consumer_contract_renderer.rb +3 -3
  13. data/lib/pact_broker/api/contracts/{verifiable_pacts_json_query_schema.rb → pacts_for_verification_json_query_schema.rb} +1 -1
  14. data/lib/pact_broker/api/contracts/{verifiable_pacts_query_schema.rb → pacts_for_verification_query_string_schema.rb} +1 -1
  15. data/lib/pact_broker/api/decorators/branch_version_decorator.rb +20 -0
  16. data/lib/pact_broker/api/decorators/dashboard_decorator.rb +4 -2
  17. data/lib/pact_broker/api/decorators/embedded_branch_version_decorator.rb +21 -0
  18. data/lib/pact_broker/api/decorators/embedded_tag_decorator.rb +0 -5
  19. data/lib/pact_broker/api/decorators/matrix_decorator.rb +11 -2
  20. data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +8 -0
  21. data/lib/pact_broker/api/decorators/{verifiable_pacts_query_decorator.rb → pacts_for_verification_query_decorator.rb} +2 -2
  22. data/lib/pact_broker/api/decorators/reason_decorator.rb +2 -2
  23. data/lib/pact_broker/api/decorators/verification_summary_decorator.rb +1 -2
  24. data/lib/pact_broker/api/decorators/version_decorator.rb +1 -1
  25. data/lib/pact_broker/api/middleware/configuration.rb +33 -0
  26. data/lib/pact_broker/api/pact_broker_urls.rb +13 -1
  27. data/lib/pact_broker/api/renderers/html_pact_renderer.rb +15 -11
  28. data/lib/pact_broker/api/resources/branch_version.rb +48 -0
  29. data/lib/pact_broker/api/resources/index.rb +6 -0
  30. data/lib/pact_broker/api/resources/pact_versions_for_branch.rb +40 -0
  31. data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +6 -6
  32. data/lib/pact_broker/api/resources/verifications.rb +7 -2
  33. data/lib/pact_broker/api/resources/version.rb +0 -8
  34. data/lib/pact_broker/api.rb +2 -0
  35. data/lib/pact_broker/app.rb +2 -0
  36. data/lib/pact_broker/badges/service.rb +3 -1
  37. data/lib/pact_broker/config/runtime_configuration.rb +12 -0
  38. data/lib/pact_broker/configuration.rb +33 -29
  39. data/lib/pact_broker/contracts/service.rb +1 -1
  40. data/lib/pact_broker/db/clean/selector.rb +54 -0
  41. data/lib/pact_broker/db/clean.rb +7 -1
  42. data/lib/pact_broker/db/clean_incremental.rb +13 -5
  43. data/lib/pact_broker/db/data_migrations/create_branches.rb +97 -0
  44. data/lib/pact_broker/db/data_migrations/set_pacticipant_main_branch.rb +2 -0
  45. data/lib/pact_broker/db/migrate_data.rb +1 -1
  46. data/lib/pact_broker/db/models.rb +6 -0
  47. data/lib/pact_broker/deployments/deployed_version.rb +4 -0
  48. data/lib/pact_broker/deployments/deployed_version_service.rb +4 -3
  49. data/lib/pact_broker/deployments/environment.rb +4 -0
  50. data/lib/pact_broker/deployments/environment_service.rb +13 -8
  51. data/lib/pact_broker/diagnostic/resources/base_resource.rb +4 -0
  52. data/lib/pact_broker/diagnostic/resources/dependencies.rb +1 -1
  53. data/lib/pact_broker/diagnostic/resources/heartbeat.rb +2 -3
  54. data/lib/pact_broker/doc/views/index/pacticipant-branch-version.markdown +14 -0
  55. data/lib/pact_broker/doc/views/webhooks.markdown +1 -0
  56. data/lib/pact_broker/domain/index_item.rb +15 -17
  57. data/lib/pact_broker/domain/pacticipant.rb +11 -0
  58. data/lib/pact_broker/domain/tag.rb +1 -2
  59. data/lib/pact_broker/domain/verification.rb +29 -14
  60. data/lib/pact_broker/domain/version.rb +112 -29
  61. data/lib/pact_broker/domain/webhook.rb +22 -10
  62. data/lib/pact_broker/domain/webhook_request.rb +2 -2
  63. data/lib/pact_broker/index/service.rb +83 -28
  64. data/lib/pact_broker/locale/en.yml +4 -0
  65. data/lib/pact_broker/matrix/quick_row.rb +6 -6
  66. data/lib/pact_broker/matrix/service.rb +4 -0
  67. data/lib/pact_broker/matrix/unresolved_selector.rb +3 -2
  68. data/lib/pact_broker/metrics/service.rb +7 -1
  69. data/lib/pact_broker/pacts/metadata.rb +7 -2
  70. data/lib/pact_broker/pacts/pact_publication.rb +59 -25
  71. data/lib/pact_broker/pacts/pact_publication_dataset_module.rb +113 -33
  72. data/lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb +18 -13
  73. data/lib/pact_broker/pacts/pact_publication_wip_dataset_module.rb +16 -4
  74. data/lib/pact_broker/pacts/pact_version.rb +13 -1
  75. data/lib/pact_broker/pacts/pacts_for_verification_repository.rb +4 -10
  76. data/lib/pact_broker/pacts/repository.rb +6 -1
  77. data/lib/pact_broker/pacts/selected_pact.rb +20 -0
  78. data/lib/pact_broker/pacts/selector.rb +98 -33
  79. data/lib/pact_broker/pacts/service.rb +21 -0
  80. data/lib/pact_broker/repositories.rb +5 -0
  81. data/lib/pact_broker/services.rb +9 -0
  82. data/lib/pact_broker/test/http_test_data_builder.rb +35 -9
  83. data/lib/pact_broker/test/test_data_builder.rb +32 -26
  84. data/lib/pact_broker/ui/app.rb +7 -1
  85. data/lib/pact_broker/ui/controllers/dashboard.rb +80 -0
  86. data/lib/pact_broker/ui/controllers/groups.rb +23 -8
  87. data/lib/pact_broker/ui/helpers/url_helper.rb +5 -1
  88. data/lib/pact_broker/ui/view_models/index_item.rb +56 -3
  89. data/lib/pact_broker/ui/view_models/matrix_branch.rb +39 -0
  90. data/lib/pact_broker/ui/view_models/matrix_line.rb +11 -16
  91. data/lib/pact_broker/ui/view_models/matrix_tag.rb +0 -1
  92. data/lib/pact_broker/ui/views/dashboard/show.haml +195 -0
  93. data/lib/pact_broker/ui/views/groups/show.html.erb +60 -14
  94. data/lib/pact_broker/ui/views/index/_dashboard_navbar.haml +7 -0
  95. data/lib/pact_broker/ui/views/index/_navbar.haml +0 -7
  96. data/lib/pact_broker/ui/views/index/show-with-tags.haml +14 -11
  97. data/lib/pact_broker/ui/views/index/show.haml +35 -13
  98. data/lib/pact_broker/ui/views/matrix/show.haml +15 -11
  99. data/lib/pact_broker/verifications/pseudo_branch_status.rb +2 -0
  100. data/lib/pact_broker/verifications/repository.rb +6 -11
  101. data/lib/pact_broker/verifications/service.rb +11 -5
  102. data/lib/pact_broker/version.rb +1 -1
  103. data/lib/pact_broker/versions/branch.rb +29 -0
  104. data/lib/pact_broker/versions/branch_head.rb +45 -0
  105. data/lib/pact_broker/versions/branch_service.rb +24 -0
  106. data/lib/pact_broker/versions/branch_version.rb +64 -0
  107. data/lib/pact_broker/versions/branch_version_repository.rb +34 -0
  108. data/lib/pact_broker/versions/eager_loaders.rb +0 -42
  109. data/lib/pact_broker/versions/repository.rb +25 -12
  110. data/lib/pact_broker/versions/service.rb +3 -22
  111. data/lib/pact_broker/webhooks/event_listener.rb +3 -3
  112. data/lib/pact_broker/webhooks/execution_configuration.rb +16 -0
  113. data/lib/pact_broker/webhooks/execution_configuration_creator.rb +3 -0
  114. data/lib/pact_broker/webhooks/job.rb +1 -1
  115. data/lib/pact_broker/webhooks/pact_and_verification_parameters.rb +20 -3
  116. data/lib/pact_broker/webhooks/trigger_service.rb +2 -2
  117. data/lib/pact_broker/webhooks/webhook_execution_result.rb +3 -7
  118. data/lib/pact_broker/webhooks/webhook_request_logger.rb +4 -12
  119. data/lib/pact_broker/webhooks/webhook_request_template.rb +6 -8
  120. data/lib/sequel/plugins/insert_ignore.rb +4 -0
  121. data/lib/sequel/plugins/upsert.rb +4 -0
  122. data/pact_broker.gemspec +4 -0
  123. data/public/javascripts/index.js +152 -50
  124. data/public/javascripts/pact.js +14 -14
  125. data/public/stylesheets/index.css +1 -2
  126. data/public/stylesheets/pact.css +11 -0
  127. data/scaffolding/templates/decorator.rb.erb +3 -1
  128. data/scaffolding/templates/migration.erb +1 -1
  129. data/scaffolding/templates/model.erb +2 -2
  130. data/scaffolding/templates/repository.rb.erb +2 -2
  131. data/scaffolding/templates/repository_spec.rb.erb +1 -1
  132. data/scaffolding/templates/resource.erb +2 -2
  133. data/scaffolding/templates/resource_spec.rb.erb +1 -1
  134. data/scaffolding/templates/service.rb.erb +3 -3
  135. data/scaffolding/templates/service_spec.rb.erb +1 -1
  136. data/script/data/auto-create-things-for-tags.rb +2 -0
  137. data/script/data/branches.rb +35 -0
  138. data/script/data/contract-published-requiring-verification.rb +1 -1
  139. data/script/data/environments.rb +0 -0
  140. data/script/data/issue-494.rb +25 -0
  141. data/script/data/pending.rb +26 -0
  142. data/script/data/tags.rb +35 -0
  143. data/script/data/webhook.rb +22 -0
  144. data/script/seed.rb +50 -89
  145. data/spec/features/create_branch_version_spec.rb +29 -0
  146. data/spec/features/create_tag_spec.rb +1 -1
  147. data/spec/features/create_version_spec.rb +2 -4
  148. data/spec/features/delete_pact_versions_for_branch_spec.rb +34 -0
  149. data/spec/features/get_branch_version_spec.rb +12 -0
  150. data/spec/features/publish_pact_all_in_one_spec.rb +0 -1
  151. data/spec/features/update_version_spec.rb +0 -55
  152. data/spec/fixtures/approvals/modifiable_resources.approved.json +7 -0
  153. data/spec/fixtures/approvals/publish_contract_nothing_exists.approved.json +1 -2
  154. data/spec/fixtures/approvals/publish_contract_nothing_exists_with_webhook.approved.json +1 -2
  155. data/spec/fixtures/approvals/publish_contract_verification_already_exists.approved.json +1 -2
  156. data/spec/fixtures/dashboard.json +4 -2
  157. data/spec/integration/app_spec.rb +6 -6
  158. data/spec/integration/ui/index_spec.rb +0 -2
  159. data/spec/integration/ui/matrix_spec.rb +0 -1
  160. data/spec/lib/pact/doc/markdown/consumer_contract_renderer_spec.rb +2 -2
  161. data/spec/lib/pact_broker/api/contracts/{verifiable_pacts_json_query_schema_combinations_spec.rb → pacts_for_verification_json_query_schema_combinations_spec.rb} +6 -6
  162. data/spec/lib/pact_broker/api/contracts/{verifiable_pacts_json_query_schema_spec.rb → pacts_for_verification_json_query_schema_spec.rb} +3 -3
  163. data/spec/lib/pact_broker/api/contracts/{verifiable_pacts_query_schema_spec.rb → pacts_for_verification_query_string_schema_spec.rb} +3 -3
  164. data/spec/lib/pact_broker/api/decorators/dashboard_decorator_spec.rb +7 -7
  165. data/spec/lib/pact_broker/api/decorators/matrix_decorator_spec.rb +19 -4
  166. data/spec/lib/pact_broker/api/decorators/{verifiable_pacts_query_decorator_spec.rb → pacts_for_verification_query_decorator_spec.rb} +3 -3
  167. data/spec/lib/pact_broker/api/decorators/reason_decorator_spec.rb +2 -2
  168. data/spec/lib/pact_broker/api/decorators/verification_summary_decorator_spec.rb +2 -0
  169. data/spec/lib/pact_broker/api/decorators/version_decorator_spec.rb +7 -3
  170. data/spec/lib/pact_broker/api/decorators/webhook_execution_result_decorator_spec.rb +1 -1
  171. data/spec/lib/pact_broker/api/middleware/configuration_spec.rb +43 -0
  172. data/spec/lib/pact_broker/api/resources/verifications_spec.rb +6 -4
  173. data/spec/lib/pact_broker/api/resources/webhook_execution_spec.rb +1 -1
  174. data/spec/lib/pact_broker/badges/service_spec.rb +22 -0
  175. data/spec/lib/pact_broker/contracts/service_spec.rb +24 -3
  176. data/spec/lib/pact_broker/db/clean_spec.rb +2 -2
  177. data/spec/lib/pact_broker/db/data_migrations/create_branches_spec.rb +57 -0
  178. data/spec/lib/pact_broker/diagnostic/resources/dependencies_spec.rb +4 -4
  179. data/spec/lib/pact_broker/diagnostic/resources/heartbeat_spec.rb +3 -4
  180. data/spec/lib/pact_broker/domain/index_item_spec.rb +1 -1
  181. data/spec/lib/pact_broker/domain/version_spec.rb +127 -36
  182. data/spec/lib/pact_broker/domain/webhook_request_spec.rb +2 -1
  183. data/spec/lib/pact_broker/domain/webhook_spec.rb +15 -5
  184. data/spec/lib/pact_broker/index/service_spec.rb +1 -5
  185. data/spec/lib/pact_broker/index/service_view_spec.rb +144 -0
  186. data/spec/lib/pact_broker/matrix/service_spec.rb +10 -1
  187. data/spec/lib/pact_broker/metrics/service_spec.rb +4 -1
  188. data/spec/lib/pact_broker/pacts/metadata_spec.rb +11 -3
  189. data/spec/lib/pact_broker/pacts/pact_publication_dataset_module_spec.rb +109 -10
  190. data/spec/lib/pact_broker/pacts/pact_publication_latest_verification_spec.rb +29 -0
  191. data/spec/lib/pact_broker/pacts/pact_publication_selector_dataset_module_spec.rb +3 -2
  192. data/spec/lib/pact_broker/pacts/pact_publication_spec.rb +5 -5
  193. data/spec/lib/pact_broker/pacts/repository_find_for_currently_deployed_spec.rb +2 -2
  194. data/spec/lib/pact_broker/pacts/repository_find_for_currently_supported_releases_spec.rb +2 -2
  195. data/spec/lib/pact_broker/pacts/repository_spec.rb +15 -2
  196. data/spec/lib/pact_broker/pacts/selector_spec.rb +45 -3
  197. data/spec/lib/pact_broker/pacts/service_spec.rb +61 -0
  198. data/spec/lib/pact_broker/pacts/verifiable_pact_messages_spec.rb +5 -5
  199. data/spec/lib/pact_broker/relationships/groupify_spec.rb +0 -5
  200. data/spec/lib/pact_broker/ui/view_models/index_item_spec.rb +21 -6
  201. data/spec/lib/pact_broker/verifications/pseudo_branch_status_spec.rb +9 -1
  202. data/spec/lib/pact_broker/verifications/repository_spec.rb +39 -30
  203. data/spec/lib/pact_broker/verifications/service_spec.rb +9 -5
  204. data/spec/lib/pact_broker/versions/branch_service_spec.rb +71 -0
  205. data/spec/lib/pact_broker/versions/branch_version_repository_spec.rb +81 -0
  206. data/spec/lib/pact_broker/versions/branch_version_spec.rb +27 -0
  207. data/spec/lib/pact_broker/versions/repository_spec.rb +91 -6
  208. data/spec/lib/pact_broker/versions/service_spec.rb +4 -3
  209. data/spec/lib/pact_broker/webhooks/job_spec.rb +4 -4
  210. data/spec/lib/pact_broker/webhooks/render_spec.rb +6 -0
  211. data/spec/lib/pact_broker/webhooks/trigger_service_spec.rb +9 -5
  212. data/spec/lib/pact_broker/webhooks/webhook_request_logger_spec.rb +6 -12
  213. data/spec/lib/pact_broker/webhooks/webhook_request_template_spec.rb +3 -2
  214. data/spec/lib/sequel/plugins/upsert_spec.rb +11 -5
  215. data/spec/migrations/44_add_provider_version_to_verification_spec.rb +6 -9
  216. data/spec/service_consumers/pact_helper.rb +2 -0
  217. data/spec/spec_helper.rb +1 -1
  218. data/spec/support/generated_markdown.md +3 -3
  219. metadata +90 -17
  220. data/lib/pact_broker/versions/lazy_loaders.rb +0 -13
  221. data/spec/lib/pact_broker/api/resources/webhook_execution_result_spec.rb +0 -56
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9a0cf4f6c970fd0fa0535eca1d44605e3e40d79407e6edf5e06f6ceea7160ece
4
- data.tar.gz: bb6533b81dd28846a3ccda8d3fe2479c1621cd2117814ee63d5f6cf55f500079
3
+ metadata.gz: 274321ebbf970f7e282a64933d9d89522323c82d48b40b29b7c3921dec918e81
4
+ data.tar.gz: 89e6686d83aa69c88292675c4530adfbd48eff00b2c0f59ed901a13cbd14db2c
5
5
  SHA512:
6
- metadata.gz: c5f7da8fe0a477ee49d54a3d2e034be142d3af6b7a942b47818e2809ae34c1d3add710ba316871d41001e4a1ec708769d51de176b37a47b4785b81778c729a0c
7
- data.tar.gz: cd91ad22fb076907f240deb3322701f272b802839f2c1a6c3f44e232a452eb17fa5d5f61fe6ef0cfab3ac912d2b9700c5f33e30b918ba6bd1125735ace3af743
6
+ metadata.gz: 1cb98e0a974f7c440d803a47cd947579351573eeaa232e7768d012dc3b74ed9255e1520e585c56cf25eb856c43ba593cb9bceb890afb21bc61431c15ca193224
7
+ data.tar.gz: 893d6548ae9080919eeee2fbaee934c422da2a070b1f1ce32bb494a311a5d6f72db5b89652a683af23a1ddc14af09e1859bec47ebe3492644d612a656c171586
data/.gitignore CHANGED
@@ -42,3 +42,4 @@ db/test/backwards_compatibility/pact_broker_database.sqlite3
42
42
  spec/examples.txt
43
43
  .approvals
44
44
  regression/fixtures/approvals
45
+ config/pact_broker.local.yml
data/CHANGELOG.md CHANGED
@@ -1,3 +1,56 @@
1
+ <a name="v2.85.1"></a>
2
+ ### v2.85.1 (2021-09-14)
3
+
4
+ #### Bug Fixes
5
+
6
+ * fix bug identifying latest verification for tagged pact ([43ac4b03](/../../commit/43ac4b03))
7
+
8
+ <a name="v2.85.0"></a>
9
+ ### v2.85.0 (2021-09-13)
10
+
11
+ #### Features
12
+
13
+ * show in the UI whether or not a pact was pending when verification failed ([326c068e](/../../commit/326c068e))
14
+ * thread safe configuration overrides (#500) ([50900231](/../../commit/50900231))
15
+ * allow dashboard pacts to be viewed by branch, tag, environment or all ([1ec8fc82](/../../commit/1ec8fc82))
16
+ * support deleting pacts by branch in the UI ([bc8fef1d](/../../commit/bc8fef1d))
17
+ * update UI ([0ba5eda3](/../../commit/0ba5eda3))
18
+
19
+ <a name="v2.84.0"></a>
20
+ ### v2.84.0 (2021-09-10)
21
+
22
+ #### Features
23
+
24
+ * use the first tag as the branch when publishing pacts using the contracts/publish endpoint ([7b903c1d](/../../commit/7b903c1d))
25
+ * support multiple branches per version (#495) ([acff2fcc](/../../commit/acff2fcc))
26
+ * Support deleting all pacts for a specific tag in the UI (#480) ([10dda8ae](/../../commit/10dda8ae))
27
+ * add webhook template parameter for GItlab verification statuses (#493) ([390ae0d8](/../../commit/390ae0d8))
28
+
29
+ * **pacts for verification**
30
+ * include pending status for responses by default when includePendingStatus is not specified ([748d3b87](/../../commit/748d3b87))
31
+
32
+ #### Bug Fixes
33
+
34
+ * when the latest version for a tag does not have a pact, do not return a pact for the 'latest tag' selector ([374c77ce](/../../commit/374c77ce))
35
+ * issue-reproduction/Dockerfile-pact-broker to reduce vulnerabilities (#491) ([9692b465](/../../commit/9692b465))
36
+ * Dockerfile to reduce vulnerabilities (#496) ([57c190ef](/../../commit/57c190ef))
37
+
38
+ <a name="v2.83.0"></a>
39
+ ### v2.83.0 (2021-08-19)
40
+
41
+ #### Features
42
+
43
+ * **clean**
44
+ * update default selectors for clean task to include deployed, released and branch head versions ([aaffe71f](/../../commit/aaffe71f))
45
+ * support keeping currently deployed and released versions, and the latest version for each branch ([e4fbd766](/../../commit/e4fbd766))
46
+
47
+ * add index to verifications table to improve performance of 'latest verification' query ([02eeb424](/../../commit/02eeb424))
48
+
49
+ #### Bug Fixes
50
+
51
+ * use provider_version_number from webhook context ([3cf421ac](/../../commit/3cf421ac))
52
+ * validate matrix query limit ([ac5e0890](/../../commit/ac5e0890))
53
+
1
54
  <a name="v2.82.0"></a>
2
55
  ### v2.82.0 (2021-08-14)
3
56
 
data/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM ruby:2.7.3-alpine3.13
1
+ FROM ruby:2.7.4-alpine3.13
2
2
 
3
3
  WORKDIR /home
4
4
 
@@ -0,0 +1,7 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:verifications) do
4
+ add_index([:pact_version_id, :id], name: "verifications_pact_version_id_id_index")
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,40 @@
1
+ Sequel.migration do
2
+ change do
3
+ create_table(:branches, charset: "utf8") do
4
+ primary_key :id
5
+ String :name
6
+ foreign_key :pacticipant_id, :pacticipants, null: false, on_delete: :cascade
7
+ DateTime :created_at, null: false
8
+ DateTime :updated_at, null: false
9
+ index [:pacticipant_id, :name], unique: true, name: :branches_pacticipant_id_name_index
10
+ end
11
+
12
+ create_table(:branch_versions, charset: "utf8") do
13
+ primary_key :id
14
+ foreign_key :branch_id, :branches, null: false, foreign_key_constraint_name: :branch_versions_branches_fk, on_delete: :cascade
15
+ foreign_key :version_id, :versions, null: false, foreign_key_constraint_name: :branch_versions_versions_fk, on_delete: :cascade
16
+ Integer :version_order, null: false
17
+ Integer :pacticipant_id, null: false
18
+ String :branch_name, null: false
19
+ DateTime :created_at, null: false
20
+ DateTime :updated_at, null: false
21
+ index [:branch_id, :version_id], unique: true, name: :branch_versions_branch_id_version_id_index
22
+ index [:version_id], name: :branch_versions_version_id_index
23
+ index [:branch_name], name: :branch_versions_branch_name_index
24
+ # Can probably drop this index when the "latest pact" logic changes
25
+ index [:pacticipant_id, :branch_id, :version_order], name: :branch_versions_pacticipant_id_branch_id_version_order_index
26
+ end
27
+
28
+ create_table(:branch_heads) do
29
+ foreign_key :branch_id, :branches, null: false, on_delete: :cascade
30
+ foreign_key :branch_version_id, :branch_versions, null: false, on_delete: :cascade
31
+ Integer :version_id, null: false
32
+ Integer :pacticipant_id, null: false
33
+ String :branch_name, null: false
34
+ index [:branch_id], unique: true, name: :branch_heads_branch_id_index
35
+ index [:branch_name], name: :branch_heads_branch_name_index
36
+ index [:pacticipant_id], name: :branch_heads_pacticipant_id_index
37
+ index [:version_id], name: :branch_heads_version_id_index
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,8 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:verifications) do
4
+ add_column(:consumer_version_selector_hashes, String)
5
+ add_column(:tag_names, String)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:pact_publications) do
4
+ add_index [:consumer_id, :provider_id, :consumer_version_order], name: :pact_publications_cid_pid_cvo_index
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,24 @@
1
+ Sequel.migration do
2
+ up do
3
+ alter_table(:branch_versions) do
4
+ add_column(:auto_created, TrueClass, default: false)
5
+ end
6
+
7
+ alter_table(:deployed_versions) do
8
+ add_column(:auto_created, TrueClass, default: false)
9
+ end
10
+
11
+ from(:branch_versions).update(auto_created: true)
12
+ from(:deployed_versions).update(auto_created: true)
13
+ end
14
+
15
+ down do
16
+ alter_table(:branch_versions) do
17
+ drop_column(:auto_created)
18
+ end
19
+
20
+ alter_table(:deployed_versions) do
21
+ drop_column(:auto_created)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,7 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:verifications) do
4
+ add_column(:pact_pending, TrueClass)
5
+ end
6
+ end
7
+ end
@@ -1,4 +1,4 @@
1
- FROM ruby:2.7.3-alpine
1
+ FROM ruby:2.7-alpine
2
2
 
3
3
  RUN apk update \
4
4
  && apk --no-cache add \
@@ -24,7 +24,7 @@ module Pact
24
24
  attr_reader :consumer_contract
25
25
 
26
26
  def title
27
- "### A pact between #{consumer_name} and #{provider_name}\n\n"
27
+ "# A pact between #{consumer_name} and #{provider_name}\n\n"
28
28
  end
29
29
 
30
30
  def interaction_renderers
@@ -32,11 +32,11 @@ module Pact
32
32
  end
33
33
 
34
34
  def summaries_title
35
- "#### Requests from #{consumer_name} to #{provider_name}\n\n"
35
+ "### Requests from #{consumer_name} to #{provider_name}\n\n"
36
36
  end
37
37
 
38
38
  def interactions_title
39
- "#### Interactions\n\n"
39
+ "### Interactions\n\n"
40
40
  end
41
41
 
42
42
  def summaries
@@ -8,7 +8,7 @@ require "pact_broker/messages"
8
8
  module PactBroker
9
9
  module Api
10
10
  module Contracts
11
- class VerifiablePactsJSONQuerySchema
11
+ class PactsForVerificationJSONQuerySchema
12
12
  extend DryValidationWorkarounds
13
13
  extend PactBroker::Messages
14
14
 
@@ -5,7 +5,7 @@ require "pact_broker/api/contracts/dry_validation_predicates"
5
5
  module PactBroker
6
6
  module Api
7
7
  module Contracts
8
- class VerifiablePactsQuerySchema
8
+ class PactsForVerificationQueryStringSchema
9
9
  extend DryValidationWorkarounds
10
10
  using PactBroker::HashRefinements
11
11
 
@@ -0,0 +1,20 @@
1
+ require "pact_broker/api/decorators/base_decorator"
2
+ require "pact_broker/api/decorators/timestamps"
3
+
4
+ module PactBroker
5
+ module Api
6
+ module Decorators
7
+ class BranchVersionDecorator < BaseDecorator
8
+
9
+ link :self do | user_options |
10
+ {
11
+ title: "Branch version",
12
+ href: branch_version_url(represented, user_options.fetch(:base_url))
13
+ }
14
+ end
15
+
16
+ include Timestamps
17
+ end
18
+ end
19
+ end
20
+ end
@@ -58,7 +58,8 @@ module PactBroker
58
58
  name: index_item.consumer_name,
59
59
  version: {
60
60
  number: index_item.consumer_version_number,
61
- branch: index_item.consumer_version_branch,
61
+ branch: index_item.consumer_version_branches.last,
62
+ headBranchNames: index_item.consumer_version_branches,
62
63
  _links: {
63
64
  self: {
64
65
  href: version_url(base_url, index_item.consumer_version)
@@ -87,7 +88,8 @@ module PactBroker
87
88
  if index_item.latest_verification
88
89
  hash[:version] = {
89
90
  number: index_item.provider_version_number,
90
- branch: index_item.provider_version_branch
91
+ branch: index_item.provider_version_branches.last,
92
+ headBranchNames: index_item.provider_version_branches
91
93
  }
92
94
  end
93
95
 
@@ -0,0 +1,21 @@
1
+ require_relative "base_decorator"
2
+ require_relative "timestamps"
3
+
4
+ module PactBroker
5
+ module Api
6
+ module Decorators
7
+ class EmbeddedBranchVersionDecorator < BaseDecorator
8
+ property :branch_name, as: :name
9
+ property :latest?, as: :latest
10
+
11
+ link :self do | options |
12
+ {
13
+ title: "Version branch",
14
+ name: represented.branch_name,
15
+ href: branch_version_url(represented, options[:base_url])
16
+ }
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,15 +1,10 @@
1
1
  require_relative "base_decorator"
2
- require_relative "pact_pacticipant_decorator"
3
2
  require_relative "timestamps"
4
3
 
5
4
  module PactBroker
6
-
7
5
  module Api
8
-
9
6
  module Decorators
10
-
11
7
  class EmbeddedTagDecorator < BaseDecorator
12
-
13
8
  property :name
14
9
 
15
10
  link :self do | options |
@@ -2,6 +2,7 @@ require "ostruct"
2
2
  require "pact_broker/api/pact_broker_urls"
3
3
  require "pact_broker/api/decorators/reason_decorator"
4
4
  require "pact_broker/api/decorators/format_date_time"
5
+ require "pact_broker/api/decorators/embedded_branch_version_decorator"
5
6
 
6
7
  module PactBroker
7
8
  module Api
@@ -83,7 +84,8 @@ module PactBroker
83
84
  name: line.consumer_name,
84
85
  version: {
85
86
  number: line.consumer_version_number,
86
- branch: line.consumer_version_branch,
87
+ branch: line.consumer_version_branch_versions.last&.branch_name,
88
+ branches: branches(line.consumer_version_branch_versions, base_url),
87
89
  _links: {
88
90
  self: {
89
91
  href: version_url(base_url, consumer_version)
@@ -99,6 +101,12 @@ module PactBroker
99
101
  }
100
102
  end
101
103
 
104
+ def branches(branch_versions, base_url)
105
+ branch_versions.collect do | branch_version |
106
+ PactBroker::Api::Decorators::EmbeddedBranchVersionDecorator.new(branch_version).to_hash(user_options: { base_url: base_url })
107
+ end
108
+ end
109
+
102
110
  def tags(tags, base_url)
103
111
  tags.sort_by(&:created_at).collect do | tag |
104
112
  {
@@ -127,7 +135,8 @@ module PactBroker
127
135
  if !line.provider_version_number.nil?
128
136
  hash[:version] = {
129
137
  number: line.provider_version_number,
130
- branch: line.provider_version_branch,
138
+ branch: line.provider_version_branch_versions.last&.branch_name,
139
+ branches: branches(line.provider_version_branch_versions, base_url),
131
140
  _links: {
132
141
  self: {
133
142
  href: version_url(base_url, provider_version)
@@ -49,6 +49,14 @@ module PactBroker
49
49
  }
50
50
  end
51
51
 
52
+ link :'pb:branch-version' do | options |
53
+ {
54
+ title: "Get or add/create a version for a branch of #{represented.name}",
55
+ href: templated_branch_version_url_for_pacticipant(represented.name, options[:base_url]),
56
+ templated: true
57
+ }
58
+ end
59
+
52
60
  link :'pb:label' do | options |
53
61
  {
54
62
  title: "Get, create or delete a label for #{represented.name}",
@@ -8,7 +8,7 @@ require "pact_broker/pacts/selectors"
8
8
  module PactBroker
9
9
  module Api
10
10
  module Decorators
11
- class VerifiablePactsQueryDecorator < BaseDecorator
11
+ class PactsForVerificationQueryDecorator < BaseDecorator
12
12
  using PactBroker::HashRefinements
13
13
 
14
14
  collection :provider_version_tags, default: []
@@ -38,7 +38,7 @@ module PactBroker
38
38
  }
39
39
  end
40
40
 
41
- property :include_pending_status, default: false,
41
+ property :include_pending_status, default: true,
42
42
  setter: ->(fragment:, represented:, **) {
43
43
  represented.include_pending_status = (fragment == "true" || fragment == true)
44
44
  }
@@ -45,9 +45,9 @@ module PactBroker
45
45
  when PactBroker::Matrix::IgnoreSelectorDoesNotExist
46
46
  "WARN: Cannot ignore #{reason.selector.description}"
47
47
  when PactBroker::Matrix::SelectorWithoutPacticipantVersionNumberSpecified
48
- "WARN: For production use of can-i-deploy, it is recommended to specify the version number (rather than latest tag or branch) of each pacticipant to avoid race conditions."
48
+ "WARN: It is recommended to specify the version number (rather than the tag or branch) of the pacticipant you wish to deploy to avoid race conditions. Without a version number, this result will not be reliable."
49
49
  when PactBroker::Matrix::NoEnvironmentSpecified
50
- "WARN: For production use of can-i-deploy, it is recommended to specify the environment into which you are deploying. Without the environment, this result will not be reliable."
50
+ "WARN: It is recommended to specify the environment into which you are deploying. Without the environment, this result will not be reliable."
51
51
  else
52
52
  reason
53
53
  end
@@ -6,9 +6,9 @@ require "ostruct"
6
6
  module PactBroker
7
7
  module Api
8
8
  module Decorators
9
-
10
9
  class VerificationSummaryDecorator < BaseDecorator
11
10
 
11
+ # TODO count pending failures?
12
12
  property :success
13
13
  property :provider_summary, as: :providerSummary do
14
14
  property :successful
@@ -30,7 +30,6 @@ module PactBroker
30
30
  successful: represented.select(&:success).collect(&:provider_name),
31
31
  failed: represented.select{|verification| !verification.success }.collect(&:provider_name))
32
32
  end
33
-
34
33
  end
35
34
  end
36
35
  end
@@ -7,7 +7,7 @@ module PactBroker
7
7
  class VersionDecorator < BaseDecorator
8
8
 
9
9
  property :number, writeable: false
10
- property :branch
10
+ collection :branch_versions, as: :branches, embedded: true, writeable: false, extend: PactBroker::Api::Decorators::EmbeddedBranchVersionDecorator
11
11
  property :build_url, as: :buildUrl
12
12
 
13
13
  collection :tags, embedded: true, :extend => PactBroker::Api::Decorators::EmbeddedTagDecorator, class: OpenStruct
@@ -0,0 +1,33 @@
1
+ require "pact_broker/logging"
2
+
3
+ module PactBroker
4
+ module Api
5
+ module Middleware
6
+ class Configuration
7
+ include PactBroker::Logging
8
+
9
+ def initialize(app, configuration)
10
+ @app = app
11
+ @configuration = configuration
12
+ end
13
+
14
+ def call(env)
15
+ if (overrides = env["pactbroker.configuration_overrides"])&.any?
16
+ dupped_configuration = configuration.dup
17
+ dupped_configuration.override_runtime_configuration!(overrides)
18
+ dupped_configuration.freeze
19
+ PactBroker.set_configuration(dupped_configuration)
20
+ app.call(env)
21
+ else
22
+ PactBroker.set_configuration(configuration)
23
+ app.call(env)
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :app, :configuration
30
+ end
31
+ end
32
+ end
33
+ end