mq-bridge-py-basic 0.4.7__tar.gz → 0.4.10__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.4.10/.cargo/config.toml +17 -0
- mq_bridge_py_basic-0.4.10/.dockerignore +18 -0
- mq_bridge_py_basic-0.4.10/.github/dependabot.yml +59 -0
- mq_bridge_py_basic-0.4.10/.github/workflows/app.yml +321 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/.github/workflows/benchmark.yml +13 -13
- mq_bridge_py_basic-0.4.10/.github/workflows/build-node.yml +154 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/.github/workflows/ci.yml +31 -11
- mq_bridge_py_basic-0.4.10/.github/workflows/conda.yml +60 -0
- mq_bridge_py_basic-0.4.10/.github/workflows/docs.yml +84 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/.github/workflows/ibm-mq.yml +15 -6
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/.github/workflows/node.yml +9 -14
- mq_bridge_py_basic-0.4.10/.github/workflows/publish-node.yml +143 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/.github/workflows/publish-python.yml +45 -16
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/.github/workflows/python.yml +11 -17
- mq_bridge_py_basic-0.4.10/.github/workflows/release.yml +1281 -0
- mq_bridge_py_basic-0.4.10/.github/workflows/test-matrix.yml +63 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/.gitignore +8 -2
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/CHANGELOG.md +137 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/CLAUDE.md +1 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/Cargo.lock +353 -258
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/Cargo.toml +46 -11
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/PKG-INFO +1 -1
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/README.md +10 -7
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/benches/ETL_BENCHMARKS.md +3 -3
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/bindings-common/Cargo.toml +3 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/build.rs +15 -2
- mq_bridge_py_basic-0.4.10/docs/CONFIGURATION.md +719 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/docs/DELIVERY.md +2 -0
- mq_bridge_py_basic-0.4.10/docs/GRPC.md +263 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/docs/PLUGINS.md +1 -1
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/docs/REFERENCE.md +60 -11
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/mq-bridge.schema.json +295 -5
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/mq_bridge/config.py +8 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/mq_bridge/config.pyi +40 -1
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/Cargo.toml +3 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/analysis/http/mq_bridge_http_profile.rs +5 -0
- mq_bridge_py_basic-0.4.10/scripts/sync-version.mjs +193 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/checkpoint.rs +2 -0
- mq_bridge_py_basic-0.4.10/src/endpoints/dir_spool/mod.rs +1602 -0
- mq_bridge_py_basic-0.4.10/src/endpoints/dir_spool/tests.rs +1806 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/file/mod.rs +16 -2
- mq_bridge_py_basic-0.4.10/src/endpoints/grpc/consumer.rs +322 -0
- mq_bridge_py_basic-0.4.10/src/endpoints/grpc/dynamic.rs +859 -0
- mq_bridge_py_basic-0.4.10/src/endpoints/grpc/mod.rs +249 -0
- mq_bridge_py_basic-0.4.7/src/endpoints/grpc.proto → mq_bridge_py_basic-0.4.10/src/endpoints/grpc/proto/mqbridge/bridge.proto +11 -8
- mq_bridge_py_basic-0.4.10/src/endpoints/grpc/publisher.rs +254 -0
- mq_bridge_py_basic-0.4.10/src/endpoints/grpc/server.rs +1000 -0
- mq_bridge_py_basic-0.4.10/src/endpoints/grpc/tests.rs +1537 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/http/mod.rs +4 -26
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/http/tests.rs +43 -5
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/kafka.rs +164 -22
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/memory/endpoint.rs +90 -7
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/mod.rs +281 -8
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/mongodb/publisher.rs +16 -22
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/object_store.rs +60 -2
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/structural/request.rs +292 -1
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/structural/stream_buffer.rs +125 -18
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/zeromq/codec.rs +64 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/event_store.rs +44 -20
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/lib.rs +1 -1
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/cookie_jar.rs +103 -13
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/encryption.rs +63 -8
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/filter.rs +322 -27
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/metrics.rs +47 -22
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/retry.rs +8 -1
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/weak_join.rs +13 -20
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/models/builders.rs +43 -3
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/models/defaults.rs +44 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/models/secrets.rs +52 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/models/serde_support.rs +3 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/models/tests.rs +39 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/models.rs +276 -12
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/plugin/message.rs +9 -6
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/plugin/sdk.rs +136 -116
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/route.rs +390 -44
- mq_bridge_py_basic-0.4.10/src/support/compression.rs +360 -0
- mq_bridge_py_basic-0.4.10/src/support/compression_pool.rs +236 -0
- mq_bridge_py_basic-0.4.10/src/support/crypto.rs +554 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/support/crypto_envelope.rs +4 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/support/interpolation.rs +37 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/support/mod.rs +2 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/support/plugin_abi.rs +2 -2
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/test_utils.rs +7 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/traits.rs +44 -0
- mq_bridge_py_basic-0.4.10/tests/compat/python/bridge_client.py +68 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/grpc_tls.rs +0 -2
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/http.rs +1 -6
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/http_tls.rs +1 -6
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/websocket.rs +2 -6
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/websocket_test.rs +1 -5
- mq_bridge_py_basic-0.4.7/.github/dependabot.yml +0 -20
- mq_bridge_py_basic-0.4.7/.github/workflows/publish-node.yml +0 -271
- mq_bridge_py_basic-0.4.7/.github/workflows/release.yml +0 -73
- mq_bridge_py_basic-0.4.7/.github/workflows/test-matrix.yml +0 -54
- mq_bridge_py_basic-0.4.7/docs/CONFIGURATION.md +0 -421
- mq_bridge_py_basic-0.4.7/src/endpoints/grpc.rs +0 -2347
- mq_bridge_py_basic-0.4.7/src/support/compression.rs +0 -179
- mq_bridge_py_basic-0.4.7/src/support/crypto.rs +0 -243
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/CONTRIBUTING.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/LICENSE +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/LICENSE.python +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/SECURITY.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/benches/performance_bench.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/benches/router_bench.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/benches/zeromq_backends.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/bindings-common/src/lib.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/bindings-common/src/logging.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/deny.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/docs/ARCHITECTURE.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/docs/EXTENDING.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/examples/ipc_worker_queue.yaml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/mq_bridge/__init__.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/mq_bridge/__init__.pyi +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/mq_bridge/plugin_packaging.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/mq_bridge/py.typed +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/package-lock.json +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/pyproject.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/LICENSE.python +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/README.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/analysis/bench_http_native.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/example.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/examples/bench_memory.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/examples/bench_memory.yaml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/examples/consume_pull.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/examples/dlt_source.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/examples/json_route.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/examples/memory.yaml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/examples/raw_route.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/pyproject-basic.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/pyproject-reduced.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/scripts/gen_config_types.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/src/lib.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/tests/test_config_types.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/tests/test_custom_endpoint.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/tests/test_logging.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/tests/test_packaging.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/tests/test_performance_smoke.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/tests/test_plugin_package.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/tests/test_public_api.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/tests/test_routes.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/python/mq-bridge-py/uv.lock +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/analysis/benches/metadata_bench.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/analysis/debug_ibm_mq_tls.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/analysis/http/analyze_xctrace_time_profile.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/analysis/http/http_flamegraph.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/analysis/http/run_http_ladder.sh +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/ci/format_bench_output.sh +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/httparena/README.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/httparena/frameworks/mq-bridge-py/Dockerfile +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/httparena/frameworks/mq-bridge-py/meta.json +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/httparena/frameworks/mq-bridge-py/server.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/techempower/Python/mq-bridge-py/README.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/techempower/Python/mq-bridge-py/benchmark_config.json +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/techempower/Python/mq-bridge-py/mq-bridge-py.dockerfile +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/techempower/Python/mq-bridge-py/server.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/techempower/README.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/techempower/postgres.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/techempower/seed.sql +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/techempower/verify.sh +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/the-benchmarker/README.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/the-benchmarker/python/mq-bridge-py/config.yaml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/the-benchmarker/python/mq-bridge-py/pyproject.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/scripts/the-benchmarker/python/mq-bridge-py/server.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/canonical_message.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/command_handler.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/amqp.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/aws.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/clickhouse.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/file/tests.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/http/publisher.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/http/stream.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/ibm_mq.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/memory/framed.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/memory/ipc_unix.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/memory/ipc_windows.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/memory/memory_transport.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/memory/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/memory/transport.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/mongodb/consumer.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/mongodb/dedup.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/mongodb/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/mongodb/readers.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/mongodb/tests.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/mqtt.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/nats.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/poll.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/postgres/VENDORED.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/postgres/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/postgres/pgoutput/decoder.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/postgres/pgoutput/messages.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/postgres/pgoutput/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/postgres/pgoutput/registry.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/postgres/pgoutput/values.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/postgres/replication.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/postgres/state.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/redis_streams.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/sled.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/sqlx/dedup.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/sqlx/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/sqlx/tests.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/structural/fanout.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/structural/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/structural/null.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/structural/reader.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/structural/response.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/structural/static_endpoint.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/structural/switch.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/websocket.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/zeromq/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/zeromq/omq.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/endpoints/zeromq/zmq.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/errors.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/event_handler.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/extensions.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/buffer.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/compression.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/deduplication.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/deferred_commit.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/delay.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/dlq.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/id.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/limiter.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/random_panic.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/raw_json.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/transform/coerce.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/transform/compiled.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/transform/error.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/transform/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/transform/path.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/transform/schema.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/middleware/transform/tests.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/outcomes.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/plugin/conformance.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/plugin/endpoint.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/plugin/middleware.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/plugin/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/plugin/test_support.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/publisher.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/response.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/support/base64_engine.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/support/connection_registry.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/support/source_ranges.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/src/type_handler.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/README.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/armature_integration.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/amqp.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/aws.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/clickhouse.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/config.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/amqp.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/aws.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/clickhouse.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/ibm-mq-certs/client.crl +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/ibm-mq-certs/client.kdb +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/ibm-mq-certs/client.p12 +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/ibm-mq-certs/client.rdb +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/ibm-mq-certs/client.sth +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/ibm_mq.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/ibm_mq_tls.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/kafka-tls.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/kafka.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/mariadb.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/mongodb-replica.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/mongodb-tls.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/mongodb.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/mosquitto.conf +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/mosquitto_performance.conf +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/mosquitto_persistence.conf +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/mq_init.mqsc +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/mq_init_tls.mqsc +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/mqtt.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/mqtt_performance.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/mysql.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/nats.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/object_store.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/postgres.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/postgres_cdc.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/docker-compose/redis.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/file.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/grpc.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/ibm_mq.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/ibm_mq_tls.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/ipc.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/kafka.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/kafka_tls.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/logic_test.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/mariadb.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/memory.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/mongodb.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/mongodb_raw.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/mongodb_tls.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/mqtt.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/mysql.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/nats.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/object_store.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/performance_static.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/postgres.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/postgres_cdc.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/redis_streams.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/route.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/scripts/gen_certs.sh +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/sqlite.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/tls_helpers.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration/zeromq.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/integration_test.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/memory_leak_test.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/ref_test.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/reference_docs_test.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/sqlite_test.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/tls_example.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.10}/tests/unit_tests.md +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
|
|
13
|
+
# Pinned explicitly so a --manifest-path build of the app workspace still writes
|
|
14
|
+
# here instead of defaulting to apps/mq-bridge-app/target. One target dir for the
|
|
15
|
+
# engine, the app, tauri and maturin.
|
|
16
|
+
[build]
|
|
17
|
+
target-dir = "target"
|
|
@@ -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,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
|
|
@@ -20,7 +20,7 @@ jobs:
|
|
|
20
20
|
permissions:
|
|
21
21
|
contents: read
|
|
22
22
|
steps:
|
|
23
|
-
- uses: actions/checkout@
|
|
23
|
+
- uses: actions/checkout@v7
|
|
24
24
|
with:
|
|
25
25
|
persist-credentials: false
|
|
26
26
|
|
|
@@ -44,7 +44,7 @@ jobs:
|
|
|
44
44
|
cp "$BIN_PATH" ./performance_bench_bin
|
|
45
45
|
|
|
46
46
|
- name: Upload bench binary
|
|
47
|
-
uses: actions/upload-artifact@
|
|
47
|
+
uses: actions/upload-artifact@v7
|
|
48
48
|
with:
|
|
49
49
|
name: performance-bench-bin
|
|
50
50
|
path: performance_bench_bin
|
|
@@ -60,12 +60,12 @@ jobs:
|
|
|
60
60
|
permissions:
|
|
61
61
|
contents: read
|
|
62
62
|
steps:
|
|
63
|
-
- uses: actions/checkout@
|
|
63
|
+
- uses: actions/checkout@v7
|
|
64
64
|
with:
|
|
65
65
|
persist-credentials: false
|
|
66
66
|
|
|
67
67
|
- name: Download bench binary
|
|
68
|
-
uses: actions/download-artifact@
|
|
68
|
+
uses: actions/download-artifact@v8
|
|
69
69
|
with:
|
|
70
70
|
name: performance-bench-bin
|
|
71
71
|
|
|
@@ -87,7 +87,7 @@ jobs:
|
|
|
87
87
|
./scripts/ci/format_bench_output.sh raw_output_streams.txt output_streams.txt
|
|
88
88
|
|
|
89
89
|
- name: Upload shard output
|
|
90
|
-
uses: actions/upload-artifact@
|
|
90
|
+
uses: actions/upload-artifact@v7
|
|
91
91
|
with:
|
|
92
92
|
name: bench-output-streams
|
|
93
93
|
path: |
|
|
@@ -102,12 +102,12 @@ jobs:
|
|
|
102
102
|
permissions:
|
|
103
103
|
contents: read
|
|
104
104
|
steps:
|
|
105
|
-
- uses: actions/checkout@
|
|
105
|
+
- uses: actions/checkout@v7
|
|
106
106
|
with:
|
|
107
107
|
persist-credentials: false
|
|
108
108
|
|
|
109
109
|
- name: Download bench binary
|
|
110
|
-
uses: actions/download-artifact@
|
|
110
|
+
uses: actions/download-artifact@v8
|
|
111
111
|
with:
|
|
112
112
|
name: performance-bench-bin
|
|
113
113
|
|
|
@@ -129,7 +129,7 @@ jobs:
|
|
|
129
129
|
./scripts/ci/format_bench_output.sh raw_output_database.txt output_database.txt
|
|
130
130
|
|
|
131
131
|
- name: Upload shard output
|
|
132
|
-
uses: actions/upload-artifact@
|
|
132
|
+
uses: actions/upload-artifact@v7
|
|
133
133
|
with:
|
|
134
134
|
name: bench-output-database
|
|
135
135
|
path: |
|
|
@@ -144,12 +144,12 @@ jobs:
|
|
|
144
144
|
permissions:
|
|
145
145
|
contents: read
|
|
146
146
|
steps:
|
|
147
|
-
- uses: actions/checkout@
|
|
147
|
+
- uses: actions/checkout@v7
|
|
148
148
|
with:
|
|
149
149
|
persist-credentials: false
|
|
150
150
|
|
|
151
151
|
- name: Download bench binary
|
|
152
|
-
uses: actions/download-artifact@
|
|
152
|
+
uses: actions/download-artifact@v8
|
|
153
153
|
with:
|
|
154
154
|
name: performance-bench-bin
|
|
155
155
|
|
|
@@ -165,7 +165,7 @@ jobs:
|
|
|
165
165
|
./scripts/ci/format_bench_output.sh raw_output_dockerless.txt output_dockerless.txt
|
|
166
166
|
|
|
167
167
|
- name: Upload shard output
|
|
168
|
-
uses: actions/upload-artifact@
|
|
168
|
+
uses: actions/upload-artifact@v7
|
|
169
169
|
with:
|
|
170
170
|
name: bench-output-dockerless
|
|
171
171
|
path: |
|
|
@@ -188,10 +188,10 @@ jobs:
|
|
|
188
188
|
contents: write
|
|
189
189
|
deployments: write
|
|
190
190
|
steps:
|
|
191
|
-
- uses: actions/checkout@
|
|
191
|
+
- uses: actions/checkout@v7
|
|
192
192
|
|
|
193
193
|
- name: Download shard outputs
|
|
194
|
-
uses: actions/download-artifact@
|
|
194
|
+
uses: actions/download-artifact@v8
|
|
195
195
|
with:
|
|
196
196
|
pattern: bench-output-*
|
|
197
197
|
merge-multiple: true
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
name: Build Node Addons
|
|
2
|
+
|
|
3
|
+
# Builds the napi-rs addon for every published platform and uploads them as
|
|
4
|
+
# run artifacts (`bindings-<target>` plus a single `loader`). publish-node.yml
|
|
5
|
+
# consumes those artifacts and does the actual npm publish.
|
|
6
|
+
#
|
|
7
|
+
# Split from publish-node.yml so release.yml can start these builds as soon as
|
|
8
|
+
# the test gate is green, in parallel with the docker and bundle builds, while
|
|
9
|
+
# the upload still waits for the GitHub release to go public.
|
|
10
|
+
#
|
|
11
|
+
# Linux is built inside a Debian 11 (glibc 2.31) container so the binaries run on
|
|
12
|
+
# RHEL 9 (glibc 2.34), Debian 11/12 and Ubuntu 20.04+ - covering the priority
|
|
13
|
+
# server targets. macOS/Windows build natively.
|
|
14
|
+
|
|
15
|
+
on:
|
|
16
|
+
workflow_call:
|
|
17
|
+
workflow_dispatch:
|
|
18
|
+
|
|
19
|
+
env:
|
|
20
|
+
CARGO_TERM_COLOR: always
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
build-linux:
|
|
24
|
+
name: Build ${{ matrix.target }}
|
|
25
|
+
runs-on: ${{ matrix.runner }}
|
|
26
|
+
permissions:
|
|
27
|
+
contents: read
|
|
28
|
+
container:
|
|
29
|
+
# Debian 11 bullseye => glibc 2.31 baseline (runs on RHEL 9 / Debian 11+ /
|
|
30
|
+
# Ubuntu 20.04+). Pulled natively per arch on the matching runner.
|
|
31
|
+
image: node:20-bullseye
|
|
32
|
+
strategy:
|
|
33
|
+
fail-fast: false
|
|
34
|
+
matrix:
|
|
35
|
+
include:
|
|
36
|
+
- runner: ubuntu-22.04
|
|
37
|
+
target: x86_64-unknown-linux-gnu
|
|
38
|
+
- runner: ubuntu-22.04-arm
|
|
39
|
+
target: aarch64-unknown-linux-gnu
|
|
40
|
+
steps:
|
|
41
|
+
- uses: actions/checkout@v7
|
|
42
|
+
|
|
43
|
+
# rdkafka builds librdkafka from source (cc/make) and aws-lc-sys needs
|
|
44
|
+
# cmake; the slim node image lacks these.
|
|
45
|
+
- name: Install build toolchain
|
|
46
|
+
run: |
|
|
47
|
+
apt-get update -qq
|
|
48
|
+
apt-get install -y --no-install-recommends build-essential cmake perl pkg-config
|
|
49
|
+
|
|
50
|
+
- name: Install Rust toolchain
|
|
51
|
+
run: |
|
|
52
|
+
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
|
|
53
|
+
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
54
|
+
|
|
55
|
+
# Regenerate package.json/lock from the Cargo workspace version (source of
|
|
56
|
+
# truth) BEFORE npm ci, so a drifted committed lock can't fail the build.
|
|
57
|
+
- name: Sync version from Cargo workspace
|
|
58
|
+
working-directory: node/mq-bridge-node
|
|
59
|
+
run: npm run sync-version
|
|
60
|
+
|
|
61
|
+
- name: Install Node dependencies
|
|
62
|
+
working-directory: node/mq-bridge-node
|
|
63
|
+
run: npm ci
|
|
64
|
+
|
|
65
|
+
- name: Build native addon (full)
|
|
66
|
+
working-directory: node/mq-bridge-node
|
|
67
|
+
env:
|
|
68
|
+
CARGO_NET_RETRY: "5"
|
|
69
|
+
CARGO_NET_GIT_FETCH_WITH_CLI: "true"
|
|
70
|
+
# curl's HTTP/2 multiplexing flakes on Windows runners ("[55] Failed
|
|
71
|
+
# sending data to the peer"); force HTTP/1.1 so fetches are reliable.
|
|
72
|
+
CARGO_HTTP_MULTIPLEXING: "false"
|
|
73
|
+
run: >-
|
|
74
|
+
npx napi build --platform --release --strip
|
|
75
|
+
--target ${{ matrix.target }}
|
|
76
|
+
--js native.js --dts native.d.ts
|
|
77
|
+
|
|
78
|
+
- name: Upload addon
|
|
79
|
+
uses: actions/upload-artifact@v7
|
|
80
|
+
with:
|
|
81
|
+
name: bindings-${{ matrix.target }}
|
|
82
|
+
path: node/mq-bridge-node/*.node
|
|
83
|
+
if-no-files-found: error
|
|
84
|
+
|
|
85
|
+
# The root package ships the generated loader; upload it once.
|
|
86
|
+
- name: Upload loader
|
|
87
|
+
if: matrix.target == 'x86_64-unknown-linux-gnu'
|
|
88
|
+
uses: actions/upload-artifact@v7
|
|
89
|
+
with:
|
|
90
|
+
name: loader
|
|
91
|
+
path: |
|
|
92
|
+
node/mq-bridge-node/native.js
|
|
93
|
+
node/mq-bridge-node/native.d.ts
|
|
94
|
+
if-no-files-found: error
|
|
95
|
+
|
|
96
|
+
build-native:
|
|
97
|
+
name: Build ${{ matrix.target }}
|
|
98
|
+
runs-on: ${{ matrix.runner }}
|
|
99
|
+
permissions:
|
|
100
|
+
contents: read
|
|
101
|
+
strategy:
|
|
102
|
+
fail-fast: false
|
|
103
|
+
matrix:
|
|
104
|
+
include:
|
|
105
|
+
- runner: macos-15-intel
|
|
106
|
+
target: x86_64-apple-darwin
|
|
107
|
+
- runner: macos-latest
|
|
108
|
+
target: aarch64-apple-darwin
|
|
109
|
+
- runner: windows-latest
|
|
110
|
+
target: x86_64-pc-windows-msvc
|
|
111
|
+
steps:
|
|
112
|
+
- uses: actions/checkout@v7
|
|
113
|
+
|
|
114
|
+
- name: Set up Node
|
|
115
|
+
uses: actions/setup-node@v7
|
|
116
|
+
with:
|
|
117
|
+
node-version: "20"
|
|
118
|
+
cache: npm
|
|
119
|
+
cache-dependency-path: node/mq-bridge-node/package-lock.json
|
|
120
|
+
|
|
121
|
+
- name: Install Rust toolchain
|
|
122
|
+
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
|
|
123
|
+
with:
|
|
124
|
+
targets: ${{ matrix.target }}
|
|
125
|
+
|
|
126
|
+
# Regenerate package.json/lock from the Cargo workspace version (source of
|
|
127
|
+
# truth) BEFORE npm ci, so a drifted committed lock can't fail the build.
|
|
128
|
+
- name: Sync version from Cargo workspace
|
|
129
|
+
working-directory: node/mq-bridge-node
|
|
130
|
+
run: npm run sync-version
|
|
131
|
+
|
|
132
|
+
- name: Install Node dependencies
|
|
133
|
+
working-directory: node/mq-bridge-node
|
|
134
|
+
run: npm ci
|
|
135
|
+
|
|
136
|
+
- name: Build native addon (full)
|
|
137
|
+
working-directory: node/mq-bridge-node
|
|
138
|
+
env:
|
|
139
|
+
CARGO_NET_RETRY: "5"
|
|
140
|
+
CARGO_NET_GIT_FETCH_WITH_CLI: "true"
|
|
141
|
+
# curl's HTTP/2 multiplexing flakes on Windows runners ("[55] Failed
|
|
142
|
+
# sending data to the peer"); force HTTP/1.1 so fetches are reliable.
|
|
143
|
+
CARGO_HTTP_MULTIPLEXING: "false"
|
|
144
|
+
run: >-
|
|
145
|
+
npx napi build --platform --release --strip
|
|
146
|
+
--target ${{ matrix.target }}
|
|
147
|
+
--js native.js --dts native.d.ts
|
|
148
|
+
|
|
149
|
+
- name: Upload addon
|
|
150
|
+
uses: actions/upload-artifact@v7
|
|
151
|
+
with:
|
|
152
|
+
name: bindings-${{ matrix.target }}
|
|
153
|
+
path: node/mq-bridge-node/*.node
|
|
154
|
+
if-no-files-found: error
|