mq-bridge-basic 0.4.17__tar.gz

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 (370) hide show
  1. mq_bridge_basic-0.4.17/.cargo/config.toml +25 -0
  2. mq_bridge_basic-0.4.17/.coderabbit.yaml +5 -0
  3. mq_bridge_basic-0.4.17/.dockerignore +18 -0
  4. mq_bridge_basic-0.4.17/.github/ISSUE_TEMPLATE/bug_report.md +51 -0
  5. mq_bridge_basic-0.4.17/.github/ISSUE_TEMPLATE/feature_request.md +36 -0
  6. mq_bridge_basic-0.4.17/.github/PULL_REQUEST_TEMPLATE.md +42 -0
  7. mq_bridge_basic-0.4.17/.github/dependabot.yml +59 -0
  8. mq_bridge_basic-0.4.17/.github/workflows/app.yml +321 -0
  9. mq_bridge_basic-0.4.17/.github/workflows/benchmark.yml +276 -0
  10. mq_bridge_basic-0.4.17/.github/workflows/build-node.yml +198 -0
  11. mq_bridge_basic-0.4.17/.github/workflows/ci.yml +306 -0
  12. mq_bridge_basic-0.4.17/.github/workflows/conda.yml +60 -0
  13. mq_bridge_basic-0.4.17/.github/workflows/docs.yml +84 -0
  14. mq_bridge_basic-0.4.17/.github/workflows/ibm-mq.yml +242 -0
  15. mq_bridge_basic-0.4.17/.github/workflows/node.yml +98 -0
  16. mq_bridge_basic-0.4.17/.github/workflows/publish-node.yml +152 -0
  17. mq_bridge_basic-0.4.17/.github/workflows/publish-python.yml +307 -0
  18. mq_bridge_basic-0.4.17/.github/workflows/python.yml +82 -0
  19. mq_bridge_basic-0.4.17/.github/workflows/release.yml +1288 -0
  20. mq_bridge_basic-0.4.17/.github/workflows/test-matrix.yml +63 -0
  21. mq_bridge_basic-0.4.17/.gitignore +61 -0
  22. mq_bridge_basic-0.4.17/.justfile +465 -0
  23. mq_bridge_basic-0.4.17/CHANGELOG.md +1149 -0
  24. mq_bridge_basic-0.4.17/CLAUDE.md +207 -0
  25. mq_bridge_basic-0.4.17/CONTRIBUTING.md +92 -0
  26. mq_bridge_basic-0.4.17/Cargo.lock +8279 -0
  27. mq_bridge_basic-0.4.17/Cargo.toml +485 -0
  28. mq_bridge_basic-0.4.17/LICENSE +19 -0
  29. mq_bridge_basic-0.4.17/LICENSE-APACHE +201 -0
  30. mq_bridge_basic-0.4.17/LICENSE-APACHE.python +201 -0
  31. mq_bridge_basic-0.4.17/LICENSE-MIT +21 -0
  32. mq_bridge_basic-0.4.17/LICENSE-MIT.python +21 -0
  33. mq_bridge_basic-0.4.17/LICENSE.python +19 -0
  34. mq_bridge_basic-0.4.17/PKG-INFO +427 -0
  35. mq_bridge_basic-0.4.17/README.md +194 -0
  36. mq_bridge_basic-0.4.17/SECURITY.md +104 -0
  37. mq_bridge_basic-0.4.17/THIRD_PARTY_LICENSES.txt +4482 -0
  38. mq_bridge_basic-0.4.17/benches/ETL_BENCHMARKS.md +85 -0
  39. mq_bridge_basic-0.4.17/benches/csv_to_json_bench.rs +134 -0
  40. mq_bridge_basic-0.4.17/benches/middleware_expr_bench.rs +112 -0
  41. mq_bridge_basic-0.4.17/benches/pack_bench.rs +298 -0
  42. mq_bridge_basic-0.4.17/benches/performance_bench.rs +1316 -0
  43. mq_bridge_basic-0.4.17/benches/router_bench.rs +275 -0
  44. mq_bridge_basic-0.4.17/benches/zeromq_backends.rs +119 -0
  45. mq_bridge_basic-0.4.17/bindings-common/Cargo.toml +24 -0
  46. mq_bridge_basic-0.4.17/bindings-common/src/lib.rs +310 -0
  47. mq_bridge_basic-0.4.17/bindings-common/src/logging.rs +234 -0
  48. mq_bridge_basic-0.4.17/build.rs +56 -0
  49. mq_bridge_basic-0.4.17/deny.toml +97 -0
  50. mq_bridge_basic-0.4.17/docs/ARCHITECTURE.md +351 -0
  51. mq_bridge_basic-0.4.17/docs/CONFIGURATION.md +719 -0
  52. mq_bridge_basic-0.4.17/docs/DELIVERY.md +678 -0
  53. mq_bridge_basic-0.4.17/docs/EXTENDING.md +457 -0
  54. mq_bridge_basic-0.4.17/docs/GRPC.md +291 -0
  55. mq_bridge_basic-0.4.17/docs/PLUGINS.md +861 -0
  56. mq_bridge_basic-0.4.17/docs/REFERENCE.md +1858 -0
  57. mq_bridge_basic-0.4.17/docs/THIRD_PARTY_LICENSES.md +62 -0
  58. mq_bridge_basic-0.4.17/docs/assets/copy-demo.png +0 -0
  59. mq_bridge_basic-0.4.17/examples/c-plugin/CMakeLists.txt +10 -0
  60. mq_bridge_basic-0.4.17/examples/c-plugin/README.md +56 -0
  61. mq_bridge_basic-0.4.17/examples/c-plugin/legacy_ledger.c +35 -0
  62. mq_bridge_basic-0.4.17/examples/c-plugin/legacy_ledger.h +14 -0
  63. mq_bridge_basic-0.4.17/examples/c-plugin/legacy_parser.c +42 -0
  64. mq_bridge_basic-0.4.17/examples/c-plugin/legacy_parser.h +26 -0
  65. mq_bridge_basic-0.4.17/examples/c-plugin/minimal.c +36 -0
  66. mq_bridge_basic-0.4.17/examples/c-plugin/plugin.c +166 -0
  67. mq_bridge_basic-0.4.17/examples/ipc_worker_queue.yaml +105 -0
  68. mq_bridge_basic-0.4.17/include/cbindgen.toml +109 -0
  69. mq_bridge_basic-0.4.17/include/mq_bridge_plugin.h +620 -0
  70. mq_bridge_basic-0.4.17/include/mq_bridge_plugin_helpers.h +235 -0
  71. mq_bridge_basic-0.4.17/mq-bridge.schema.json +4712 -0
  72. mq_bridge_basic-0.4.17/mq_bridge/__init__.py +92 -0
  73. mq_bridge_basic-0.4.17/mq_bridge/__init__.pyi +351 -0
  74. mq_bridge_basic-0.4.17/mq_bridge/config.py +180 -0
  75. mq_bridge_basic-0.4.17/mq_bridge/config.pyi +743 -0
  76. mq_bridge_basic-0.4.17/mq_bridge/plugin_packaging.py +90 -0
  77. mq_bridge_basic-0.4.17/mq_bridge/py.typed +1 -0
  78. mq_bridge_basic-0.4.17/package-lock.json +6 -0
  79. mq_bridge_basic-0.4.17/pyproject.toml +63 -0
  80. mq_bridge_basic-0.4.17/python/mq-bridge-py/Cargo.toml +108 -0
  81. mq_bridge_basic-0.4.17/python/mq-bridge-py/LICENSE-APACHE.python +201 -0
  82. mq_bridge_basic-0.4.17/python/mq-bridge-py/LICENSE-MIT.python +21 -0
  83. mq_bridge_basic-0.4.17/python/mq-bridge-py/LICENSE.python +19 -0
  84. mq_bridge_basic-0.4.17/python/mq-bridge-py/README.md +396 -0
  85. mq_bridge_basic-0.4.17/python/mq-bridge-py/THIRD_PARTY_LICENSES.txt +4482 -0
  86. mq_bridge_basic-0.4.17/python/mq-bridge-py/analysis/bench_http_native.py +387 -0
  87. mq_bridge_basic-0.4.17/python/mq-bridge-py/example.py +41 -0
  88. mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/IBM_MQ.md +233 -0
  89. mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/bench_memory.py +198 -0
  90. mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/bench_memory.yaml +17 -0
  91. mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/consume_pull.py +39 -0
  92. mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/dlt_source.py +108 -0
  93. mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/ibm-mq-input.py +67 -0
  94. mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/json_route.py +34 -0
  95. mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/memory.yaml +15 -0
  96. mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/raw_route.py +28 -0
  97. mq_bridge_basic-0.4.17/python/mq-bridge-py/pyproject-basic.toml +62 -0
  98. mq_bridge_basic-0.4.17/python/mq-bridge-py/pyproject-reduced.toml +66 -0
  99. mq_bridge_basic-0.4.17/python/mq-bridge-py/scripts/gen_config_types.py +268 -0
  100. mq_bridge_basic-0.4.17/python/mq-bridge-py/src/lib.rs +3700 -0
  101. mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_config_types.py +50 -0
  102. mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_custom_endpoint.py +444 -0
  103. mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_logging.py +113 -0
  104. mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_packaging.py +49 -0
  105. mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_performance_smoke.py +57 -0
  106. mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_plugin_package.py +32 -0
  107. mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_public_api.py +166 -0
  108. mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_routes.py +334 -0
  109. mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_shutdown.py +85 -0
  110. mq_bridge_basic-0.4.17/python/mq-bridge-py/uv.lock +2418 -0
  111. mq_bridge_basic-0.4.17/python/mq-bridge-py-legacy/README.md +11 -0
  112. mq_bridge_basic-0.4.17/python/mq-bridge-py-legacy/pyproject.toml +26 -0
  113. mq_bridge_basic-0.4.17/scripts/analysis/benches/metadata_bench.rs +50 -0
  114. mq_bridge_basic-0.4.17/scripts/analysis/debug_ibm_mq_tls.rs +100 -0
  115. mq_bridge_basic-0.4.17/scripts/analysis/http/analyze_xctrace_time_profile.py +135 -0
  116. mq_bridge_basic-0.4.17/scripts/analysis/http/http_flamegraph.py +387 -0
  117. mq_bridge_basic-0.4.17/scripts/analysis/http/mq_bridge_http_profile.rs +877 -0
  118. mq_bridge_basic-0.4.17/scripts/analysis/http/run_http_ladder.sh +87 -0
  119. mq_bridge_basic-0.4.17/scripts/ci/format_bench_output.sh +11 -0
  120. mq_bridge_basic-0.4.17/scripts/httparena/README.md +113 -0
  121. mq_bridge_basic-0.4.17/scripts/httparena/frameworks/mq-bridge-py/Dockerfile +32 -0
  122. mq_bridge_basic-0.4.17/scripts/httparena/frameworks/mq-bridge-py/meta.json +36 -0
  123. mq_bridge_basic-0.4.17/scripts/httparena/frameworks/mq-bridge-py/server.py +744 -0
  124. mq_bridge_basic-0.4.17/scripts/httparena/frameworks/mq-bridge-py/templates/fortunes.html +10 -0
  125. mq_bridge_basic-0.4.17/scripts/mqb-agent.py +253 -0
  126. mq_bridge_basic-0.4.17/scripts/sync-version.mjs +193 -0
  127. mq_bridge_basic-0.4.17/scripts/techempower/Python/mq-bridge-py/README.md +58 -0
  128. mq_bridge_basic-0.4.17/scripts/techempower/Python/mq-bridge-py/benchmark_config.json +26 -0
  129. mq_bridge_basic-0.4.17/scripts/techempower/Python/mq-bridge-py/mq-bridge-py.dockerfile +31 -0
  130. mq_bridge_basic-0.4.17/scripts/techempower/Python/mq-bridge-py/server.py +76 -0
  131. mq_bridge_basic-0.4.17/scripts/techempower/README.md +194 -0
  132. mq_bridge_basic-0.4.17/scripts/techempower/postgres.yml +19 -0
  133. mq_bridge_basic-0.4.17/scripts/techempower/seed.sql +10 -0
  134. mq_bridge_basic-0.4.17/scripts/techempower/verify.sh +102 -0
  135. mq_bridge_basic-0.4.17/scripts/the-benchmarker/README.md +59 -0
  136. mq_bridge_basic-0.4.17/scripts/the-benchmarker/python/mq-bridge-py/config.yaml +34 -0
  137. mq_bridge_basic-0.4.17/scripts/the-benchmarker/python/mq-bridge-py/pyproject.toml +12 -0
  138. mq_bridge_basic-0.4.17/scripts/the-benchmarker/python/mq-bridge-py/server.py +73 -0
  139. mq_bridge_basic-0.4.17/src/canonical_message.rs +940 -0
  140. mq_bridge_basic-0.4.17/src/checkpoint.rs +964 -0
  141. mq_bridge_basic-0.4.17/src/command_handler.rs +527 -0
  142. mq_bridge_basic-0.4.17/src/config_file.rs +306 -0
  143. mq_bridge_basic-0.4.17/src/endpoints/amqp.rs +1108 -0
  144. mq_bridge_basic-0.4.17/src/endpoints/aws.rs +652 -0
  145. mq_bridge_basic-0.4.17/src/endpoints/clickhouse.rs +1183 -0
  146. mq_bridge_basic-0.4.17/src/endpoints/dir_spool/mod.rs +1595 -0
  147. mq_bridge_basic-0.4.17/src/endpoints/dir_spool/tests.rs +1806 -0
  148. mq_bridge_basic-0.4.17/src/endpoints/file/mod.rs +3761 -0
  149. mq_bridge_basic-0.4.17/src/endpoints/file/tests.rs +3639 -0
  150. mq_bridge_basic-0.4.17/src/endpoints/grpc/consumer.rs +322 -0
  151. mq_bridge_basic-0.4.17/src/endpoints/grpc/dynamic.rs +865 -0
  152. mq_bridge_basic-0.4.17/src/endpoints/grpc/mod.rs +249 -0
  153. mq_bridge_basic-0.4.17/src/endpoints/grpc/proto/mqbridge/bridge.proto +59 -0
  154. mq_bridge_basic-0.4.17/src/endpoints/grpc/publisher.rs +254 -0
  155. mq_bridge_basic-0.4.17/src/endpoints/grpc/server.rs +1180 -0
  156. mq_bridge_basic-0.4.17/src/endpoints/grpc/tests.rs +1678 -0
  157. mq_bridge_basic-0.4.17/src/endpoints/http/mod.rs +2383 -0
  158. mq_bridge_basic-0.4.17/src/endpoints/http/publisher.rs +578 -0
  159. mq_bridge_basic-0.4.17/src/endpoints/http/stream.rs +1059 -0
  160. mq_bridge_basic-0.4.17/src/endpoints/http/tests.rs +2200 -0
  161. mq_bridge_basic-0.4.17/src/endpoints/ibm_mq.rs +976 -0
  162. mq_bridge_basic-0.4.17/src/endpoints/kafka.rs +2129 -0
  163. mq_bridge_basic-0.4.17/src/endpoints/memory/endpoint.rs +1900 -0
  164. mq_bridge_basic-0.4.17/src/endpoints/memory/framed.rs +355 -0
  165. mq_bridge_basic-0.4.17/src/endpoints/memory/ipc_unix.rs +408 -0
  166. mq_bridge_basic-0.4.17/src/endpoints/memory/ipc_windows.rs +351 -0
  167. mq_bridge_basic-0.4.17/src/endpoints/memory/memory_transport.rs +140 -0
  168. mq_bridge_basic-0.4.17/src/endpoints/memory/mod.rs +21 -0
  169. mq_bridge_basic-0.4.17/src/endpoints/memory/transport.rs +264 -0
  170. mq_bridge_basic-0.4.17/src/endpoints/mod.rs +3595 -0
  171. mq_bridge_basic-0.4.17/src/endpoints/mongodb/aggregate.rs +117 -0
  172. mq_bridge_basic-0.4.17/src/endpoints/mongodb/consumer.rs +588 -0
  173. mq_bridge_basic-0.4.17/src/endpoints/mongodb/dedup.rs +327 -0
  174. mq_bridge_basic-0.4.17/src/endpoints/mongodb/mod.rs +464 -0
  175. mq_bridge_basic-0.4.17/src/endpoints/mongodb/publisher.rs +1206 -0
  176. mq_bridge_basic-0.4.17/src/endpoints/mongodb/readers.rs +1044 -0
  177. mq_bridge_basic-0.4.17/src/endpoints/mongodb/tests.rs +911 -0
  178. mq_bridge_basic-0.4.17/src/endpoints/mqtt.rs +1311 -0
  179. mq_bridge_basic-0.4.17/src/endpoints/nats.rs +1123 -0
  180. mq_bridge_basic-0.4.17/src/endpoints/object_store.rs +2613 -0
  181. mq_bridge_basic-0.4.17/src/endpoints/poll.rs +64 -0
  182. mq_bridge_basic-0.4.17/src/endpoints/postgres/VENDORED.md +81 -0
  183. mq_bridge_basic-0.4.17/src/endpoints/postgres/mod.rs +802 -0
  184. mq_bridge_basic-0.4.17/src/endpoints/postgres/pgoutput/decoder.rs +772 -0
  185. mq_bridge_basic-0.4.17/src/endpoints/postgres/pgoutput/messages.rs +246 -0
  186. mq_bridge_basic-0.4.17/src/endpoints/postgres/pgoutput/mod.rs +107 -0
  187. mq_bridge_basic-0.4.17/src/endpoints/postgres/pgoutput/registry.rs +123 -0
  188. mq_bridge_basic-0.4.17/src/endpoints/postgres/pgoutput/values.rs +516 -0
  189. mq_bridge_basic-0.4.17/src/endpoints/postgres/replication.rs +602 -0
  190. mq_bridge_basic-0.4.17/src/endpoints/postgres/state.rs +68 -0
  191. mq_bridge_basic-0.4.17/src/endpoints/redis_streams.rs +769 -0
  192. mq_bridge_basic-0.4.17/src/endpoints/sled.rs +525 -0
  193. mq_bridge_basic-0.4.17/src/endpoints/sqlx/aggregate.rs +122 -0
  194. mq_bridge_basic-0.4.17/src/endpoints/sqlx/dedup.rs +535 -0
  195. mq_bridge_basic-0.4.17/src/endpoints/sqlx/mod.rs +3092 -0
  196. mq_bridge_basic-0.4.17/src/endpoints/sqlx/tests.rs +1984 -0
  197. mq_bridge_basic-0.4.17/src/endpoints/structural/fanout.rs +615 -0
  198. mq_bridge_basic-0.4.17/src/endpoints/structural/mod.rs +22 -0
  199. mq_bridge_basic-0.4.17/src/endpoints/structural/null.rs +55 -0
  200. mq_bridge_basic-0.4.17/src/endpoints/structural/reader.rs +395 -0
  201. mq_bridge_basic-0.4.17/src/endpoints/structural/request.rs +641 -0
  202. mq_bridge_basic-0.4.17/src/endpoints/structural/response.rs +74 -0
  203. mq_bridge_basic-0.4.17/src/endpoints/structural/sequence.rs +516 -0
  204. mq_bridge_basic-0.4.17/src/endpoints/structural/static_endpoint.rs +350 -0
  205. mq_bridge_basic-0.4.17/src/endpoints/structural/stream_buffer.rs +760 -0
  206. mq_bridge_basic-0.4.17/src/endpoints/structural/switch.rs +645 -0
  207. mq_bridge_basic-0.4.17/src/endpoints/websocket.rs +837 -0
  208. mq_bridge_basic-0.4.17/src/endpoints/zeromq/codec.rs +195 -0
  209. mq_bridge_basic-0.4.17/src/endpoints/zeromq/mod.rs +106 -0
  210. mq_bridge_basic-0.4.17/src/endpoints/zeromq/omq.rs +705 -0
  211. mq_bridge_basic-0.4.17/src/endpoints/zeromq/zmq.rs +870 -0
  212. mq_bridge_basic-0.4.17/src/errors.rs +200 -0
  213. mq_bridge_basic-0.4.17/src/event_handler.rs +167 -0
  214. mq_bridge_basic-0.4.17/src/event_store.rs +842 -0
  215. mq_bridge_basic-0.4.17/src/extensions.rs +219 -0
  216. mq_bridge_basic-0.4.17/src/lib.rs +214 -0
  217. mq_bridge_basic-0.4.17/src/middleware/aggregate/mod.rs +1611 -0
  218. mq_bridge_basic-0.4.17/src/middleware/aggregate/states.rs +98 -0
  219. mq_bridge_basic-0.4.17/src/middleware/aggregate/store.rs +124 -0
  220. mq_bridge_basic-0.4.17/src/middleware/aggregate/tests.rs +1161 -0
  221. mq_bridge_basic-0.4.17/src/middleware/aggregate/writer.rs +210 -0
  222. mq_bridge_basic-0.4.17/src/middleware/buffer.rs +845 -0
  223. mq_bridge_basic-0.4.17/src/middleware/compression.rs +318 -0
  224. mq_bridge_basic-0.4.17/src/middleware/cookie_jar.rs +659 -0
  225. mq_bridge_basic-0.4.17/src/middleware/deduplication/memory.rs +519 -0
  226. mq_bridge_basic-0.4.17/src/middleware/deduplication.rs +1764 -0
  227. mq_bridge_basic-0.4.17/src/middleware/deferred_commit.rs +215 -0
  228. mq_bridge_basic-0.4.17/src/middleware/delay.rs +144 -0
  229. mq_bridge_basic-0.4.17/src/middleware/dlq.rs +728 -0
  230. mq_bridge_basic-0.4.17/src/middleware/encryption.rs +451 -0
  231. mq_bridge_basic-0.4.17/src/middleware/filter.rs +1926 -0
  232. mq_bridge_basic-0.4.17/src/middleware/id.rs +320 -0
  233. mq_bridge_basic-0.4.17/src/middleware/limiter.rs +308 -0
  234. mq_bridge_basic-0.4.17/src/middleware/lookup.rs +865 -0
  235. mq_bridge_basic-0.4.17/src/middleware/metrics.rs +186 -0
  236. mq_bridge_basic-0.4.17/src/middleware/mod.rs +330 -0
  237. mq_bridge_basic-0.4.17/src/middleware/otel.rs +319 -0
  238. mq_bridge_basic-0.4.17/src/middleware/pack.rs +973 -0
  239. mq_bridge_basic-0.4.17/src/middleware/random_panic.rs +218 -0
  240. mq_bridge_basic-0.4.17/src/middleware/raw_json.rs +31 -0
  241. mq_bridge_basic-0.4.17/src/middleware/retry.rs +369 -0
  242. mq_bridge_basic-0.4.17/src/middleware/timeout.rs +117 -0
  243. mq_bridge_basic-0.4.17/src/middleware/transform/coerce.rs +171 -0
  244. mq_bridge_basic-0.4.17/src/middleware/transform/compiled.rs +731 -0
  245. mq_bridge_basic-0.4.17/src/middleware/transform/error.rs +72 -0
  246. mq_bridge_basic-0.4.17/src/middleware/transform/mod.rs +368 -0
  247. mq_bridge_basic-0.4.17/src/middleware/transform/path.rs +158 -0
  248. mq_bridge_basic-0.4.17/src/middleware/transform/schema.rs +411 -0
  249. mq_bridge_basic-0.4.17/src/middleware/transform/tests.rs +2006 -0
  250. mq_bridge_basic-0.4.17/src/middleware/weak_join.rs +885 -0
  251. mq_bridge_basic-0.4.17/src/models/builders.rs +1046 -0
  252. mq_bridge_basic-0.4.17/src/models/defaults.rs +274 -0
  253. mq_bridge_basic-0.4.17/src/models/secrets.rs +552 -0
  254. mq_bridge_basic-0.4.17/src/models/serde_support.rs +666 -0
  255. mq_bridge_basic-0.4.17/src/models/tests.rs +932 -0
  256. mq_bridge_basic-0.4.17/src/models.rs +2878 -0
  257. mq_bridge_basic-0.4.17/src/outcomes.rs +146 -0
  258. mq_bridge_basic-0.4.17/src/plugin/completion.rs +182 -0
  259. mq_bridge_basic-0.4.17/src/plugin/conformance.rs +323 -0
  260. mq_bridge_basic-0.4.17/src/plugin/crash.rs +518 -0
  261. mq_bridge_basic-0.4.17/src/plugin/discovery.rs +621 -0
  262. mq_bridge_basic-0.4.17/src/plugin/endpoint.rs +1217 -0
  263. mq_bridge_basic-0.4.17/src/plugin/forward.rs +236 -0
  264. mq_bridge_basic-0.4.17/src/plugin/host.rs +104 -0
  265. mq_bridge_basic-0.4.17/src/plugin/message.rs +156 -0
  266. mq_bridge_basic-0.4.17/src/plugin/middleware.rs +374 -0
  267. mq_bridge_basic-0.4.17/src/plugin/mod.rs +542 -0
  268. mq_bridge_basic-0.4.17/src/plugin/sdk.rs +1890 -0
  269. mq_bridge_basic-0.4.17/src/plugin/test_support.rs +199 -0
  270. mq_bridge_basic-0.4.17/src/publisher.rs +222 -0
  271. mq_bridge_basic-0.4.17/src/response.rs +259 -0
  272. mq_bridge_basic-0.4.17/src/route.rs +6325 -0
  273. mq_bridge_basic-0.4.17/src/shutdown.rs +198 -0
  274. mq_bridge_basic-0.4.17/src/support/base64_engine.rs +101 -0
  275. mq_bridge_basic-0.4.17/src/support/compression.rs +360 -0
  276. mq_bridge_basic-0.4.17/src/support/compression_pool.rs +236 -0
  277. mq_bridge_basic-0.4.17/src/support/config_schema.rs +897 -0
  278. mq_bridge_basic-0.4.17/src/support/connection_registry.rs +293 -0
  279. mq_bridge_basic-0.4.17/src/support/crypto.rs +572 -0
  280. mq_bridge_basic-0.4.17/src/support/crypto_envelope.rs +21 -0
  281. mq_bridge_basic-0.4.17/src/support/interpolation.rs +956 -0
  282. mq_bridge_basic-0.4.17/src/support/lookup_batch.rs +396 -0
  283. mq_bridge_basic-0.4.17/src/support/mod.rs +32 -0
  284. mq_bridge_basic-0.4.17/src/support/pack.rs +740 -0
  285. mq_bridge_basic-0.4.17/src/support/parallel.rs +213 -0
  286. mq_bridge_basic-0.4.17/src/support/parquet.rs +261 -0
  287. mq_bridge_basic-0.4.17/src/support/plugin_abi.rs +1395 -0
  288. mq_bridge_basic-0.4.17/src/support/source_ranges.rs +848 -0
  289. mq_bridge_basic-0.4.17/src/support/stream_batch.rs +127 -0
  290. mq_bridge_basic-0.4.17/src/test_utils.rs +2237 -0
  291. mq_bridge_basic-0.4.17/src/traits.rs +1107 -0
  292. mq_bridge_basic-0.4.17/src/type_handler.rs +613 -0
  293. mq_bridge_basic-0.4.17/tests/README.md +29 -0
  294. mq_bridge_basic-0.4.17/tests/armature_integration.rs +128 -0
  295. mq_bridge_basic-0.4.17/tests/compat/python/bridge_client.py +68 -0
  296. mq_bridge_basic-0.4.17/tests/dedup_store_bench.rs +95 -0
  297. mq_bridge_basic-0.4.17/tests/delivery_guarantee_test.rs +163 -0
  298. mq_bridge_basic-0.4.17/tests/integration/amqp.rs +461 -0
  299. mq_bridge_basic-0.4.17/tests/integration/aws.rs +236 -0
  300. mq_bridge_basic-0.4.17/tests/integration/clickhouse.rs +245 -0
  301. mq_bridge_basic-0.4.17/tests/integration/config.toml +0 -0
  302. mq_bridge_basic-0.4.17/tests/integration/docker-compose/amqp.yml +12 -0
  303. mq_bridge_basic-0.4.17/tests/integration/docker-compose/aws.yml +18 -0
  304. mq_bridge_basic-0.4.17/tests/integration/docker-compose/clickhouse.yml +21 -0
  305. mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm-mq-certs/client.crl +0 -0
  306. mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm-mq-certs/client.kdb +0 -0
  307. mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm-mq-certs/client.p12 +0 -0
  308. mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm-mq-certs/client.rdb +0 -0
  309. mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm-mq-certs/client.sth +0 -0
  310. mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm_mq.yml +20 -0
  311. mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm_mq_tls.yml +22 -0
  312. mq_bridge_basic-0.4.17/tests/integration/docker-compose/kafka-tls.yml +37 -0
  313. mq_bridge_basic-0.4.17/tests/integration/docker-compose/kafka.yml +32 -0
  314. mq_bridge_basic-0.4.17/tests/integration/docker-compose/mariadb.yml +17 -0
  315. mq_bridge_basic-0.4.17/tests/integration/docker-compose/mongodb-replica.yml +15 -0
  316. mq_bridge_basic-0.4.17/tests/integration/docker-compose/mongodb-tls.yml +15 -0
  317. mq_bridge_basic-0.4.17/tests/integration/docker-compose/mongodb.yml +13 -0
  318. mq_bridge_basic-0.4.17/tests/integration/docker-compose/mosquitto.conf +7 -0
  319. mq_bridge_basic-0.4.17/tests/integration/docker-compose/mosquitto_performance.conf +12 -0
  320. mq_bridge_basic-0.4.17/tests/integration/docker-compose/mosquitto_persistence.conf +20 -0
  321. mq_bridge_basic-0.4.17/tests/integration/docker-compose/mq_init.mqsc +15 -0
  322. mq_bridge_basic-0.4.17/tests/integration/docker-compose/mq_init_tls.mqsc +3 -0
  323. mq_bridge_basic-0.4.17/tests/integration/docker-compose/mqtt.yml +17 -0
  324. mq_bridge_basic-0.4.17/tests/integration/docker-compose/mqtt_performance.yml +13 -0
  325. mq_bridge_basic-0.4.17/tests/integration/docker-compose/mysql.yml +16 -0
  326. mq_bridge_basic-0.4.17/tests/integration/docker-compose/nats.yml +13 -0
  327. mq_bridge_basic-0.4.17/tests/integration/docker-compose/object_store.yml +15 -0
  328. mq_bridge_basic-0.4.17/tests/integration/docker-compose/postgres.yml +15 -0
  329. mq_bridge_basic-0.4.17/tests/integration/docker-compose/postgres_cdc.yml +29 -0
  330. mq_bridge_basic-0.4.17/tests/integration/docker-compose/redis.yml +11 -0
  331. mq_bridge_basic-0.4.17/tests/integration/file.rs +45 -0
  332. mq_bridge_basic-0.4.17/tests/integration/grpc.rs +348 -0
  333. mq_bridge_basic-0.4.17/tests/integration/grpc_tls.rs +128 -0
  334. mq_bridge_basic-0.4.17/tests/integration/http.rs +323 -0
  335. mq_bridge_basic-0.4.17/tests/integration/http_tls.rs +157 -0
  336. mq_bridge_basic-0.4.17/tests/integration/ibm_mq.rs +351 -0
  337. mq_bridge_basic-0.4.17/tests/integration/ibm_mq_tls.rs +55 -0
  338. mq_bridge_basic-0.4.17/tests/integration/ipc.rs +200 -0
  339. mq_bridge_basic-0.4.17/tests/integration/kafka.rs +392 -0
  340. mq_bridge_basic-0.4.17/tests/integration/kafka_tls.rs +40 -0
  341. mq_bridge_basic-0.4.17/tests/integration/logic_test.rs +108 -0
  342. mq_bridge_basic-0.4.17/tests/integration/mariadb.rs +218 -0
  343. mq_bridge_basic-0.4.17/tests/integration/memory.rs +113 -0
  344. mq_bridge_basic-0.4.17/tests/integration/mod.rs +87 -0
  345. mq_bridge_basic-0.4.17/tests/integration/mongodb.rs +899 -0
  346. mq_bridge_basic-0.4.17/tests/integration/mongodb_raw.rs +62 -0
  347. mq_bridge_basic-0.4.17/tests/integration/mongodb_tls.rs +41 -0
  348. mq_bridge_basic-0.4.17/tests/integration/mqtt.rs +233 -0
  349. mq_bridge_basic-0.4.17/tests/integration/mysql.rs +334 -0
  350. mq_bridge_basic-0.4.17/tests/integration/nats.rs +341 -0
  351. mq_bridge_basic-0.4.17/tests/integration/object_store.rs +267 -0
  352. mq_bridge_basic-0.4.17/tests/integration/performance_static.rs +67 -0
  353. mq_bridge_basic-0.4.17/tests/integration/postgres.rs +376 -0
  354. mq_bridge_basic-0.4.17/tests/integration/postgres_cdc.rs +674 -0
  355. mq_bridge_basic-0.4.17/tests/integration/redis_streams.rs +434 -0
  356. mq_bridge_basic-0.4.17/tests/integration/route.rs +1634 -0
  357. mq_bridge_basic-0.4.17/tests/integration/scripts/gen_certs.sh +183 -0
  358. mq_bridge_basic-0.4.17/tests/integration/sqlite.rs +173 -0
  359. mq_bridge_basic-0.4.17/tests/integration/tls_helpers.rs +143 -0
  360. mq_bridge_basic-0.4.17/tests/integration/websocket.rs +68 -0
  361. mq_bridge_basic-0.4.17/tests/integration/zeromq.rs +39 -0
  362. mq_bridge_basic-0.4.17/tests/integration_test.rs +752 -0
  363. mq_bridge_basic-0.4.17/tests/memory_leak_test.rs +134 -0
  364. mq_bridge_basic-0.4.17/tests/otel_test.rs +97 -0
  365. mq_bridge_basic-0.4.17/tests/ref_test.rs +235 -0
  366. mq_bridge_basic-0.4.17/tests/reference_docs_test.rs +373 -0
  367. mq_bridge_basic-0.4.17/tests/sqlite_test.rs +20 -0
  368. mq_bridge_basic-0.4.17/tests/tls_example.rs +35 -0
  369. mq_bridge_basic-0.4.17/tests/unit_tests.md +214 -0
  370. mq_bridge_basic-0.4.17/tests/websocket_test.rs +400 -0
@@ -0,0 +1,25 @@
1
+ # Workspace-wide Cargo config. Cargo discovers this file from the *current
2
+ # directory* upward, not from the manifest, so it is what applies to every
3
+ # build invoked from the repository root — CI, Docker, and plain local
4
+ # `cargo build`. The app keeps its own path-scoped config for the settings
5
+ # that must only affect app-cwd builds (see apps/mq-bridge-app/.cargo/config.toml).
6
+
7
+ [env]
8
+ # librdkafka's CMakeLists declares cmake_minimum_required(3.2), which cmake 4
9
+ # refuses. rdkafka-sys is reachable from the engine's kafka feature and from
10
+ # every app build, so this belongs at the root.
11
+ CMAKE_ARGS = "-DCMAKE_POLICY_VERSION_MINIMUM=3.5"
12
+ # Bundled SQLite (sqlx) with `exp`, `ln`, `pow` etc., e.g. for decaying averages in a lookup.
13
+ LIBSQLITE3_FLAGS = "SQLITE_ENABLE_MATH_FUNCTIONS"
14
+
15
+ # Pinned explicitly so a --manifest-path build of the app workspace still writes
16
+ # here instead of defaulting to apps/mq-bridge-app/target. One target dir for the
17
+ # engine, the app, tauri and maturin.
18
+ [build]
19
+ target-dir = "target"
20
+
21
+ # One standard dev feature set: every distinct `--features` list builds its own
22
+ # mq_bridge rlib and incremental cache (0.5-1.8 GB each).
23
+ [alias]
24
+ cf = "check --all-targets --features full,test-utils"
25
+ tf = "test --features full,test-utils"
@@ -0,0 +1,5 @@
1
+ # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
2
+ reviews:
3
+ pre_merge_checks:
4
+ docstrings:
5
+ mode: "off"
@@ -0,0 +1,18 @@
1
+ .git
2
+ .serena
3
+ .tokensave
4
+ logs
5
+ target
6
+ **/target
7
+ **/node_modules
8
+ apps/mq-bridge-app/dev/docs/book
9
+
10
+ # Local build output
11
+ **/.venv
12
+ **/__pycache__
13
+ **/*.so
14
+ **/*.node
15
+ **/*.whl
16
+ python/mq-bridge-py/dist
17
+ apps/mq-bridge-app/test-results
18
+ apps/mq-bridge-app/playwright-report
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: Bug Report
3
+ about: Create a report to help us improve
4
+ title: '[BUG] '
5
+ labels: bug
6
+ assignees: ''
7
+ ---
8
+
9
+ ## Description
10
+
11
+ <!-- A clear and concise description of what the bug is -->
12
+
13
+ ## Steps to Reproduce
14
+
15
+ 1.
16
+ 2.
17
+ 3.
18
+
19
+ ## Expected Behavior
20
+
21
+ <!-- What you expected to happen -->
22
+
23
+ ## Actual Behavior
24
+
25
+ <!-- What actually happened -->
26
+
27
+ ## Environment
28
+
29
+ - OS: [e.g., Ubuntu 22.04, macOS 13, Windows 11]
30
+ - Rust version: [e.g., 1.75.0]
31
+ - mq-bridge version: [e.g., 0.1.2]
32
+ - Features enabled: [e.g., kafka, nats, full]
33
+
34
+ ## Configuration
35
+
36
+ <!-- If applicable, paste your configuration (remove sensitive information) -->
37
+
38
+ ```yaml
39
+ # Your config here
40
+ ```
41
+
42
+ ## Logs/Error Messages
43
+
44
+ ```
45
+ <!-- Paste relevant logs or error messages here -->
46
+ ```
47
+
48
+ ## Additional Context
49
+
50
+ <!-- Add any other context about the problem here -->
51
+
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: Feature Request
3
+ about: Suggest an idea for this project
4
+ title: '[FEATURE] '
5
+ labels: enhancement
6
+ assignees: ''
7
+ ---
8
+
9
+ ## Description
10
+
11
+ <!-- A clear and concise description of the feature you'd like to see -->
12
+
13
+ ## Motivation
14
+
15
+ <!-- Why is this feature needed? What problem does it solve? -->
16
+
17
+ ## Proposed Solution
18
+
19
+ <!-- Describe how you envision this feature working -->
20
+
21
+ ## Alternatives Considered
22
+
23
+ <!-- Describe any alternative solutions or features you've considered -->
24
+
25
+ ## Use Cases
26
+
27
+ <!-- Provide examples of how this feature would be used -->
28
+
29
+ 1.
30
+ 2.
31
+ 3.
32
+
33
+ ## Additional Context
34
+
35
+ <!-- Add any other context, mockups, or examples about the feature request here -->
36
+
@@ -0,0 +1,42 @@
1
+ ## Description
2
+
3
+ <!-- Describe your changes in detail -->
4
+
5
+ ## Type of Change
6
+
7
+ - [ ] Bug fix (non-breaking change which fixes an issue)
8
+ - [ ] New feature (non-breaking change which adds functionality)
9
+ - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
10
+ - [ ] Documentation update
11
+ - [ ] Performance improvement
12
+ - [ ] Code refactoring
13
+
14
+ ## Testing
15
+
16
+ <!-- Describe the tests you ran and how to verify your changes -->
17
+
18
+ - [ ] Unit tests pass
19
+ - [ ] Integration tests pass (if applicable)
20
+ - [ ] Manual testing completed
21
+
22
+ ## Checklist
23
+
24
+ - [ ] Code follows the project's style guidelines
25
+ - [ ] Self-review completed
26
+ - [ ] Comments added for complex code
27
+ - [ ] Documentation updated (if needed)
28
+ - [ ] No new warnings generated
29
+ - [ ] Tests added/updated for new functionality
30
+ - [ ] All tests pass locally
31
+
32
+ ## Related Issues
33
+
34
+ <!-- Link to related issues using #issue_number -->
35
+
36
+ Fixes #
37
+ Related to #
38
+
39
+ ## Additional Notes
40
+
41
+ <!-- Any additional information that reviewers should know -->
42
+
@@ -0,0 +1,59 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "cargo" # See documentation for possible values
9
+ directory: "/" # Location of package manifests
10
+ target-branch: "dev"
11
+ schedule:
12
+ interval: "monthly"
13
+ groups:
14
+ minor-and-patch:
15
+ applies-to: version-updates
16
+ patterns:
17
+ - "*"
18
+ update-types:
19
+ - "minor"
20
+ - "patch"
21
+
22
+ # The app workspace has its own Cargo.lock, so the "/" cargo entry above does
23
+ # not reach it. Without this, app dependencies would never be updated.
24
+ - package-ecosystem: "cargo"
25
+ directory: "/apps/mq-bridge-app"
26
+ target-branch: "dev"
27
+ schedule:
28
+ interval: "weekly"
29
+ groups:
30
+ app-minor-and-patch:
31
+ applies-to: version-updates
32
+ patterns:
33
+ - "*"
34
+ update-types:
35
+ - "minor"
36
+ - "patch"
37
+
38
+ - package-ecosystem: "npm"
39
+ directory: "/apps/mq-bridge-app"
40
+ target-branch: "dev"
41
+ schedule:
42
+ interval: "weekly"
43
+ groups:
44
+ npm-minor-patch:
45
+ applies-to: version-updates
46
+ update-types:
47
+ - "minor"
48
+ - "patch"
49
+
50
+ - package-ecosystem: "github-actions"
51
+ directory: "/"
52
+ target-branch: "dev"
53
+ schedule:
54
+ interval: "weekly"
55
+ groups:
56
+ github-actions:
57
+ applies-to: version-updates
58
+ patterns:
59
+ - "*"
@@ -0,0 +1,321 @@
1
+ name: App CI
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main, dev]
6
+ paths:
7
+ - "Cargo.toml"
8
+ - "Cargo.lock"
9
+ - "src/**"
10
+ - "apps/mq-bridge-app/**"
11
+ - ".github/workflows/app.yml"
12
+ # Called by release.yml so a tag runs the same app gate a PR does, rather
13
+ # than a second copy of it that can drift.
14
+ workflow_call:
15
+ workflow_dispatch:
16
+ inputs:
17
+ update_visual_baselines:
18
+ description: "Re-render the Linux screenshot baselines and upload them as an artifact"
19
+ type: boolean
20
+ default: false
21
+
22
+ permissions:
23
+ contents: read
24
+
25
+ concurrency:
26
+ group: ${{ github.workflow }}-${{ github.ref }}
27
+ cancel-in-progress: true
28
+
29
+ jobs:
30
+ rust:
31
+ name: App Rust
32
+ runs-on: ubuntu-latest
33
+ steps:
34
+ - uses: actions/checkout@v7
35
+
36
+ - name: Install Rust toolchain
37
+ uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8
38
+ with:
39
+ components: clippy
40
+
41
+ - name: Cache cargo build
42
+ uses: Swatinem/rust-cache@v2
43
+ with:
44
+ # One cache for every app job: rust, ui and both integration
45
+ # shards compile the same crates at the same features.
46
+ shared-key: app
47
+ # rust-cache resolves its workspace at the repo root, so by default it
48
+ # purges every crate whose manifest lives under it -- mq-bridge itself
49
+ # included. Without this each app job recompiles the engine from
50
+ # scratch; only registry deps would survive.
51
+ cache-workspace-crates: true
52
+
53
+ - name: Install system dependencies
54
+ run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
55
+
56
+ - name: Test desktop crate
57
+ working-directory: apps/mq-bridge-app
58
+ run: cargo test -p mq-bridge-app-desktop --lib
59
+
60
+ - name: Check app crates
61
+ working-directory: apps/mq-bridge-app
62
+ run: cargo check -p mq-bridge-app-core -p mq-bridge-app --all-targets
63
+
64
+ - name: Lint app crates
65
+ working-directory: apps/mq-bridge-app
66
+ run: cargo clippy -p mq-bridge-app-core -p mq-bridge-app --all-targets -- -D warnings
67
+
68
+ - name: Test app crates
69
+ working-directory: apps/mq-bridge-app
70
+ run: cargo test -p mq-bridge-app-core -p mq-bridge-app --lib --bins
71
+
72
+ # The app resolves its own Cargo.lock, so the engine's supply-chain job in
73
+ # ci.yml does not cover it. Same policy, plus the Tauri-tree exceptions.
74
+ - name: Licenses / bans / sources
75
+ uses: EmbarkStudios/cargo-deny-action@v2
76
+ with:
77
+ manifest-path: apps/mq-bridge-app/Cargo.toml
78
+ command: check bans licenses sources
79
+
80
+ # Informational, same policy as the engine's supply-chain job in ci.yml:
81
+ # the app resolves its own Cargo.lock, so deny.toml's advisory ignores are
82
+ # only actually exercised if this runs.
83
+ - name: Advisories (informational)
84
+ continue-on-error: true
85
+ uses: EmbarkStudios/cargo-deny-action@v2
86
+ with:
87
+ manifest-path: apps/mq-bridge-app/Cargo.toml
88
+ command: check advisories
89
+
90
+ ui:
91
+ name: App UI
92
+ runs-on: ubuntu-latest
93
+ steps:
94
+ - uses: actions/checkout@v7
95
+
96
+ - name: Install Rust toolchain
97
+ uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8
98
+
99
+ - name: Cache cargo build
100
+ uses: Swatinem/rust-cache@v2
101
+ with:
102
+ # One cache for every app job: rust, ui and both integration
103
+ # shards compile the same crates at the same features.
104
+ shared-key: app
105
+ # rust-cache resolves its workspace at the repo root, so by default it
106
+ # purges every crate whose manifest lives under it -- mq-bridge itself
107
+ # included. Without this each app job recompiles the engine from
108
+ # scratch; only registry deps would survive.
109
+ cache-workspace-crates: true
110
+
111
+ - name: Setup Node.js
112
+ uses: actions/setup-node@v7
113
+ with:
114
+ node-version: lts/*
115
+ cache: npm
116
+ cache-dependency-path: apps/mq-bridge-app/package-lock.json
117
+
118
+ - name: Install system dependencies
119
+ run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler
120
+
121
+ - name: Install frontend dependencies
122
+ working-directory: apps/mq-bridge-app
123
+ run: npm ci
124
+
125
+ - name: Run frontend unit tests
126
+ working-directory: apps/mq-bridge-app
127
+ run: npm run test:unit
128
+
129
+ - name: Install Playwright browsers
130
+ working-directory: apps/mq-bridge-app
131
+ # firefox and webkit run only the cross-browser specs (see
132
+ # playwright.config.js), which is where engine-specific form-control
133
+ # behaviour has bitten before.
134
+ run: npx playwright install --with-deps chromium firefox webkit
135
+
136
+ - name: Build app binary for UI tests
137
+ working-directory: apps/mq-bridge-app
138
+ run: cargo build -p mq-bridge-app --bin mq-bridge-app
139
+
140
+ - name: Run frontend UI tests
141
+ working-directory: apps/mq-bridge-app
142
+ run: npm run test:ui
143
+
144
+ # The screenshot suite skips itself while this platform has no committed
145
+ # baseline. Run this workflow manually with update_visual_baselines=true to
146
+ # render them here, then review and commit the artifact.
147
+ - name: Re-render visual baselines
148
+ if: inputs.update_visual_baselines
149
+ working-directory: apps/mq-bridge-app
150
+ run: npm run build:ui && npx playwright test ui-visual.spec.js --update-snapshots=all || true
151
+
152
+ - name: Upload visual baselines
153
+ if: inputs.update_visual_baselines
154
+ uses: actions/upload-artifact@v7
155
+ with:
156
+ name: visual-baselines-linux
157
+ path: apps/mq-bridge-app/tests/playwright/ui-visual.spec.js-snapshots/
158
+ if-no-files-found: warn
159
+
160
+ - name: Upload Playwright test artifacts
161
+ if: failure()
162
+ uses: actions/upload-artifact@v7
163
+ with:
164
+ name: playwright-test-results
165
+ path: |
166
+ apps/mq-bridge-app/test-results/
167
+ apps/mq-bridge-app/playwright-report/
168
+ if-no-files-found: ignore
169
+
170
+ integration:
171
+ name: App integration (${{ matrix.target }})
172
+ runs-on: ubuntu-latest
173
+ strategy:
174
+ fail-fast: false
175
+ matrix:
176
+ target: [cli_copy_test, web_ui_test]
177
+ steps:
178
+ - uses: actions/checkout@v7
179
+
180
+ - name: Install Rust toolchain
181
+ uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8
182
+
183
+ - name: Cache cargo build
184
+ uses: Swatinem/rust-cache@v2
185
+ with:
186
+ # One cache for every app job: rust, ui and both integration
187
+ # shards compile the same crates at the same features.
188
+ shared-key: app
189
+ # rust-cache resolves its workspace at the repo root, so by default it
190
+ # purges every crate whose manifest lives under it -- mq-bridge itself
191
+ # included. Without this each app job recompiles the engine from
192
+ # scratch; only registry deps would survive.
193
+ cache-workspace-crates: true
194
+
195
+ - name: Install system dependencies
196
+ run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler
197
+
198
+ - name: Run integration suite
199
+ working-directory: apps/mq-bridge-app
200
+ run: cargo test -p mq-bridge-app --test ${{ matrix.target }}
201
+
202
+ # Compile the docker suite ONCE. Nine runners each rebuilding the engine cost
203
+ # ~25 runner-minutes for ~3 minutes of tests, and held slots the rest of the
204
+ # matrix was queuing for.
205
+ docker-build:
206
+ name: App docker — Build
207
+ runs-on: ubuntu-latest
208
+ steps:
209
+ - uses: actions/checkout@v7
210
+
211
+ - name: Install Rust toolchain
212
+ uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8
213
+
214
+ - name: Cache cargo build
215
+ uses: Swatinem/rust-cache@v2
216
+ with:
217
+ # One cache for every app job: rust, ui and both integration
218
+ # shards compile the same crates at the same features.
219
+ shared-key: app
220
+ # rust-cache resolves its workspace at the repo root, so by default it
221
+ # purges every crate whose manifest lives under it -- mq-bridge itself
222
+ # included. Without this each app job recompiles the engine from
223
+ # scratch; only registry deps would survive.
224
+ cache-workspace-crates: true
225
+
226
+ - name: Install system dependencies
227
+ run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler
228
+
229
+ # The test drives the CLI through `env!("CARGO_BIN_EXE_mq-bridge-app")`, an
230
+ # absolute path baked in at compile time. Every ubuntu-latest runner checks
231
+ # out to the same path, so shipping the binaries where they were built is
232
+ # what keeps that resolvable in the jobs below.
233
+ #
234
+ # cargo reports the binary it just built; a restored cache can leave several
235
+ # older `cli_copy_docker_test-<hash>` files next to it, so globbing deps/
236
+ # would pick an arbitrary one.
237
+ - name: Build the docker test binary
238
+ working-directory: apps/mq-bridge-app
239
+ shell: bash
240
+ run: |
241
+ cargo test -p mq-bridge-app --test cli_copy_docker_test --no-run \
242
+ --message-format=json > "$RUNNER_TEMP/build.json"
243
+ jq -r 'select(.target.name == "cli_copy_docker_test") | .executable // empty' \
244
+ "$RUNNER_TEMP/build.json" | tail -1 > "$RUNNER_TEMP/test-binary"
245
+ jq -r 'select(.target.name == "mq-bridge-app"
246
+ and (.target.kind // [] | index("bin"))) | .executable // empty' \
247
+ "$RUNNER_TEMP/build.json" | tail -1 > "$RUNNER_TEMP/cli-binary"
248
+ test -s "$RUNNER_TEMP/test-binary" && test -s "$RUNNER_TEMP/cli-binary"
249
+
250
+ - name: Collect binaries
251
+ shell: bash
252
+ run: |
253
+ mkdir -p docker-suite
254
+ cp "$(cat "$RUNNER_TEMP/test-binary")" docker-suite/test-binary
255
+ cp "$(cat "$RUNNER_TEMP/cli-binary")" docker-suite/mq-bridge-app
256
+ cp "$RUNNER_TEMP/cli-binary" docker-suite/cli-path
257
+
258
+ - name: Upload docker suite binaries
259
+ uses: actions/upload-artifact@v7
260
+ with:
261
+ name: app-docker-suite
262
+ path: docker-suite
263
+ retention-days: 1
264
+
265
+ # One backend per runner, so the servers never compete for memory or for the
266
+ # fixed host ports the test URIs use. `run_docker_tests.sh` does the same loop
267
+ # locally, one at a time.
268
+ docker:
269
+ name: App docker (${{ matrix.backend }})
270
+ runs-on: ubuntu-latest
271
+ needs: docker-build
272
+ strategy:
273
+ fail-fast: false
274
+ matrix:
275
+ backend:
276
+ [postgres, mysql, mariadb, kafka, nats, mongodb, redis, amqp, mqtt]
277
+ steps:
278
+ - uses: actions/checkout@v7
279
+
280
+ - name: Download docker suite binaries
281
+ uses: actions/download-artifact@v8
282
+ with:
283
+ name: app-docker-suite
284
+ path: docker-suite
285
+
286
+ # upload-artifact drops the executable bit, and the CLI has to land back at
287
+ # the exact path compiled into the test binary.
288
+ - name: Restore binaries
289
+ shell: bash
290
+ run: |
291
+ cli="$(cat docker-suite/cli-path)"
292
+ mkdir -p "$(dirname "$cli")"
293
+ mv docker-suite/mq-bridge-app "$cli"
294
+ chmod +x "$cli" docker-suite/test-binary
295
+
296
+ - name: Install runtime libraries
297
+ run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev zlib1g-dev
298
+
299
+ # The engine's own integration stacks, so there is one definition per
300
+ # service rather than a second copy that can drift.
301
+ - name: Start ${{ matrix.backend }}
302
+ run: docker compose -f tests/integration/docker-compose/${{ matrix.backend }}.yml up -d --wait --wait-timeout 300
303
+
304
+ # The backend name filters the test names as well as MQB_TEST_BACKEND:
305
+ # `backend!` skips by returning, so without the name filter every excluded
306
+ # test still reports `ok` and a broken service would look green.
307
+ - name: Run ${{ matrix.backend }} tests
308
+ # `shell: bash` for pipefail: the default shell would take `tee`'s exit
309
+ # status and report a failing test run as a pass.
310
+ shell: bash
311
+ env:
312
+ MQB_TEST_BACKEND: ${{ matrix.backend }}
313
+ run: |
314
+ ./docker-suite/test-binary \
315
+ --ignored --test-threads=1 ${{ matrix.backend }} 2>&1 | tee result.log
316
+ grep -qE 'test result: ok\. [1-9]' result.log \
317
+ || { echo "no ${{ matrix.backend }} tests ran"; exit 1; }
318
+
319
+ - name: Service logs
320
+ if: failure()
321
+ run: docker compose -f tests/integration/docker-compose/${{ matrix.backend }}.yml logs --tail 200