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.
- mq_bridge_basic-0.4.17/.cargo/config.toml +25 -0
- mq_bridge_basic-0.4.17/.coderabbit.yaml +5 -0
- mq_bridge_basic-0.4.17/.dockerignore +18 -0
- mq_bridge_basic-0.4.17/.github/ISSUE_TEMPLATE/bug_report.md +51 -0
- mq_bridge_basic-0.4.17/.github/ISSUE_TEMPLATE/feature_request.md +36 -0
- mq_bridge_basic-0.4.17/.github/PULL_REQUEST_TEMPLATE.md +42 -0
- mq_bridge_basic-0.4.17/.github/dependabot.yml +59 -0
- mq_bridge_basic-0.4.17/.github/workflows/app.yml +321 -0
- mq_bridge_basic-0.4.17/.github/workflows/benchmark.yml +276 -0
- mq_bridge_basic-0.4.17/.github/workflows/build-node.yml +198 -0
- mq_bridge_basic-0.4.17/.github/workflows/ci.yml +306 -0
- mq_bridge_basic-0.4.17/.github/workflows/conda.yml +60 -0
- mq_bridge_basic-0.4.17/.github/workflows/docs.yml +84 -0
- mq_bridge_basic-0.4.17/.github/workflows/ibm-mq.yml +242 -0
- mq_bridge_basic-0.4.17/.github/workflows/node.yml +98 -0
- mq_bridge_basic-0.4.17/.github/workflows/publish-node.yml +152 -0
- mq_bridge_basic-0.4.17/.github/workflows/publish-python.yml +307 -0
- mq_bridge_basic-0.4.17/.github/workflows/python.yml +82 -0
- mq_bridge_basic-0.4.17/.github/workflows/release.yml +1288 -0
- mq_bridge_basic-0.4.17/.github/workflows/test-matrix.yml +63 -0
- mq_bridge_basic-0.4.17/.gitignore +61 -0
- mq_bridge_basic-0.4.17/.justfile +465 -0
- mq_bridge_basic-0.4.17/CHANGELOG.md +1149 -0
- mq_bridge_basic-0.4.17/CLAUDE.md +207 -0
- mq_bridge_basic-0.4.17/CONTRIBUTING.md +92 -0
- mq_bridge_basic-0.4.17/Cargo.lock +8279 -0
- mq_bridge_basic-0.4.17/Cargo.toml +485 -0
- mq_bridge_basic-0.4.17/LICENSE +19 -0
- mq_bridge_basic-0.4.17/LICENSE-APACHE +201 -0
- mq_bridge_basic-0.4.17/LICENSE-APACHE.python +201 -0
- mq_bridge_basic-0.4.17/LICENSE-MIT +21 -0
- mq_bridge_basic-0.4.17/LICENSE-MIT.python +21 -0
- mq_bridge_basic-0.4.17/LICENSE.python +19 -0
- mq_bridge_basic-0.4.17/PKG-INFO +427 -0
- mq_bridge_basic-0.4.17/README.md +194 -0
- mq_bridge_basic-0.4.17/SECURITY.md +104 -0
- mq_bridge_basic-0.4.17/THIRD_PARTY_LICENSES.txt +4482 -0
- mq_bridge_basic-0.4.17/benches/ETL_BENCHMARKS.md +85 -0
- mq_bridge_basic-0.4.17/benches/csv_to_json_bench.rs +134 -0
- mq_bridge_basic-0.4.17/benches/middleware_expr_bench.rs +112 -0
- mq_bridge_basic-0.4.17/benches/pack_bench.rs +298 -0
- mq_bridge_basic-0.4.17/benches/performance_bench.rs +1316 -0
- mq_bridge_basic-0.4.17/benches/router_bench.rs +275 -0
- mq_bridge_basic-0.4.17/benches/zeromq_backends.rs +119 -0
- mq_bridge_basic-0.4.17/bindings-common/Cargo.toml +24 -0
- mq_bridge_basic-0.4.17/bindings-common/src/lib.rs +310 -0
- mq_bridge_basic-0.4.17/bindings-common/src/logging.rs +234 -0
- mq_bridge_basic-0.4.17/build.rs +56 -0
- mq_bridge_basic-0.4.17/deny.toml +97 -0
- mq_bridge_basic-0.4.17/docs/ARCHITECTURE.md +351 -0
- mq_bridge_basic-0.4.17/docs/CONFIGURATION.md +719 -0
- mq_bridge_basic-0.4.17/docs/DELIVERY.md +678 -0
- mq_bridge_basic-0.4.17/docs/EXTENDING.md +457 -0
- mq_bridge_basic-0.4.17/docs/GRPC.md +291 -0
- mq_bridge_basic-0.4.17/docs/PLUGINS.md +861 -0
- mq_bridge_basic-0.4.17/docs/REFERENCE.md +1858 -0
- mq_bridge_basic-0.4.17/docs/THIRD_PARTY_LICENSES.md +62 -0
- mq_bridge_basic-0.4.17/docs/assets/copy-demo.png +0 -0
- mq_bridge_basic-0.4.17/examples/c-plugin/CMakeLists.txt +10 -0
- mq_bridge_basic-0.4.17/examples/c-plugin/README.md +56 -0
- mq_bridge_basic-0.4.17/examples/c-plugin/legacy_ledger.c +35 -0
- mq_bridge_basic-0.4.17/examples/c-plugin/legacy_ledger.h +14 -0
- mq_bridge_basic-0.4.17/examples/c-plugin/legacy_parser.c +42 -0
- mq_bridge_basic-0.4.17/examples/c-plugin/legacy_parser.h +26 -0
- mq_bridge_basic-0.4.17/examples/c-plugin/minimal.c +36 -0
- mq_bridge_basic-0.4.17/examples/c-plugin/plugin.c +166 -0
- mq_bridge_basic-0.4.17/examples/ipc_worker_queue.yaml +105 -0
- mq_bridge_basic-0.4.17/include/cbindgen.toml +109 -0
- mq_bridge_basic-0.4.17/include/mq_bridge_plugin.h +620 -0
- mq_bridge_basic-0.4.17/include/mq_bridge_plugin_helpers.h +235 -0
- mq_bridge_basic-0.4.17/mq-bridge.schema.json +4712 -0
- mq_bridge_basic-0.4.17/mq_bridge/__init__.py +92 -0
- mq_bridge_basic-0.4.17/mq_bridge/__init__.pyi +351 -0
- mq_bridge_basic-0.4.17/mq_bridge/config.py +180 -0
- mq_bridge_basic-0.4.17/mq_bridge/config.pyi +743 -0
- mq_bridge_basic-0.4.17/mq_bridge/plugin_packaging.py +90 -0
- mq_bridge_basic-0.4.17/mq_bridge/py.typed +1 -0
- mq_bridge_basic-0.4.17/package-lock.json +6 -0
- mq_bridge_basic-0.4.17/pyproject.toml +63 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/Cargo.toml +108 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/LICENSE-APACHE.python +201 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/LICENSE-MIT.python +21 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/LICENSE.python +19 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/README.md +396 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/THIRD_PARTY_LICENSES.txt +4482 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/analysis/bench_http_native.py +387 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/example.py +41 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/IBM_MQ.md +233 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/bench_memory.py +198 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/bench_memory.yaml +17 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/consume_pull.py +39 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/dlt_source.py +108 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/ibm-mq-input.py +67 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/json_route.py +34 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/memory.yaml +15 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/examples/raw_route.py +28 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/pyproject-basic.toml +62 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/pyproject-reduced.toml +66 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/scripts/gen_config_types.py +268 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/src/lib.rs +3700 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_config_types.py +50 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_custom_endpoint.py +444 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_logging.py +113 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_packaging.py +49 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_performance_smoke.py +57 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_plugin_package.py +32 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_public_api.py +166 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_routes.py +334 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/tests/test_shutdown.py +85 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py/uv.lock +2418 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py-legacy/README.md +11 -0
- mq_bridge_basic-0.4.17/python/mq-bridge-py-legacy/pyproject.toml +26 -0
- mq_bridge_basic-0.4.17/scripts/analysis/benches/metadata_bench.rs +50 -0
- mq_bridge_basic-0.4.17/scripts/analysis/debug_ibm_mq_tls.rs +100 -0
- mq_bridge_basic-0.4.17/scripts/analysis/http/analyze_xctrace_time_profile.py +135 -0
- mq_bridge_basic-0.4.17/scripts/analysis/http/http_flamegraph.py +387 -0
- mq_bridge_basic-0.4.17/scripts/analysis/http/mq_bridge_http_profile.rs +877 -0
- mq_bridge_basic-0.4.17/scripts/analysis/http/run_http_ladder.sh +87 -0
- mq_bridge_basic-0.4.17/scripts/ci/format_bench_output.sh +11 -0
- mq_bridge_basic-0.4.17/scripts/httparena/README.md +113 -0
- mq_bridge_basic-0.4.17/scripts/httparena/frameworks/mq-bridge-py/Dockerfile +32 -0
- mq_bridge_basic-0.4.17/scripts/httparena/frameworks/mq-bridge-py/meta.json +36 -0
- mq_bridge_basic-0.4.17/scripts/httparena/frameworks/mq-bridge-py/server.py +744 -0
- mq_bridge_basic-0.4.17/scripts/httparena/frameworks/mq-bridge-py/templates/fortunes.html +10 -0
- mq_bridge_basic-0.4.17/scripts/mqb-agent.py +253 -0
- mq_bridge_basic-0.4.17/scripts/sync-version.mjs +193 -0
- mq_bridge_basic-0.4.17/scripts/techempower/Python/mq-bridge-py/README.md +58 -0
- mq_bridge_basic-0.4.17/scripts/techempower/Python/mq-bridge-py/benchmark_config.json +26 -0
- mq_bridge_basic-0.4.17/scripts/techempower/Python/mq-bridge-py/mq-bridge-py.dockerfile +31 -0
- mq_bridge_basic-0.4.17/scripts/techempower/Python/mq-bridge-py/server.py +76 -0
- mq_bridge_basic-0.4.17/scripts/techempower/README.md +194 -0
- mq_bridge_basic-0.4.17/scripts/techempower/postgres.yml +19 -0
- mq_bridge_basic-0.4.17/scripts/techempower/seed.sql +10 -0
- mq_bridge_basic-0.4.17/scripts/techempower/verify.sh +102 -0
- mq_bridge_basic-0.4.17/scripts/the-benchmarker/README.md +59 -0
- mq_bridge_basic-0.4.17/scripts/the-benchmarker/python/mq-bridge-py/config.yaml +34 -0
- mq_bridge_basic-0.4.17/scripts/the-benchmarker/python/mq-bridge-py/pyproject.toml +12 -0
- mq_bridge_basic-0.4.17/scripts/the-benchmarker/python/mq-bridge-py/server.py +73 -0
- mq_bridge_basic-0.4.17/src/canonical_message.rs +940 -0
- mq_bridge_basic-0.4.17/src/checkpoint.rs +964 -0
- mq_bridge_basic-0.4.17/src/command_handler.rs +527 -0
- mq_bridge_basic-0.4.17/src/config_file.rs +306 -0
- mq_bridge_basic-0.4.17/src/endpoints/amqp.rs +1108 -0
- mq_bridge_basic-0.4.17/src/endpoints/aws.rs +652 -0
- mq_bridge_basic-0.4.17/src/endpoints/clickhouse.rs +1183 -0
- mq_bridge_basic-0.4.17/src/endpoints/dir_spool/mod.rs +1595 -0
- mq_bridge_basic-0.4.17/src/endpoints/dir_spool/tests.rs +1806 -0
- mq_bridge_basic-0.4.17/src/endpoints/file/mod.rs +3761 -0
- mq_bridge_basic-0.4.17/src/endpoints/file/tests.rs +3639 -0
- mq_bridge_basic-0.4.17/src/endpoints/grpc/consumer.rs +322 -0
- mq_bridge_basic-0.4.17/src/endpoints/grpc/dynamic.rs +865 -0
- mq_bridge_basic-0.4.17/src/endpoints/grpc/mod.rs +249 -0
- mq_bridge_basic-0.4.17/src/endpoints/grpc/proto/mqbridge/bridge.proto +59 -0
- mq_bridge_basic-0.4.17/src/endpoints/grpc/publisher.rs +254 -0
- mq_bridge_basic-0.4.17/src/endpoints/grpc/server.rs +1180 -0
- mq_bridge_basic-0.4.17/src/endpoints/grpc/tests.rs +1678 -0
- mq_bridge_basic-0.4.17/src/endpoints/http/mod.rs +2383 -0
- mq_bridge_basic-0.4.17/src/endpoints/http/publisher.rs +578 -0
- mq_bridge_basic-0.4.17/src/endpoints/http/stream.rs +1059 -0
- mq_bridge_basic-0.4.17/src/endpoints/http/tests.rs +2200 -0
- mq_bridge_basic-0.4.17/src/endpoints/ibm_mq.rs +976 -0
- mq_bridge_basic-0.4.17/src/endpoints/kafka.rs +2129 -0
- mq_bridge_basic-0.4.17/src/endpoints/memory/endpoint.rs +1900 -0
- mq_bridge_basic-0.4.17/src/endpoints/memory/framed.rs +355 -0
- mq_bridge_basic-0.4.17/src/endpoints/memory/ipc_unix.rs +408 -0
- mq_bridge_basic-0.4.17/src/endpoints/memory/ipc_windows.rs +351 -0
- mq_bridge_basic-0.4.17/src/endpoints/memory/memory_transport.rs +140 -0
- mq_bridge_basic-0.4.17/src/endpoints/memory/mod.rs +21 -0
- mq_bridge_basic-0.4.17/src/endpoints/memory/transport.rs +264 -0
- mq_bridge_basic-0.4.17/src/endpoints/mod.rs +3595 -0
- mq_bridge_basic-0.4.17/src/endpoints/mongodb/aggregate.rs +117 -0
- mq_bridge_basic-0.4.17/src/endpoints/mongodb/consumer.rs +588 -0
- mq_bridge_basic-0.4.17/src/endpoints/mongodb/dedup.rs +327 -0
- mq_bridge_basic-0.4.17/src/endpoints/mongodb/mod.rs +464 -0
- mq_bridge_basic-0.4.17/src/endpoints/mongodb/publisher.rs +1206 -0
- mq_bridge_basic-0.4.17/src/endpoints/mongodb/readers.rs +1044 -0
- mq_bridge_basic-0.4.17/src/endpoints/mongodb/tests.rs +911 -0
- mq_bridge_basic-0.4.17/src/endpoints/mqtt.rs +1311 -0
- mq_bridge_basic-0.4.17/src/endpoints/nats.rs +1123 -0
- mq_bridge_basic-0.4.17/src/endpoints/object_store.rs +2613 -0
- mq_bridge_basic-0.4.17/src/endpoints/poll.rs +64 -0
- mq_bridge_basic-0.4.17/src/endpoints/postgres/VENDORED.md +81 -0
- mq_bridge_basic-0.4.17/src/endpoints/postgres/mod.rs +802 -0
- mq_bridge_basic-0.4.17/src/endpoints/postgres/pgoutput/decoder.rs +772 -0
- mq_bridge_basic-0.4.17/src/endpoints/postgres/pgoutput/messages.rs +246 -0
- mq_bridge_basic-0.4.17/src/endpoints/postgres/pgoutput/mod.rs +107 -0
- mq_bridge_basic-0.4.17/src/endpoints/postgres/pgoutput/registry.rs +123 -0
- mq_bridge_basic-0.4.17/src/endpoints/postgres/pgoutput/values.rs +516 -0
- mq_bridge_basic-0.4.17/src/endpoints/postgres/replication.rs +602 -0
- mq_bridge_basic-0.4.17/src/endpoints/postgres/state.rs +68 -0
- mq_bridge_basic-0.4.17/src/endpoints/redis_streams.rs +769 -0
- mq_bridge_basic-0.4.17/src/endpoints/sled.rs +525 -0
- mq_bridge_basic-0.4.17/src/endpoints/sqlx/aggregate.rs +122 -0
- mq_bridge_basic-0.4.17/src/endpoints/sqlx/dedup.rs +535 -0
- mq_bridge_basic-0.4.17/src/endpoints/sqlx/mod.rs +3092 -0
- mq_bridge_basic-0.4.17/src/endpoints/sqlx/tests.rs +1984 -0
- mq_bridge_basic-0.4.17/src/endpoints/structural/fanout.rs +615 -0
- mq_bridge_basic-0.4.17/src/endpoints/structural/mod.rs +22 -0
- mq_bridge_basic-0.4.17/src/endpoints/structural/null.rs +55 -0
- mq_bridge_basic-0.4.17/src/endpoints/structural/reader.rs +395 -0
- mq_bridge_basic-0.4.17/src/endpoints/structural/request.rs +641 -0
- mq_bridge_basic-0.4.17/src/endpoints/structural/response.rs +74 -0
- mq_bridge_basic-0.4.17/src/endpoints/structural/sequence.rs +516 -0
- mq_bridge_basic-0.4.17/src/endpoints/structural/static_endpoint.rs +350 -0
- mq_bridge_basic-0.4.17/src/endpoints/structural/stream_buffer.rs +760 -0
- mq_bridge_basic-0.4.17/src/endpoints/structural/switch.rs +645 -0
- mq_bridge_basic-0.4.17/src/endpoints/websocket.rs +837 -0
- mq_bridge_basic-0.4.17/src/endpoints/zeromq/codec.rs +195 -0
- mq_bridge_basic-0.4.17/src/endpoints/zeromq/mod.rs +106 -0
- mq_bridge_basic-0.4.17/src/endpoints/zeromq/omq.rs +705 -0
- mq_bridge_basic-0.4.17/src/endpoints/zeromq/zmq.rs +870 -0
- mq_bridge_basic-0.4.17/src/errors.rs +200 -0
- mq_bridge_basic-0.4.17/src/event_handler.rs +167 -0
- mq_bridge_basic-0.4.17/src/event_store.rs +842 -0
- mq_bridge_basic-0.4.17/src/extensions.rs +219 -0
- mq_bridge_basic-0.4.17/src/lib.rs +214 -0
- mq_bridge_basic-0.4.17/src/middleware/aggregate/mod.rs +1611 -0
- mq_bridge_basic-0.4.17/src/middleware/aggregate/states.rs +98 -0
- mq_bridge_basic-0.4.17/src/middleware/aggregate/store.rs +124 -0
- mq_bridge_basic-0.4.17/src/middleware/aggregate/tests.rs +1161 -0
- mq_bridge_basic-0.4.17/src/middleware/aggregate/writer.rs +210 -0
- mq_bridge_basic-0.4.17/src/middleware/buffer.rs +845 -0
- mq_bridge_basic-0.4.17/src/middleware/compression.rs +318 -0
- mq_bridge_basic-0.4.17/src/middleware/cookie_jar.rs +659 -0
- mq_bridge_basic-0.4.17/src/middleware/deduplication/memory.rs +519 -0
- mq_bridge_basic-0.4.17/src/middleware/deduplication.rs +1764 -0
- mq_bridge_basic-0.4.17/src/middleware/deferred_commit.rs +215 -0
- mq_bridge_basic-0.4.17/src/middleware/delay.rs +144 -0
- mq_bridge_basic-0.4.17/src/middleware/dlq.rs +728 -0
- mq_bridge_basic-0.4.17/src/middleware/encryption.rs +451 -0
- mq_bridge_basic-0.4.17/src/middleware/filter.rs +1926 -0
- mq_bridge_basic-0.4.17/src/middleware/id.rs +320 -0
- mq_bridge_basic-0.4.17/src/middleware/limiter.rs +308 -0
- mq_bridge_basic-0.4.17/src/middleware/lookup.rs +865 -0
- mq_bridge_basic-0.4.17/src/middleware/metrics.rs +186 -0
- mq_bridge_basic-0.4.17/src/middleware/mod.rs +330 -0
- mq_bridge_basic-0.4.17/src/middleware/otel.rs +319 -0
- mq_bridge_basic-0.4.17/src/middleware/pack.rs +973 -0
- mq_bridge_basic-0.4.17/src/middleware/random_panic.rs +218 -0
- mq_bridge_basic-0.4.17/src/middleware/raw_json.rs +31 -0
- mq_bridge_basic-0.4.17/src/middleware/retry.rs +369 -0
- mq_bridge_basic-0.4.17/src/middleware/timeout.rs +117 -0
- mq_bridge_basic-0.4.17/src/middleware/transform/coerce.rs +171 -0
- mq_bridge_basic-0.4.17/src/middleware/transform/compiled.rs +731 -0
- mq_bridge_basic-0.4.17/src/middleware/transform/error.rs +72 -0
- mq_bridge_basic-0.4.17/src/middleware/transform/mod.rs +368 -0
- mq_bridge_basic-0.4.17/src/middleware/transform/path.rs +158 -0
- mq_bridge_basic-0.4.17/src/middleware/transform/schema.rs +411 -0
- mq_bridge_basic-0.4.17/src/middleware/transform/tests.rs +2006 -0
- mq_bridge_basic-0.4.17/src/middleware/weak_join.rs +885 -0
- mq_bridge_basic-0.4.17/src/models/builders.rs +1046 -0
- mq_bridge_basic-0.4.17/src/models/defaults.rs +274 -0
- mq_bridge_basic-0.4.17/src/models/secrets.rs +552 -0
- mq_bridge_basic-0.4.17/src/models/serde_support.rs +666 -0
- mq_bridge_basic-0.4.17/src/models/tests.rs +932 -0
- mq_bridge_basic-0.4.17/src/models.rs +2878 -0
- mq_bridge_basic-0.4.17/src/outcomes.rs +146 -0
- mq_bridge_basic-0.4.17/src/plugin/completion.rs +182 -0
- mq_bridge_basic-0.4.17/src/plugin/conformance.rs +323 -0
- mq_bridge_basic-0.4.17/src/plugin/crash.rs +518 -0
- mq_bridge_basic-0.4.17/src/plugin/discovery.rs +621 -0
- mq_bridge_basic-0.4.17/src/plugin/endpoint.rs +1217 -0
- mq_bridge_basic-0.4.17/src/plugin/forward.rs +236 -0
- mq_bridge_basic-0.4.17/src/plugin/host.rs +104 -0
- mq_bridge_basic-0.4.17/src/plugin/message.rs +156 -0
- mq_bridge_basic-0.4.17/src/plugin/middleware.rs +374 -0
- mq_bridge_basic-0.4.17/src/plugin/mod.rs +542 -0
- mq_bridge_basic-0.4.17/src/plugin/sdk.rs +1890 -0
- mq_bridge_basic-0.4.17/src/plugin/test_support.rs +199 -0
- mq_bridge_basic-0.4.17/src/publisher.rs +222 -0
- mq_bridge_basic-0.4.17/src/response.rs +259 -0
- mq_bridge_basic-0.4.17/src/route.rs +6325 -0
- mq_bridge_basic-0.4.17/src/shutdown.rs +198 -0
- mq_bridge_basic-0.4.17/src/support/base64_engine.rs +101 -0
- mq_bridge_basic-0.4.17/src/support/compression.rs +360 -0
- mq_bridge_basic-0.4.17/src/support/compression_pool.rs +236 -0
- mq_bridge_basic-0.4.17/src/support/config_schema.rs +897 -0
- mq_bridge_basic-0.4.17/src/support/connection_registry.rs +293 -0
- mq_bridge_basic-0.4.17/src/support/crypto.rs +572 -0
- mq_bridge_basic-0.4.17/src/support/crypto_envelope.rs +21 -0
- mq_bridge_basic-0.4.17/src/support/interpolation.rs +956 -0
- mq_bridge_basic-0.4.17/src/support/lookup_batch.rs +396 -0
- mq_bridge_basic-0.4.17/src/support/mod.rs +32 -0
- mq_bridge_basic-0.4.17/src/support/pack.rs +740 -0
- mq_bridge_basic-0.4.17/src/support/parallel.rs +213 -0
- mq_bridge_basic-0.4.17/src/support/parquet.rs +261 -0
- mq_bridge_basic-0.4.17/src/support/plugin_abi.rs +1395 -0
- mq_bridge_basic-0.4.17/src/support/source_ranges.rs +848 -0
- mq_bridge_basic-0.4.17/src/support/stream_batch.rs +127 -0
- mq_bridge_basic-0.4.17/src/test_utils.rs +2237 -0
- mq_bridge_basic-0.4.17/src/traits.rs +1107 -0
- mq_bridge_basic-0.4.17/src/type_handler.rs +613 -0
- mq_bridge_basic-0.4.17/tests/README.md +29 -0
- mq_bridge_basic-0.4.17/tests/armature_integration.rs +128 -0
- mq_bridge_basic-0.4.17/tests/compat/python/bridge_client.py +68 -0
- mq_bridge_basic-0.4.17/tests/dedup_store_bench.rs +95 -0
- mq_bridge_basic-0.4.17/tests/delivery_guarantee_test.rs +163 -0
- mq_bridge_basic-0.4.17/tests/integration/amqp.rs +461 -0
- mq_bridge_basic-0.4.17/tests/integration/aws.rs +236 -0
- mq_bridge_basic-0.4.17/tests/integration/clickhouse.rs +245 -0
- mq_bridge_basic-0.4.17/tests/integration/config.toml +0 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/amqp.yml +12 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/aws.yml +18 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/clickhouse.yml +21 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm-mq-certs/client.crl +0 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm-mq-certs/client.kdb +0 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm-mq-certs/client.p12 +0 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm-mq-certs/client.rdb +0 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm-mq-certs/client.sth +0 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm_mq.yml +20 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/ibm_mq_tls.yml +22 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/kafka-tls.yml +37 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/kafka.yml +32 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/mariadb.yml +17 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/mongodb-replica.yml +15 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/mongodb-tls.yml +15 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/mongodb.yml +13 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/mosquitto.conf +7 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/mosquitto_performance.conf +12 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/mosquitto_persistence.conf +20 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/mq_init.mqsc +15 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/mq_init_tls.mqsc +3 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/mqtt.yml +17 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/mqtt_performance.yml +13 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/mysql.yml +16 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/nats.yml +13 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/object_store.yml +15 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/postgres.yml +15 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/postgres_cdc.yml +29 -0
- mq_bridge_basic-0.4.17/tests/integration/docker-compose/redis.yml +11 -0
- mq_bridge_basic-0.4.17/tests/integration/file.rs +45 -0
- mq_bridge_basic-0.4.17/tests/integration/grpc.rs +348 -0
- mq_bridge_basic-0.4.17/tests/integration/grpc_tls.rs +128 -0
- mq_bridge_basic-0.4.17/tests/integration/http.rs +323 -0
- mq_bridge_basic-0.4.17/tests/integration/http_tls.rs +157 -0
- mq_bridge_basic-0.4.17/tests/integration/ibm_mq.rs +351 -0
- mq_bridge_basic-0.4.17/tests/integration/ibm_mq_tls.rs +55 -0
- mq_bridge_basic-0.4.17/tests/integration/ipc.rs +200 -0
- mq_bridge_basic-0.4.17/tests/integration/kafka.rs +392 -0
- mq_bridge_basic-0.4.17/tests/integration/kafka_tls.rs +40 -0
- mq_bridge_basic-0.4.17/tests/integration/logic_test.rs +108 -0
- mq_bridge_basic-0.4.17/tests/integration/mariadb.rs +218 -0
- mq_bridge_basic-0.4.17/tests/integration/memory.rs +113 -0
- mq_bridge_basic-0.4.17/tests/integration/mod.rs +87 -0
- mq_bridge_basic-0.4.17/tests/integration/mongodb.rs +899 -0
- mq_bridge_basic-0.4.17/tests/integration/mongodb_raw.rs +62 -0
- mq_bridge_basic-0.4.17/tests/integration/mongodb_tls.rs +41 -0
- mq_bridge_basic-0.4.17/tests/integration/mqtt.rs +233 -0
- mq_bridge_basic-0.4.17/tests/integration/mysql.rs +334 -0
- mq_bridge_basic-0.4.17/tests/integration/nats.rs +341 -0
- mq_bridge_basic-0.4.17/tests/integration/object_store.rs +267 -0
- mq_bridge_basic-0.4.17/tests/integration/performance_static.rs +67 -0
- mq_bridge_basic-0.4.17/tests/integration/postgres.rs +376 -0
- mq_bridge_basic-0.4.17/tests/integration/postgres_cdc.rs +674 -0
- mq_bridge_basic-0.4.17/tests/integration/redis_streams.rs +434 -0
- mq_bridge_basic-0.4.17/tests/integration/route.rs +1634 -0
- mq_bridge_basic-0.4.17/tests/integration/scripts/gen_certs.sh +183 -0
- mq_bridge_basic-0.4.17/tests/integration/sqlite.rs +173 -0
- mq_bridge_basic-0.4.17/tests/integration/tls_helpers.rs +143 -0
- mq_bridge_basic-0.4.17/tests/integration/websocket.rs +68 -0
- mq_bridge_basic-0.4.17/tests/integration/zeromq.rs +39 -0
- mq_bridge_basic-0.4.17/tests/integration_test.rs +752 -0
- mq_bridge_basic-0.4.17/tests/memory_leak_test.rs +134 -0
- mq_bridge_basic-0.4.17/tests/otel_test.rs +97 -0
- mq_bridge_basic-0.4.17/tests/ref_test.rs +235 -0
- mq_bridge_basic-0.4.17/tests/reference_docs_test.rs +373 -0
- mq_bridge_basic-0.4.17/tests/sqlite_test.rs +20 -0
- mq_bridge_basic-0.4.17/tests/tls_example.rs +35 -0
- mq_bridge_basic-0.4.17/tests/unit_tests.md +214 -0
- 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,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
|