mq-bridge-py-basic 0.3.0__tar.gz → 0.3.2__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_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/.github/workflows/benchmark.yml +9 -13
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/.github/workflows/ci.yml +88 -39
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/.github/workflows/ibm-mq.yml +16 -5
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/.github/workflows/publish-node.yml +13 -7
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/.github/workflows/publish-python.yml +27 -2
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/Cargo.lock +46 -4
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/Cargo.toml +24 -6
- mq_bridge_py_basic-0.3.2/PKG-INFO +320 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/README.md +24 -2
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/benches/performance_bench.rs +26 -14
- mq_bridge_py_basic-0.3.2/bindings-common/Cargo.toml +19 -0
- mq_bridge_py_basic-0.3.2/bindings-common/src/lib.rs +308 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/mq_bridge/__init__.py +2 -0
- mq_bridge_py_basic-0.3.2/mq_bridge/__init__.pyi +255 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/mq_bridge/config.pyi +2 -1
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/pyproject.toml +1 -1
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/Cargo.toml +19 -6
- mq_bridge_py_basic-0.3.2/python/mq-bridge-py/README.md +296 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/analysis/bench_http_native.py +7 -9
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/example.py +2 -2
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/examples/bench_memory.py +2 -2
- mq_bridge_py_basic-0.3.2/python/mq-bridge-py/examples/consume_pull.py +39 -0
- mq_bridge_py_basic-0.3.2/python/mq-bridge-py/examples/dlt_source.py +112 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/examples/json_route.py +2 -2
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/examples/raw_route.py +2 -2
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/pyproject-basic.toml +1 -1
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/scripts/gen_config_types.py +1 -1
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/src/lib.rs +577 -162
- mq_bridge_py_basic-0.3.2/python/mq-bridge-py/tests/test_routes.py +334 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/analysis/debug_ibm_mq_tls.rs +1 -1
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/canonical_message.rs +134 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/amqp.rs +28 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/aws.rs +3 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/file.rs +6 -1
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/grpc.rs +22 -4
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/http.rs +4 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/ibm_mq.rs +203 -11
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/kafka.rs +60 -6
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/mod.rs +5 -5
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/mongodb.rs +25 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/mqtt.rs +340 -22
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/nats.rs +83 -1
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/sled.rs +6 -2
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/zeromq.rs +73 -11
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/models.rs +43 -1
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/test_utils.rs +43 -15
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/traits.rs +15 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/armature_integration.rs +39 -33
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/mq_init.mqsc +4 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/grpc.rs +4 -4
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/ibm_mq.rs +38 -7
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/ibm_mq_tls.rs +9 -1
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/kafka.rs +3 -3
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/mariadb.rs +8 -2
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/mod.rs +2 -2
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/mysql.rs +3 -2
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/postgres.rs +8 -2
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/route.rs +35 -10
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration_test.rs +10 -10
- mq_bridge_py_basic-0.3.0/PKG-INFO +0 -191
- mq_bridge_py_basic-0.3.0/mq_bridge/__init__.pyi +0 -146
- mq_bridge_py_basic-0.3.0/python/mq-bridge-py/README.md +0 -167
- mq_bridge_py_basic-0.3.0/python/mq-bridge-py/tests/test_routes.py +0 -143
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/.github/workflows/node.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/.github/workflows/python.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/.github/workflows/release.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/.github/workflows/test-matrix.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/.gitignore +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/ARCHITECTURE.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/CONFIGURATION.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/CONTRIBUTING.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/LICENSE +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/LICENSE.python +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/benches/router_bench.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/build.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/claude.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/examples/ipc_worker_queue.yaml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/mq-bridge.schema.json +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/mq_bridge/config.py +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/mq_bridge/py.typed +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/package-lock.json +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/LICENSE.python +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/examples/bench_memory.yaml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/examples/memory.yaml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/tests/test_config_types.py +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/tests/test_packaging.py +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/tests/test_performance_smoke.py +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/tests/test_public_api.py +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/python/mq-bridge-py/uv.lock +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/analysis/HTTP_STREAM_ENDPOINT_PLAN.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/analysis/benches/metadata_bench.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/analysis/http/analyze_xctrace_time_profile.py +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/analysis/http/http_flamegraph.py +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/analysis/http/mq_bridge_http_profile.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/analysis/http/run_http_ladder.sh +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/httparena/README.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/httparena/frameworks/mq-bridge-py/Dockerfile +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/httparena/frameworks/mq-bridge-py/meta.json +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/httparena/frameworks/mq-bridge-py/server.py +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/techempower/Python/mq-bridge-py/README.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/techempower/Python/mq-bridge-py/benchmark_config.json +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/techempower/Python/mq-bridge-py/mq-bridge-py.dockerfile +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/techempower/Python/mq-bridge-py/server.py +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/techempower/README.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/techempower/postgres.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/techempower/seed.sql +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/techempower/verify.sh +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/the-benchmarker/README.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/the-benchmarker/python/mq-bridge-py/config.yaml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/the-benchmarker/python/mq-bridge-py/pyproject.toml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/scripts/the-benchmarker/python/mq-bridge-py/server.py +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/command_handler.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/connection_registry.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/fanout.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/grpc.proto +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/http_stream.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/memory/endpoint.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/memory/ipc_unix.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/memory/ipc_windows.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/memory/memory_transport.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/memory/mod.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/memory/transport.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/null.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/reader.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/response.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/sqlx.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/static_endpoint.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/stream_buffer.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/switch.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/endpoints/websocket.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/errors.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/event_handler.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/event_store.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/extensions.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/lib.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/middleware/buffer.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/middleware/cookie_jar.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/middleware/deduplication.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/middleware/delay.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/middleware/dlq.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/middleware/limiter.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/middleware/metrics.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/middleware/mod.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/middleware/random_panic.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/middleware/retry.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/middleware/weak_join.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/outcomes.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/publisher.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/response.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/route.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/src/type_handler.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/README.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/amqp.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/aws.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/config.toml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/amqp.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/aws.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/ibm-mq-certs/client.crl +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/ibm-mq-certs/client.kdb +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/ibm-mq-certs/client.p12 +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/ibm-mq-certs/client.rdb +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/ibm-mq-certs/client.sth +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/ibm_mq.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/ibm_mq_tls.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/kafka-tls.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/kafka.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/mariadb.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/mongodb-replica.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/mongodb-tls.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/mongodb.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/mosquitto.conf +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/mosquitto_performance.conf +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/mosquitto_persistence.conf +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/mq_init_tls.mqsc +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/mqtt.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/mqtt_performance.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/mysql.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/nats.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/docker-compose/postgres.yml +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/file.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/grpc_tls.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/http.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/http_tls.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/ipc.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/kafka_tls.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/logic_test.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/memory.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/mongodb.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/mongodb_raw.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/mongodb_tls.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/mqtt.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/nats.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/performance_static.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/scripts/gen_certs.sh +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/sqlite.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/tls_helpers.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/websocket.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/integration/zeromq.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/memory_leak_test.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/ref_test.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/sqlite_test.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/tls_example.rs +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/unit_tests.md +0 -0
- {mq_bridge_py_basic-0.3.0 → mq_bridge_py_basic-0.3.2}/tests/websocket_test.rs +0 -0
|
@@ -2,9 +2,10 @@ name: Benchmark
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
|
-
branches: [main]
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
branches: [main, dev]
|
|
6
|
+
schedule:
|
|
7
|
+
# Nightly full benchmark run (04:00 UTC)
|
|
8
|
+
- cron: '0 4 * * *'
|
|
8
9
|
workflow_dispatch:
|
|
9
10
|
|
|
10
11
|
env:
|
|
@@ -24,17 +25,12 @@ jobs:
|
|
|
24
25
|
- name: Install Rust toolchain
|
|
25
26
|
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
|
|
26
27
|
|
|
27
|
-
- name: Cache cargo
|
|
28
|
-
uses:
|
|
28
|
+
- name: Cache cargo build
|
|
29
|
+
uses: Swatinem/rust-cache@v2
|
|
29
30
|
with:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
~/.cargo/git/db/
|
|
34
|
-
target/
|
|
35
|
-
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
|
36
|
-
restore-keys: |
|
|
37
|
-
${{ runner.os }}-cargo-
|
|
31
|
+
# Shared with the release-mode integration jobs so the full-feature
|
|
32
|
+
# dependency compile is reused across jobs/runs instead of rebuilt.
|
|
33
|
+
shared-key: release-full
|
|
38
34
|
|
|
39
35
|
- name: Pre-pull docker images
|
|
40
36
|
run: |
|
|
@@ -107,35 +107,74 @@ jobs:
|
|
|
107
107
|
- name: Memory leak soak (route commit-task JoinSet)
|
|
108
108
|
run: cargo test --test memory_leak_test --features=full -- --ignored --nocapture
|
|
109
109
|
|
|
110
|
-
#
|
|
110
|
+
# Compile the integration test binaries ONCE (release, full,test-utils) and
|
|
111
|
+
# publish them as a nextest archive. The three run jobs below download this
|
|
112
|
+
# archive instead of each recompiling the same binaries.
|
|
113
|
+
integration-build:
|
|
114
|
+
name: Integration — Build
|
|
115
|
+
runs-on: ubuntu-latest
|
|
116
|
+
steps:
|
|
117
|
+
- uses: actions/checkout@v4
|
|
118
|
+
|
|
119
|
+
- name: Install Rust toolchain
|
|
120
|
+
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
|
|
121
|
+
|
|
122
|
+
- name: Install cargo-nextest
|
|
123
|
+
uses: taiki-e/install-action@v2
|
|
124
|
+
with:
|
|
125
|
+
tool: nextest
|
|
126
|
+
|
|
127
|
+
- name: Cache cargo build
|
|
128
|
+
uses: Swatinem/rust-cache@v2
|
|
129
|
+
with:
|
|
130
|
+
# Shared with the benchmark job so the full-feature dependency compile
|
|
131
|
+
# is reused across jobs/runs.
|
|
132
|
+
shared-key: release-full
|
|
133
|
+
|
|
134
|
+
- name: Build nextest archive
|
|
135
|
+
run: |
|
|
136
|
+
cargo nextest archive \
|
|
137
|
+
--release --features full,test-utils \
|
|
138
|
+
--test integration_test --test armature_integration \
|
|
139
|
+
--archive-file nextest-archive.tar.zst
|
|
140
|
+
|
|
141
|
+
- name: Upload nextest archive
|
|
142
|
+
uses: actions/upload-artifact@v4
|
|
143
|
+
with:
|
|
144
|
+
name: integration-nextest-archive
|
|
145
|
+
path: nextest-archive.tar.zst
|
|
146
|
+
retention-days: 1
|
|
147
|
+
|
|
148
|
+
# Integration tests (requires Docker) split into parallel jobs. Each runs the
|
|
149
|
+
# prebuilt nextest archive from integration-build — no recompilation.
|
|
111
150
|
integration-others:
|
|
112
151
|
name: Integration — Others
|
|
113
152
|
runs-on: ubuntu-latest
|
|
153
|
+
needs: integration-build
|
|
114
154
|
services:
|
|
115
155
|
docker:
|
|
116
156
|
image: docker:dind
|
|
117
157
|
options: --privileged
|
|
118
158
|
steps:
|
|
119
159
|
- uses: actions/checkout@v4
|
|
120
|
-
|
|
121
|
-
- name: Install
|
|
122
|
-
uses:
|
|
123
|
-
|
|
124
|
-
- name: Cache cargo build
|
|
125
|
-
uses: Swatinem/rust-cache@v2
|
|
160
|
+
|
|
161
|
+
- name: Install cargo-nextest
|
|
162
|
+
uses: taiki-e/install-action@v2
|
|
126
163
|
with:
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
164
|
+
tool: nextest
|
|
165
|
+
|
|
166
|
+
- name: Download nextest archive
|
|
167
|
+
uses: actions/download-artifact@v4
|
|
168
|
+
with:
|
|
169
|
+
name: integration-nextest-archive
|
|
170
|
+
|
|
132
171
|
- name: Pre-pull docker images
|
|
133
172
|
run: |
|
|
134
173
|
find tests/integration/docker-compose -name "*.yml" | xargs -P 5 -I {} docker compose -f {} pull -q
|
|
135
|
-
- name: Install
|
|
174
|
+
- name: Install JRE (for keytool)
|
|
136
175
|
run: |
|
|
137
176
|
sudo apt-get update
|
|
138
|
-
sudo apt-get install -y default-
|
|
177
|
+
sudo apt-get install -y default-jre-headless
|
|
139
178
|
|
|
140
179
|
- name: Generate TLS certs for integration services
|
|
141
180
|
run: |
|
|
@@ -146,15 +185,20 @@ jobs:
|
|
|
146
185
|
|
|
147
186
|
- name: Run chaos/stability tests
|
|
148
187
|
run: |
|
|
149
|
-
cargo
|
|
188
|
+
cargo nextest run --archive-file nextest-archive.tar.zst \
|
|
189
|
+
--run-ignored all --no-capture \
|
|
190
|
+
-E 'binary(integration_test) & test(=test_all_chaos)'
|
|
150
191
|
|
|
151
192
|
- name: Run remaining integration tests (excluding chaos & performance)
|
|
152
193
|
run: |
|
|
153
|
-
cargo
|
|
194
|
+
cargo nextest run --archive-file nextest-archive.tar.zst \
|
|
195
|
+
--run-ignored all --no-capture \
|
|
196
|
+
-E 'binary(integration_test) & not test(=test_all_chaos) & not test(=test_all_performance_pipeline) & not test(=test_all_performance_direct)'
|
|
154
197
|
|
|
155
198
|
integration-performance:
|
|
156
199
|
name: Integration — Performance
|
|
157
200
|
runs-on: ubuntu-latest
|
|
201
|
+
needs: integration-build
|
|
158
202
|
services:
|
|
159
203
|
docker:
|
|
160
204
|
image: docker:dind
|
|
@@ -162,24 +206,23 @@ jobs:
|
|
|
162
206
|
steps:
|
|
163
207
|
- uses: actions/checkout@v4
|
|
164
208
|
|
|
165
|
-
- name: Install
|
|
166
|
-
uses:
|
|
209
|
+
- name: Install cargo-nextest
|
|
210
|
+
uses: taiki-e/install-action@v2
|
|
211
|
+
with:
|
|
212
|
+
tool: nextest
|
|
167
213
|
|
|
168
|
-
- name:
|
|
169
|
-
uses:
|
|
214
|
+
- name: Download nextest archive
|
|
215
|
+
uses: actions/download-artifact@v4
|
|
170
216
|
with:
|
|
171
|
-
|
|
172
|
-
# empty string (no-op) in non-matrix jobs. rust-cache already keys on the
|
|
173
|
-
# job id, OS, rustc version, and lockfiles automatically.
|
|
174
|
-
key: ${{ matrix.features }}
|
|
217
|
+
name: integration-nextest-archive
|
|
175
218
|
|
|
176
219
|
- name: Pre-pull docker images
|
|
177
220
|
run: |
|
|
178
221
|
find tests/integration/docker-compose -name "*.yml" | xargs -P 5 -I {} docker compose -f {} pull -q
|
|
179
|
-
- name: Install
|
|
222
|
+
- name: Install JRE (for keytool)
|
|
180
223
|
run: |
|
|
181
224
|
sudo apt-get update
|
|
182
|
-
sudo apt-get install -y default-
|
|
225
|
+
sudo apt-get install -y default-jre-headless
|
|
183
226
|
|
|
184
227
|
- name: Generate TLS certs for integration services
|
|
185
228
|
run: |
|
|
@@ -190,15 +233,20 @@ jobs:
|
|
|
190
233
|
|
|
191
234
|
- name: Run pipeline performance tests
|
|
192
235
|
run: |
|
|
193
|
-
cargo
|
|
236
|
+
cargo nextest run --archive-file nextest-archive.tar.zst \
|
|
237
|
+
--run-ignored all --no-capture \
|
|
238
|
+
-E 'binary(integration_test) & test(=test_all_performance_pipeline)'
|
|
194
239
|
|
|
195
240
|
- name: Run other performance tests
|
|
196
241
|
run: |
|
|
197
|
-
cargo
|
|
242
|
+
cargo nextest run --archive-file nextest-archive.tar.zst \
|
|
243
|
+
--run-ignored all --no-capture \
|
|
244
|
+
-E 'binary(integration_test) & test(=test_all_performance_direct)'
|
|
198
245
|
|
|
199
246
|
integration-armature:
|
|
200
247
|
name: Integration — Armature
|
|
201
248
|
runs-on: ubuntu-latest
|
|
249
|
+
needs: integration-build
|
|
202
250
|
services:
|
|
203
251
|
docker:
|
|
204
252
|
image: docker:dind
|
|
@@ -206,24 +254,23 @@ jobs:
|
|
|
206
254
|
steps:
|
|
207
255
|
- uses: actions/checkout@v4
|
|
208
256
|
|
|
209
|
-
- name: Install
|
|
210
|
-
uses:
|
|
257
|
+
- name: Install cargo-nextest
|
|
258
|
+
uses: taiki-e/install-action@v2
|
|
259
|
+
with:
|
|
260
|
+
tool: nextest
|
|
211
261
|
|
|
212
|
-
- name:
|
|
213
|
-
uses:
|
|
262
|
+
- name: Download nextest archive
|
|
263
|
+
uses: actions/download-artifact@v4
|
|
214
264
|
with:
|
|
215
|
-
|
|
216
|
-
# empty string (no-op) in non-matrix jobs. rust-cache already keys on the
|
|
217
|
-
# job id, OS, rustc version, and lockfiles automatically.
|
|
218
|
-
key: ${{ matrix.features }}
|
|
265
|
+
name: integration-nextest-archive
|
|
219
266
|
|
|
220
267
|
- name: Pre-pull docker images
|
|
221
268
|
run: |
|
|
222
269
|
find tests/integration/docker-compose -name "*.yml" | xargs -P 5 -I {} docker compose -f {} pull -q
|
|
223
|
-
- name: Install
|
|
270
|
+
- name: Install JRE (for keytool)
|
|
224
271
|
run: |
|
|
225
272
|
sudo apt-get update
|
|
226
|
-
sudo apt-get install -y default-
|
|
273
|
+
sudo apt-get install -y default-jre-headless
|
|
227
274
|
|
|
228
275
|
- name: Generate TLS certs for integration services
|
|
229
276
|
run: |
|
|
@@ -234,7 +281,9 @@ jobs:
|
|
|
234
281
|
|
|
235
282
|
- name: Run armature integration tests
|
|
236
283
|
run: |
|
|
237
|
-
cargo
|
|
284
|
+
cargo nextest run --archive-file nextest-archive.tar.zst \
|
|
285
|
+
--run-ignored all --no-capture \
|
|
286
|
+
-E 'binary(armature_integration)'
|
|
238
287
|
|
|
239
288
|
# Documentation
|
|
240
289
|
docs:
|
|
@@ -82,10 +82,16 @@ jobs:
|
|
|
82
82
|
ls -la /opt/mqm/lib64/ || echo "MQ lib64 directory not found"
|
|
83
83
|
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
|
|
84
84
|
|
|
85
|
-
-
|
|
85
|
+
# `ibm-mq` (dlopen) is the shipping path and needs no SDK at build; the
|
|
86
|
+
# redist install above only provides headers for the static compile-check.
|
|
87
|
+
- name: Build with IBM MQ feature (dlopen)
|
|
86
88
|
if: steps.mqclient.outputs.available == 'true'
|
|
87
89
|
run: cargo build --features ibm-mq
|
|
88
90
|
|
|
91
|
+
- name: Build with IBM MQ feature (static link)
|
|
92
|
+
if: steps.mqclient.outputs.available == 'true'
|
|
93
|
+
run: cargo build --features ibm-mq-static
|
|
94
|
+
|
|
89
95
|
- name: Run clippy on IBM MQ code
|
|
90
96
|
if: steps.mqclient.outputs.available == 'true'
|
|
91
97
|
run: cargo clippy --features ibm-mq -- -D warnings
|
|
@@ -156,13 +162,18 @@ jobs:
|
|
|
156
162
|
|
|
157
163
|
- name: Run IBM MQ integration tests
|
|
158
164
|
if: steps.mqclient.outputs.available == 'true'
|
|
165
|
+
env:
|
|
166
|
+
MQB_TEST_BACKEND: ibm-mq
|
|
159
167
|
run: |
|
|
168
|
+
# The test fns are named test_all_* (filtered to ibm-mq via
|
|
169
|
+
# MQB_TEST_BACKEND). The previous test_ibm_mq_* filters matched no
|
|
170
|
+
# test, so this job silently ran zero tests.
|
|
160
171
|
cargo test --test integration_test --features ibm-mq,test-utils,rustls-ring -- \
|
|
161
172
|
--ignored --nocapture --test-threads=1 \
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
173
|
+
test_all_subscriber_logic \
|
|
174
|
+
test_all_performance_pipeline \
|
|
175
|
+
test_all_chaos \
|
|
176
|
+
test_all_status
|
|
166
177
|
|
|
167
178
|
- name: Run IBM MQ TLS tests
|
|
168
179
|
if: steps.mqclient.outputs.available == 'true'
|
|
@@ -10,11 +10,12 @@ name: Publish Node Package
|
|
|
10
10
|
# RHEL 9 (glibc 2.34), Debian 11/12 and Ubuntu 20.04+ — covering the priority
|
|
11
11
|
# server targets. macOS/Windows build natively.
|
|
12
12
|
#
|
|
13
|
-
# Auth:
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
13
|
+
# Auth: OIDC trusted publishing. The one-time bootstrap (which used an NPM_TOKEN
|
|
14
|
+
# secret to create the 5 platform packages, since npm has no pending-publisher
|
|
15
|
+
# concept) is done; all six packages exist with trusted publishing configured, so
|
|
16
|
+
# publishing runs via OIDC (id-token) with provenance — no token. We deliberately
|
|
17
|
+
# do NOT read NPM_TOKEN: a present-but-expired secret would be sent to the registry
|
|
18
|
+
# and 401 instead of falling back to OIDC, so the credential is left out entirely.
|
|
18
19
|
|
|
19
20
|
on:
|
|
20
21
|
release:
|
|
@@ -67,6 +68,9 @@ jobs:
|
|
|
67
68
|
env:
|
|
68
69
|
CARGO_NET_RETRY: "5"
|
|
69
70
|
CARGO_NET_GIT_FETCH_WITH_CLI: "true"
|
|
71
|
+
# curl's HTTP/2 multiplexing flakes on Windows runners ("[55] Failed
|
|
72
|
+
# sending data to the peer"); force HTTP/1.1 so fetches are reliable.
|
|
73
|
+
CARGO_HTTP_MULTIPLEXING: "false"
|
|
70
74
|
run: >-
|
|
71
75
|
npx napi build --platform --release --strip
|
|
72
76
|
--target ${{ matrix.target }}
|
|
@@ -129,6 +133,9 @@ jobs:
|
|
|
129
133
|
env:
|
|
130
134
|
CARGO_NET_RETRY: "5"
|
|
131
135
|
CARGO_NET_GIT_FETCH_WITH_CLI: "true"
|
|
136
|
+
# curl's HTTP/2 multiplexing flakes on Windows runners ("[55] Failed
|
|
137
|
+
# sending data to the peer"); force HTTP/1.1 so fetches are reliable.
|
|
138
|
+
CARGO_HTTP_MULTIPLEXING: "false"
|
|
132
139
|
run: >-
|
|
133
140
|
npx napi build --platform --release --strip
|
|
134
141
|
--target ${{ matrix.target }}
|
|
@@ -220,8 +227,7 @@ jobs:
|
|
|
220
227
|
- name: Publish platform packages and root
|
|
221
228
|
working-directory: node/mq-bridge-node
|
|
222
229
|
env:
|
|
223
|
-
#
|
|
224
|
-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
230
|
+
# No NODE_AUTH_TOKEN: publishing is OIDC-only (trusted publishing).
|
|
225
231
|
NPM_CONFIG_PROVENANCE: "true"
|
|
226
232
|
run: |
|
|
227
233
|
set -e
|
|
@@ -39,6 +39,25 @@ jobs:
|
|
|
39
39
|
os: linux
|
|
40
40
|
target: aarch64
|
|
41
41
|
args: --release --out dist --find-interpreter --no-default-features
|
|
42
|
+
# musl/Alpine wheels for the basic package. basic uses the aws-lc-sys
|
|
43
|
+
# crypto provider (amqp + aws pull it in, same as full); aws-lc-sys
|
|
44
|
+
# compiles its C natively under musl given cmake + gcc, which
|
|
45
|
+
# before-script-linux installs in the musllinux container. The full
|
|
46
|
+
# wheel has no musl build (rdkafka makes it a separate effort).
|
|
47
|
+
- package: mq-bridge-py-basic
|
|
48
|
+
pyproject: pyproject-basic.toml
|
|
49
|
+
runner: ubuntu-latest
|
|
50
|
+
os: linux
|
|
51
|
+
target: x86_64
|
|
52
|
+
manylinux: musllinux_1_2
|
|
53
|
+
args: --release --out dist --find-interpreter --no-default-features
|
|
54
|
+
- package: mq-bridge-py-basic
|
|
55
|
+
pyproject: pyproject-basic.toml
|
|
56
|
+
runner: ubuntu-24.04-arm
|
|
57
|
+
os: linux
|
|
58
|
+
target: aarch64
|
|
59
|
+
manylinux: musllinux_1_2
|
|
60
|
+
args: --release --out dist --find-interpreter --no-default-features
|
|
42
61
|
- package: mq-bridge-py-basic
|
|
43
62
|
pyproject: pyproject-basic.toml
|
|
44
63
|
runner: macos-15-intel
|
|
@@ -126,12 +145,18 @@ jobs:
|
|
|
126
145
|
target: ${{ matrix.target }}
|
|
127
146
|
args: ${{ matrix.args }}
|
|
128
147
|
sccache: "true"
|
|
129
|
-
manylinux: auto
|
|
148
|
+
manylinux: ${{ matrix.manylinux || 'auto' }}
|
|
149
|
+
# amqp/aws (and full's kafka) pull aws-lc-sys, which compiles its C with
|
|
150
|
+
# cmake. manylinux containers already ship it; the musllinux (Alpine)
|
|
151
|
+
# container does not, so install it there. Guarded so it's a no-op
|
|
152
|
+
# wherever cmake is already present. Only runs for linux builds.
|
|
153
|
+
before-script-linux: |
|
|
154
|
+
command -v cmake >/dev/null 2>&1 || apk add --no-cache cmake gcc g++ make musl-dev perl
|
|
130
155
|
|
|
131
156
|
- name: Upload wheels
|
|
132
157
|
uses: actions/upload-artifact@v4
|
|
133
158
|
with:
|
|
134
|
-
name: wheels-${{ matrix.package }}-${{ matrix.os }}-${{ matrix.target }}
|
|
159
|
+
name: wheels-${{ matrix.package }}-${{ matrix.os }}-${{ matrix.target }}-${{ matrix.manylinux || 'auto' }}
|
|
135
160
|
path: python/mq-bridge-py/dist
|
|
136
161
|
|
|
137
162
|
build-sdists:
|
|
@@ -1576,6 +1576,29 @@ dependencies = [
|
|
|
1576
1576
|
"syn",
|
|
1577
1577
|
]
|
|
1578
1578
|
|
|
1579
|
+
[[package]]
|
|
1580
|
+
name = "dlopen2"
|
|
1581
|
+
version = "0.8.2"
|
|
1582
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1583
|
+
checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4"
|
|
1584
|
+
dependencies = [
|
|
1585
|
+
"dlopen2_derive",
|
|
1586
|
+
"libc",
|
|
1587
|
+
"once_cell",
|
|
1588
|
+
"winapi",
|
|
1589
|
+
]
|
|
1590
|
+
|
|
1591
|
+
[[package]]
|
|
1592
|
+
name = "dlopen2_derive"
|
|
1593
|
+
version = "0.4.3"
|
|
1594
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1595
|
+
checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f"
|
|
1596
|
+
dependencies = [
|
|
1597
|
+
"proc-macro2",
|
|
1598
|
+
"quote",
|
|
1599
|
+
"syn",
|
|
1600
|
+
]
|
|
1601
|
+
|
|
1579
1602
|
[[package]]
|
|
1580
1603
|
name = "dlv-list"
|
|
1581
1604
|
version = "0.5.2"
|
|
@@ -2775,6 +2798,10 @@ name = "libmqm-sys"
|
|
|
2775
2798
|
version = "0.10.2"
|
|
2776
2799
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2777
2800
|
checksum = "d888946090ed1e149d6978906143db293b9232c9a8cca0b369a1dc4668d9082a"
|
|
2801
|
+
dependencies = [
|
|
2802
|
+
"dlopen2",
|
|
2803
|
+
"libc",
|
|
2804
|
+
]
|
|
2778
2805
|
|
|
2779
2806
|
[[package]]
|
|
2780
2807
|
name = "libsqlite3-sys"
|
|
@@ -3082,7 +3109,7 @@ dependencies = [
|
|
|
3082
3109
|
|
|
3083
3110
|
[[package]]
|
|
3084
3111
|
name = "mq-bridge"
|
|
3085
|
-
version = "0.3.
|
|
3112
|
+
version = "0.3.2"
|
|
3086
3113
|
dependencies = [
|
|
3087
3114
|
"anyhow",
|
|
3088
3115
|
"arc-swap",
|
|
@@ -3107,6 +3134,7 @@ dependencies = [
|
|
|
3107
3134
|
"hyper-rustls 0.27.9",
|
|
3108
3135
|
"hyper-util",
|
|
3109
3136
|
"lapin",
|
|
3137
|
+
"libmqm-sys",
|
|
3110
3138
|
"metrics",
|
|
3111
3139
|
"metrics-util",
|
|
3112
3140
|
"mongodb",
|
|
@@ -3147,20 +3175,32 @@ dependencies = [
|
|
|
3147
3175
|
"zeromq",
|
|
3148
3176
|
]
|
|
3149
3177
|
|
|
3178
|
+
[[package]]
|
|
3179
|
+
name = "mq-bridge-bindings-common"
|
|
3180
|
+
version = "0.3.2"
|
|
3181
|
+
dependencies = [
|
|
3182
|
+
"anyhow",
|
|
3183
|
+
"fast-uuid-v7",
|
|
3184
|
+
"mq-bridge",
|
|
3185
|
+
"serde",
|
|
3186
|
+
"serde_yaml_ng",
|
|
3187
|
+
"tokio",
|
|
3188
|
+
]
|
|
3189
|
+
|
|
3150
3190
|
[[package]]
|
|
3151
3191
|
name = "mq-bridge-node"
|
|
3152
|
-
version = "0.3.
|
|
3192
|
+
version = "0.3.2"
|
|
3153
3193
|
dependencies = [
|
|
3154
3194
|
"anyhow",
|
|
3155
3195
|
"async-trait",
|
|
3156
3196
|
"bytes",
|
|
3157
3197
|
"fast-uuid-v7",
|
|
3158
3198
|
"mq-bridge",
|
|
3199
|
+
"mq-bridge-bindings-common",
|
|
3159
3200
|
"napi",
|
|
3160
3201
|
"napi-build",
|
|
3161
3202
|
"napi-derive",
|
|
3162
3203
|
"schemars",
|
|
3163
|
-
"serde",
|
|
3164
3204
|
"serde_json",
|
|
3165
3205
|
"serde_yaml_ng",
|
|
3166
3206
|
"tokio",
|
|
@@ -3169,13 +3209,14 @@ dependencies = [
|
|
|
3169
3209
|
|
|
3170
3210
|
[[package]]
|
|
3171
3211
|
name = "mq-bridge-py"
|
|
3172
|
-
version = "0.3.
|
|
3212
|
+
version = "0.3.2"
|
|
3173
3213
|
dependencies = [
|
|
3174
3214
|
"anyhow",
|
|
3175
3215
|
"async-trait",
|
|
3176
3216
|
"bytes",
|
|
3177
3217
|
"fast-uuid-v7",
|
|
3178
3218
|
"mq-bridge",
|
|
3219
|
+
"mq-bridge-bindings-common",
|
|
3179
3220
|
"pyo3",
|
|
3180
3221
|
"rustls 0.23.40",
|
|
3181
3222
|
"schemars",
|
|
@@ -3193,6 +3234,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
3193
3234
|
checksum = "298bea58d1259df694242dc973b07ce156660c897a7b3a421e324b1f37905cdc"
|
|
3194
3235
|
dependencies = [
|
|
3195
3236
|
"derive_more",
|
|
3237
|
+
"dlopen2",
|
|
3196
3238
|
"libmqm-constants",
|
|
3197
3239
|
"libmqm-default",
|
|
3198
3240
|
"libmqm-sys",
|
|
@@ -12,11 +12,11 @@ keywords = ["messaging", "kafka", "nats", "amqp", "cqrs"]
|
|
|
12
12
|
categories = ["asynchronous", "network-programming"]
|
|
13
13
|
|
|
14
14
|
[workspace]
|
|
15
|
-
members = ["python/mq-bridge-py"]
|
|
15
|
+
members = ["bindings-common", "python/mq-bridge-py"]
|
|
16
16
|
resolver = "2"
|
|
17
17
|
|
|
18
18
|
[workspace.package]
|
|
19
|
-
version = "0.3.
|
|
19
|
+
version = "0.3.2"
|
|
20
20
|
|
|
21
21
|
[workspace.dependencies]
|
|
22
22
|
anyhow = "1.0"
|
|
@@ -106,8 +106,13 @@ async-nats = { version = "0.49", optional = true }
|
|
|
106
106
|
# or `tokio-rustls?/aws_lc_rs` from the crypto features below.
|
|
107
107
|
rumqttc = { version = "0.25", default-features = false, features = ["use-rustls-no-provider"], optional = true }
|
|
108
108
|
|
|
109
|
-
# IBM MQ
|
|
110
|
-
|
|
109
|
+
# IBM MQ. default-features off so the version/provider features are chosen per
|
|
110
|
+
# feature below: `ibm-mq` loads the client at runtime via dlopen (no SDK at
|
|
111
|
+
# build), `ibm-mq-static` links the IBM C client at build (needs the SDK).
|
|
112
|
+
mqi = { version = "0.3", optional = true, default-features = false }
|
|
113
|
+
# Direct dep only for the dlopen path, so we can name MqmContainer to load the
|
|
114
|
+
# client at runtime. Features are unified from mqi/dlopen2.
|
|
115
|
+
libmqm-sys = { version = "0.10", optional = true, default-features = false }
|
|
111
116
|
|
|
112
117
|
# HTTP
|
|
113
118
|
arc-swap = { version = "1", optional = true }
|
|
@@ -154,7 +159,11 @@ protoc-bin-vendored = { version = "3.0", optional = true }
|
|
|
154
159
|
[features]
|
|
155
160
|
default = []
|
|
156
161
|
middleware = ["metrics", "dedup"]
|
|
157
|
-
|
|
162
|
+
# ibm-mq (dlopen) is safe to include: it needs no IBM SDK at build, and at
|
|
163
|
+
# runtime the client is loaded lazily only when an ibm-mq endpoint is opened
|
|
164
|
+
# (clear error if the client isn't installed). Use `ibm-mq-static` instead for
|
|
165
|
+
# static linking.
|
|
166
|
+
full = ["middleware", "mongodb", "kafka", "amqp", "nats", "mqtt", "http", "aws", "zeromq", "sled", "grpc", "sqlx", "websocket", "rustls-aws-lc", "ibm-mq"]
|
|
158
167
|
|
|
159
168
|
# Functionality features
|
|
160
169
|
dedup = ["sled"]
|
|
@@ -183,7 +192,16 @@ mqtt = ["rumqttc", "rustls", "tokio-rustls", "rustls-pemfile", "url"]
|
|
|
183
192
|
http = ["dep:arc-swap", "hyper", "hyper-util", "hyper-rustls", "http-body-util", "dep:http-body", "rustls", "tokio-rustls", "rustls-pemfile", "webpki-roots", "h2", "dep:flate2", "dep:base64"]
|
|
184
193
|
websocket = ["dep:tokio-websockets"]
|
|
185
194
|
aws = ["aws-config", "aws-sdk-sqs", "aws-sdk-sns", "dep:base64"]
|
|
186
|
-
|
|
195
|
+
# Runtime-loaded IBM MQ client via dlopen: builds with no SDK present; the IBM
|
|
196
|
+
# redistributable client is only needed at runtime, and only if an ibm-mq
|
|
197
|
+
# endpoint is actually used.
|
|
198
|
+
# mqi/mqai is required because mqi's always-compiled (doc-hidden) test module
|
|
199
|
+
# references MqaiLibrary on the dlopen2 path; it adds only pregen bindings, no SDK.
|
|
200
|
+
ibm-mq = ["dep:mqi", "mqi/dlopen2", "mqi/mqai", "mqi/mqc_9_2_0_0", "dep:libmqm-sys", "libmqm-sys/dlopen2"]
|
|
201
|
+
# Static-link IBM MQ client (needs the IBM SDK at build time). mqc_9_2_0_0 matches
|
|
202
|
+
# the crate's previous default so behavior is unchanged. Enabling this alongside
|
|
203
|
+
# `ibm-mq` (dlopen) forces static linking — the SDK is then required at build.
|
|
204
|
+
ibm-mq-static = ["dep:mqi", "mqi/link", "mqi/mqc_9_2_0_0"]
|
|
187
205
|
zeromq = ["dep:zeromq"]
|
|
188
206
|
# Note: The grpc feature requires protobuf-src which can significantly increase build times.
|
|
189
207
|
grpc = ["tonic", "prost", "tokio-stream", "tonic-prost", "tonic-prost-build", "protoc-bin-vendored", "rustls"]
|