mq-bridge-basic 0.4.20__tar.gz → 1.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mq_bridge_basic-1.0.1/.gitattributes +1 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/app.yml +103 -26
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/benchmark.yml +2 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/ci.yml +55 -3
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/ibm-mq.yml +24 -21
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/publish-python.yml +11 -4
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/release.yml +114 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/CHANGELOG.md +922 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/Cargo.lock +80 -47
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/Cargo.toml +44 -22
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/PKG-INFO +1 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/README.md +11 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/THIRD_PARTY_LICENSES.txt +517 -408
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/benches/csv_to_json_bench.rs +2 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/benches/performance_bench.rs +2 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/bindings-common/Cargo.toml +1 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/bindings-common/src/lib.rs +31 -10
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/build.rs +2 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/docs/ARCHITECTURE.md +5 -1
- mq_bridge_basic-1.0.1/docs/CAPABILITIES.md +201 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/docs/CONFIGURATION.md +77 -12
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/docs/DELIVERY.md +46 -13
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/docs/EXTENDING.md +1 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/docs/GRPC.md +5 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/docs/PLUGINS.md +17 -4
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/docs/REFERENCE.md +167 -28
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/docs/THIRD_PARTY_LICENSES.md +9 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/postgres-cdc-to-qdrant/README.md +3 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/include/mq_bridge.h +1 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/llms.txt +4 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/mq-bridge.schema.json +4930 -4047
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/mq_bridge/config.py +26 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/mq_bridge/config.pyi +137 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/Cargo.toml +1 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/THIRD_PARTY_LICENSES.txt +517 -408
- mq_bridge_basic-1.0.1/rustfmt.toml +3 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/analysis/http/mq_bridge_http_profile.rs +199 -0
- mq_bridge_basic-1.0.1/scripts/ci/check_third_party_notices.sh +41 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/canonical_message.rs +44 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/checkpoint.rs +95 -23
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/config_file.rs +56 -18
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/amqp.rs +242 -101
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/aws.rs +273 -73
- mq_bridge_basic-1.0.1/src/endpoints/capabilities.rs +647 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/clickhouse.rs +498 -99
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/dir_spool/mod.rs +245 -50
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/dir_spool/tests.rs +191 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/file/csv_dialect.rs +15 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/file/mod.rs +359 -103
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/file/tests.rs +400 -3
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/grpc/consumer.rs +105 -81
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/grpc/mod.rs +19 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/grpc/server.rs +11 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/grpc/tests.rs +222 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/http/mod.rs +65 -167
- mq_bridge_basic-1.0.1/src/endpoints/http/pool.rs +242 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/http/publisher.rs +35 -99
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/http/stream.rs +49 -50
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/http/tests.rs +246 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/http_bulk/auth.rs +56 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/http_bulk/consumer.rs +401 -34
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/http_bulk/mod.rs +47 -14
- mq_bridge_basic-1.0.1/src/endpoints/http_bulk/presets.rs +1427 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/http_bulk/publisher.rs +442 -70
- mq_bridge_basic-1.0.1/src/endpoints/http_bulk/query.rs +764 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/ibm_mq.rs +137 -41
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/kafka.rs +564 -45
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/memory/endpoint.rs +34 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/memory/framed.rs +1 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/memory/ipc_unix.rs +179 -59
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/memory/transport.rs +6 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/mod.rs +363 -46
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/mongodb/aggregate.rs +6 -3
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/mongodb/consumer.rs +6 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/mongodb/dedup.rs +25 -3
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/mongodb/mod.rs +66 -4
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/mongodb/publisher.rs +71 -144
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/mongodb/readers.rs +349 -148
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/mongodb/tests.rs +113 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/mqtt.rs +108 -13
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/nats.rs +318 -157
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/object_store.rs +266 -77
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/postgres/VENDORED.md +18 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/postgres/mod.rs +263 -44
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/postgres/pgoutput/values.rs +2 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/postgres/replication.rs +187 -59
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/redis_streams.rs +241 -53
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/sled.rs +116 -28
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/sqlx/aggregate.rs +6 -3
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/sqlx/columns.rs +57 -3
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/sqlx/dedup.rs +26 -3
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/sqlx/mod.rs +528 -188
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/sqlx/tests.rs +233 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/structural/fanout.rs +68 -11
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/structural/reader.rs +46 -6
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/structural/request.rs +113 -17
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/structural/sequence.rs +268 -15
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/structural/stream_buffer.rs +15 -21
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/structural/switch.rs +160 -3
- mq_bridge_basic-1.0.1/src/endpoints/websocket.rs +1589 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/zeromq/codec.rs +20 -1
- mq_bridge_basic-1.0.1/src/endpoints/zeromq/mod.rs +403 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/zeromq/omq.rs +5 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/zeromq/zmq.rs +259 -205
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/errors.rs +29 -3
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/event_store.rs +41 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/lib.rs +23 -7
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/aggregate/mod.rs +143 -47
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/aggregate/tests.rs +105 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/buffer.rs +63 -5
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/compression.rs +176 -27
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/deduplication/memory.rs +17 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/deduplication.rs +281 -28
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/deferred_commit.rs +106 -9
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/dlq.rs +17 -8
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/encryption.rs +135 -15
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/filter.rs +109 -17
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/limiter.rs +11 -5
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/lookup.rs +81 -10
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/mod.rs +70 -35
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/pack.rs +52 -13
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/retry.rs +100 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/weak_join.rs +136 -12
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/models/builders.rs +194 -5
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/models/defaults.rs +20 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/models/secrets.rs +336 -7
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/models/serde_support.rs +103 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/models/tests.rs +178 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/models.rs +520 -50
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/plugin/completion.rs +53 -9
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/plugin/conformance.rs +54 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/plugin/crash.rs +47 -7
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/plugin/endpoint.rs +105 -9
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/plugin/middleware.rs +359 -5
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/plugin/sdk.rs +144 -22
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/plugin/test_support.rs +21 -3
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/publisher.rs +10 -5
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/response.rs +9 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/route.rs +679 -101
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/shutdown.rs +2 -3
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/config_schema.rs +14 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/crypto.rs +2 -2
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/interpolation.rs +4 -7
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/mod.rs +23 -6
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/pack.rs +16 -0
- mq_bridge_basic-1.0.1/src/support/redact.rs +125 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/stream_batch.rs +14 -1
- mq_bridge_basic-1.0.1/src/support/tls.rs +196 -0
- mq_bridge_basic-1.0.1/src/support/tls_check.rs +122 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/traits.rs +82 -10
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/amqp.rs +69 -44
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/aws.rs +53 -32
- mq_bridge_basic-1.0.1/tests/integration/contract.rs +320 -0
- mq_bridge_basic-1.0.1/tests/integration/docker-compose/ibm-mq-certs/client.crl +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/ibm-mq-certs/client.kdb +0 -0
- mq_bridge_basic-1.0.1/tests/integration/docker-compose/ibm-mq-certs/client.p12 +0 -0
- mq_bridge_basic-1.0.1/tests/integration/docker-compose/ibm-mq-certs/client.rdb +0 -0
- mq_bridge_basic-1.0.1/tests/integration/docker-compose/ibm-mq-certs/client.sth +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/http_tls.rs +1 -1
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/ibm_mq.rs +113 -4
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/kafka.rs +2 -30
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/mariadb.rs +2 -20
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/memory.rs +0 -9
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/mod.rs +1 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/mongodb.rs +314 -26
- mq_bridge_basic-1.0.1/tests/integration/mongodb_raw.rs +58 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/mqtt.rs +47 -30
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/mysql.rs +2 -20
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/nats.rs +2 -113
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/object_store.rs +8 -5
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/postgres.rs +85 -29
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/postgres_cdc.rs +222 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/redis_streams.rs +138 -95
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/route.rs +23 -13
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/sqlite.rs +0 -5
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration_test.rs +101 -75
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/reference_docs_test.rs +3 -3
- mq_bridge_basic-0.4.20/src/endpoints/http_bulk/presets.rs +0 -826
- mq_bridge_basic-0.4.20/src/endpoints/http_bulk/query.rs +0 -429
- mq_bridge_basic-0.4.20/src/endpoints/websocket.rs +0 -843
- mq_bridge_basic-0.4.20/src/endpoints/zeromq/mod.rs +0 -106
- mq_bridge_basic-0.4.20/src/support/redact.rs +0 -57
- mq_bridge_basic-0.4.20/tests/integration/docker-compose/ibm-mq-certs/client.crl +0 -0
- mq_bridge_basic-0.4.20/tests/integration/docker-compose/ibm-mq-certs/client.p12 +0 -0
- mq_bridge_basic-0.4.20/tests/integration/docker-compose/ibm-mq-certs/client.rdb +0 -0
- mq_bridge_basic-0.4.20/tests/integration/docker-compose/ibm-mq-certs/client.sth +0 -0
- mq_bridge_basic-0.4.20/tests/integration/mongodb_raw.rs +0 -62
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.cargo/config.toml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.coderabbit.yaml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.dockerignore +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/dependabot.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/build-node.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/conda.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/docs.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/examples.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/node.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/publish-node.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/python.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.github/workflows/test-matrix.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.gitignore +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/.justfile +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/AGENTS.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/CLAUDE.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/CONTRIBUTING.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/LICENSE +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/LICENSE-APACHE +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/LICENSE-APACHE.python +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/LICENSE-MIT +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/LICENSE-MIT.python +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/LICENSE.python +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/SECURITY.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/benches/middleware_expr_bench.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/benches/pack_bench.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/benches/router_bench.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/benches/zeromq_backends.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/bindings-common/src/logging.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/deny.toml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/docs/assets/copy-demo.png +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/c-library/publish.c +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/c-library/smoke.c +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/c-plugin/CMakeLists.txt +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/c-plugin/README.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/c-plugin/legacy_ledger.c +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/c-plugin/legacy_ledger.h +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/c-plugin/legacy_parser.c +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/c-plugin/legacy_parser.h +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/c-plugin/minimal.c +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/c-plugin/plugin.c +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/ipc_worker_queue.yaml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/postgres-cdc-to-qdrant/docker-compose.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/postgres-cdc-to-qdrant/init.sql +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/postgres-cdc-to-qdrant/routes.yaml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/postgres-cdc-to-qdrant/search.sh +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/postgres-cdc-to-qdrant/test.sh +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/transactional-outbox/README.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/transactional-outbox/consume.sh +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/transactional-outbox/docker-compose.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/transactional-outbox/init.sql +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/transactional-outbox/routes.yaml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/examples/transactional-outbox/test.sh +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/include/cbindgen.toml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/include/mq_bridge_plugin.h +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/include/mq_bridge_plugin_helpers.h +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/mq_bridge/__init__.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/mq_bridge/__init__.pyi +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/mq_bridge/plugin_packaging.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/mq_bridge/py.typed +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/package-lock.json +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/pyproject.toml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/LICENSE-APACHE.python +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/LICENSE-MIT.python +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/LICENSE.python +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/README.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/analysis/bench_http_native.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/example.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/examples/IBM_MQ.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/examples/bench_memory.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/examples/bench_memory.yaml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/examples/consume_pull.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/examples/dlt_source.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/examples/ibm-mq-input.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/examples/json_route.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/examples/memory.yaml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/examples/raw_route.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/pyproject-basic.toml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/pyproject-reduced.toml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/scripts/gen_config_types.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/src/lib.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/tests/test_config_types.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/tests/test_custom_endpoint.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/tests/test_logging.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/tests/test_packaging.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/tests/test_performance_smoke.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/tests/test_plugin_package.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/tests/test_public_api.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/tests/test_routes.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/tests/test_shutdown.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/python/mq-bridge-py/uv.lock +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/analysis/benches/metadata_bench.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/analysis/debug_ibm_mq_tls.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/analysis/http/analyze_xctrace_time_profile.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/analysis/http/http_flamegraph.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/analysis/http/run_http_ladder.sh +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/ci/format_bench_output.sh +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/httparena/README.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/httparena/frameworks/mq-bridge-py/Dockerfile +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/httparena/frameworks/mq-bridge-py/meta.json +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/httparena/frameworks/mq-bridge-py/server.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/httparena/frameworks/mq-bridge-py/templates/fortunes.html +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/mqb-agent.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/sync-version.mjs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/techempower/Python/mq-bridge-py/README.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/techempower/Python/mq-bridge-py/benchmark_config.json +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/techempower/Python/mq-bridge-py/mq-bridge-py.dockerfile +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/techempower/Python/mq-bridge-py/server.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/techempower/README.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/techempower/postgres.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/techempower/seed.sql +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/techempower/verify.sh +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/the-benchmarker/README.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/the-benchmarker/python/mq-bridge-py/config.yaml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/the-benchmarker/python/mq-bridge-py/pyproject.toml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/scripts/the-benchmarker/python/mq-bridge-py/server.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/command_handler.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/grpc/dynamic.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/grpc/proto/mqbridge/bridge.proto +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/grpc/publisher.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/memory/ipc_windows.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/memory/memory_transport.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/memory/mod.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/poll.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/postgres/pgoutput/decoder.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/postgres/pgoutput/messages.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/postgres/pgoutput/mod.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/postgres/pgoutput/registry.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/postgres/state.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/structural/mod.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/structural/null.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/structural/response.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/endpoints/structural/static_endpoint.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/event_handler.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/extensions.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/aggregate/states.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/aggregate/store.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/aggregate/writer.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/cookie_jar.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/delay.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/id.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/metrics.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/otel.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/random_panic.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/raw_json.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/timeout.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/transform/coerce.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/transform/compiled.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/transform/error.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/transform/mod.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/transform/path.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/transform/schema.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/middleware/transform/tests.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/outcomes.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/plugin/discovery.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/plugin/forward.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/plugin/host.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/plugin/message.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/plugin/mod.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/base64_engine.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/change_op.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/compression.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/compression_pool.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/connection_registry.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/crypto_envelope.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/http_status.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/lookup_batch.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/ndjson.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/parallel.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/parquet.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/plugin_abi.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/poll_job.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/source_ranges.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/support/sse.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/test_utils.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/src/type_handler.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/README.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/armature_integration.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/compat/python/bridge_client.py +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/dedup_store_bench.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/delivery_guarantee_test.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/full_plugin_fallback_test.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/clickhouse.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/config.toml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/amqp.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/aws.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/clickhouse.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/ibm_mq.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/ibm_mq_tls.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/kafka-tls.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/kafka.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/mariadb.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/mongodb-replica.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/mongodb-tls.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/mongodb.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/mosquitto.conf +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/mosquitto_performance.conf +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/mosquitto_persistence.conf +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/mq_init.mqsc +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/mq_init_tls.mqsc +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/mqtt.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/mqtt_performance.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/mysql.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/nats.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/object_store.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/postgres.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/postgres_cdc.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/docker-compose/redis.yml +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/file.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/grpc.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/grpc_tls.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/http.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/ibm_mq_tls.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/ipc.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/kafka_tls.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/logic_test.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/mongodb_tls.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/performance_static.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/scripts/gen_certs.sh +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/tls_helpers.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/websocket.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/integration/zeromq.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/memory_leak_test.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/otel_test.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/plugin_loading_latch_test.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/ref_test.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/sqlite_test.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/tls_example.rs +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/unit_tests.md +0 -0
- {mq_bridge_basic-0.4.20 → mq_bridge_basic-1.0.1}/tests/websocket_test.rs +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* text=auto eol=lf
|
|
@@ -238,24 +238,29 @@ jobs:
|
|
|
238
238
|
# cargo reports the binary it just built; a restored cache can leave several
|
|
239
239
|
# older `cli_copy_docker_test-<hash>` files next to it, so globbing deps/
|
|
240
240
|
# would pick an arbitrary one.
|
|
241
|
-
- name: Build the docker test
|
|
241
|
+
- name: Build the docker test binaries
|
|
242
242
|
working-directory: apps/mq-bridge-app
|
|
243
243
|
shell: bash
|
|
244
244
|
run: |
|
|
245
|
-
cargo test -p mq-bridge-app --test cli_copy_docker_test
|
|
245
|
+
cargo test -p mq-bridge-app --test cli_copy_docker_test \
|
|
246
|
+
--test cli_scenario_docker_test --no-run \
|
|
246
247
|
--message-format=json > "$RUNNER_TEMP/build.json"
|
|
247
248
|
jq -r 'select(.target.name == "cli_copy_docker_test") | .executable // empty' \
|
|
248
249
|
"$RUNNER_TEMP/build.json" | tail -1 > "$RUNNER_TEMP/test-binary"
|
|
250
|
+
jq -r 'select(.target.name == "cli_scenario_docker_test") | .executable // empty' \
|
|
251
|
+
"$RUNNER_TEMP/build.json" | tail -1 > "$RUNNER_TEMP/scenario-binary"
|
|
249
252
|
jq -r 'select(.target.name == "mq-bridge-app"
|
|
250
253
|
and (.target.kind // [] | index("bin"))) | .executable // empty' \
|
|
251
254
|
"$RUNNER_TEMP/build.json" | tail -1 > "$RUNNER_TEMP/cli-binary"
|
|
252
|
-
test -s "$RUNNER_TEMP/test-binary" && test -s "$RUNNER_TEMP/
|
|
255
|
+
test -s "$RUNNER_TEMP/test-binary" && test -s "$RUNNER_TEMP/scenario-binary" \
|
|
256
|
+
&& test -s "$RUNNER_TEMP/cli-binary"
|
|
253
257
|
|
|
254
258
|
- name: Collect binaries
|
|
255
259
|
shell: bash
|
|
256
260
|
run: |
|
|
257
261
|
mkdir -p docker-suite
|
|
258
262
|
cp "$(cat "$RUNNER_TEMP/test-binary")" docker-suite/test-binary
|
|
263
|
+
cp "$(cat "$RUNNER_TEMP/scenario-binary")" docker-suite/scenario-binary
|
|
259
264
|
cp "$(cat "$RUNNER_TEMP/cli-binary")" docker-suite/mq-bridge-app
|
|
260
265
|
cp "$RUNNER_TEMP/cli-binary" docker-suite/cli-path
|
|
261
266
|
|
|
@@ -266,18 +271,14 @@ jobs:
|
|
|
266
271
|
path: docker-suite
|
|
267
272
|
retention-days: 1
|
|
268
273
|
|
|
269
|
-
# One backend
|
|
270
|
-
# fixed host ports the test URIs use. `run_docker_tests.sh` does the
|
|
271
|
-
# locally
|
|
274
|
+
# One backend at a time on one runner, so the servers never compete for memory
|
|
275
|
+
# or for the fixed host ports the test URIs use. `run_docker_tests.sh` does the
|
|
276
|
+
# same loop locally. Nine runners for ~20 s of tests each held slots the rest
|
|
277
|
+
# of the workflows were queuing for.
|
|
272
278
|
docker:
|
|
273
|
-
name: App docker
|
|
279
|
+
name: App docker
|
|
274
280
|
runs-on: ubuntu-latest
|
|
275
281
|
needs: docker-build
|
|
276
|
-
strategy:
|
|
277
|
-
fail-fast: false
|
|
278
|
-
matrix:
|
|
279
|
-
backend:
|
|
280
|
-
[postgres, mysql, mariadb, kafka, nats, mongodb, redis, amqp, mqtt]
|
|
281
282
|
steps:
|
|
282
283
|
- uses: actions/checkout@v7
|
|
283
284
|
|
|
@@ -295,7 +296,7 @@ jobs:
|
|
|
295
296
|
cli="$(cat docker-suite/cli-path)"
|
|
296
297
|
mkdir -p "$(dirname "$cli")"
|
|
297
298
|
mv docker-suite/mq-bridge-app "$cli"
|
|
298
|
-
chmod +x "$cli" docker-suite/test-binary
|
|
299
|
+
chmod +x "$cli" docker-suite/test-binary docker-suite/scenario-binary
|
|
299
300
|
|
|
300
301
|
- name: Install runtime libraries
|
|
301
302
|
timeout-minutes: 5
|
|
@@ -303,24 +304,100 @@ jobs:
|
|
|
303
304
|
|
|
304
305
|
# The engine's own integration stacks, so there is one definition per
|
|
305
306
|
# service rather than a second copy that can drift.
|
|
306
|
-
|
|
307
|
-
run: docker compose -f tests/integration/docker-compose/${{ matrix.backend }}.yml up -d --wait --wait-timeout 300
|
|
308
|
-
|
|
307
|
+
#
|
|
309
308
|
# The backend name filters the test names as well as MQB_TEST_BACKEND:
|
|
310
309
|
# `backend!` skips by returning, so without the name filter every excluded
|
|
311
310
|
# test still reports `ok` and a broken service would look green.
|
|
312
|
-
|
|
311
|
+
#
|
|
312
|
+
# A failing backend does not stop the loop; the step fails at the end and
|
|
313
|
+
# names every backend that failed.
|
|
314
|
+
- name: Run the backends one after another
|
|
315
|
+
timeout-minutes: 45
|
|
313
316
|
# `shell: bash` for pipefail: the default shell would take `tee`'s exit
|
|
314
317
|
# status and report a failing test run as a pass.
|
|
315
318
|
shell: bash
|
|
316
|
-
env:
|
|
317
|
-
MQB_TEST_BACKEND: ${{ matrix.backend }}
|
|
318
319
|
run: |
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
320
|
+
failed=()
|
|
321
|
+
for backend in postgres mysql mariadb kafka nats mongodb redis amqp mqtt; do
|
|
322
|
+
compose="tests/integration/docker-compose/$backend.yml"
|
|
323
|
+
echo "::group::$backend"
|
|
324
|
+
ok=1
|
|
325
|
+
docker compose -f "$compose" up -d --wait --wait-timeout 300 || ok=0
|
|
326
|
+
if [ "$ok" = 1 ]; then
|
|
327
|
+
MQB_TEST_BACKEND="$backend" ./docker-suite/test-binary \
|
|
328
|
+
--ignored --test-threads=1 "$backend" 2>&1 | tee result.log || ok=0
|
|
329
|
+
grep -qE 'test result: ok\. [1-9]' result.log \
|
|
330
|
+
|| { echo "no $backend tests ran"; ok=0; }
|
|
331
|
+
fi
|
|
332
|
+
if [ "$ok" = 0 ]; then
|
|
333
|
+
failed+=("$backend")
|
|
334
|
+
docker compose -f "$compose" logs --tail 200 || true
|
|
335
|
+
fi
|
|
336
|
+
docker compose -f "$compose" down -v --remove-orphans || true
|
|
337
|
+
echo "::endgroup::"
|
|
338
|
+
done
|
|
339
|
+
if [ "${#failed[@]}" -gt 0 ]; then
|
|
340
|
+
echo "::error::failed backends: ${failed[*]}"
|
|
341
|
+
exit 1
|
|
342
|
+
fi
|
|
343
|
+
|
|
344
|
+
# Route-level scenarios through the binary: broker restarts, SIGTERM and
|
|
345
|
+
# `kill -9` resumes. A job of its own so these slower runs never hold up the
|
|
346
|
+
# copy matrix above; same binaries, same one-backend-at-a-time loop.
|
|
347
|
+
docker-scenario:
|
|
348
|
+
name: App docker — Scenarios
|
|
349
|
+
runs-on: ubuntu-latest
|
|
350
|
+
needs: docker-build
|
|
351
|
+
steps:
|
|
352
|
+
- uses: actions/checkout@v7
|
|
323
353
|
|
|
324
|
-
- name:
|
|
325
|
-
|
|
326
|
-
|
|
354
|
+
- name: Download docker suite binaries
|
|
355
|
+
uses: actions/download-artifact@v8
|
|
356
|
+
with:
|
|
357
|
+
name: app-docker-suite
|
|
358
|
+
path: docker-suite
|
|
359
|
+
|
|
360
|
+
- name: Restore binaries
|
|
361
|
+
shell: bash
|
|
362
|
+
run: |
|
|
363
|
+
cli="$(cat docker-suite/cli-path)"
|
|
364
|
+
mkdir -p "$(dirname "$cli")"
|
|
365
|
+
mv docker-suite/mq-bridge-app "$cli"
|
|
366
|
+
chmod +x "$cli" docker-suite/scenario-binary
|
|
367
|
+
|
|
368
|
+
- name: Install runtime libraries
|
|
369
|
+
timeout-minutes: 5
|
|
370
|
+
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev zlib1g-dev
|
|
371
|
+
|
|
372
|
+
# Name filter plus MQB_TEST_BACKEND, and a zero-test run fails, for the
|
|
373
|
+
# reasons given on the copy loop above.
|
|
374
|
+
- name: Run the scenarios one backend after another
|
|
375
|
+
timeout-minutes: 30
|
|
376
|
+
shell: bash
|
|
377
|
+
run: |
|
|
378
|
+
failed=()
|
|
379
|
+
for backend in kafka postgres nats amqp mqtt mongodb mysql mariadb; do
|
|
380
|
+
stack="$backend"
|
|
381
|
+
# CDC needs logical replication; the cursor scenarios run on it too.
|
|
382
|
+
[ "$backend" = postgres ] && stack=postgres_cdc
|
|
383
|
+
compose="tests/integration/docker-compose/$stack.yml"
|
|
384
|
+
echo "::group::$backend"
|
|
385
|
+
ok=1
|
|
386
|
+
docker compose -f "$compose" up -d --wait --wait-timeout 300 || ok=0
|
|
387
|
+
if [ "$ok" = 1 ]; then
|
|
388
|
+
MQB_TEST_BACKEND="$backend" ./docker-suite/scenario-binary \
|
|
389
|
+
--ignored --test-threads=1 "$backend" 2>&1 | tee result.log || ok=0
|
|
390
|
+
grep -qE 'test result: ok\. [1-9]' result.log \
|
|
391
|
+
|| { echo "no $backend scenarios ran"; ok=0; }
|
|
392
|
+
fi
|
|
393
|
+
if [ "$ok" = 0 ]; then
|
|
394
|
+
failed+=("$backend")
|
|
395
|
+
docker compose -f "$compose" logs --tail 200 || true
|
|
396
|
+
fi
|
|
397
|
+
docker compose -f "$compose" down -v --remove-orphans || true
|
|
398
|
+
echo "::endgroup::"
|
|
399
|
+
done
|
|
400
|
+
if [ "${#failed[@]}" -gt 0 ]; then
|
|
401
|
+
echo "::error::failed backends: ${failed[*]}"
|
|
402
|
+
exit 1
|
|
403
|
+
fi
|
|
@@ -86,6 +86,32 @@ jobs:
|
|
|
86
86
|
exit 1
|
|
87
87
|
fi
|
|
88
88
|
|
|
89
|
+
# The Rust versions the README promises, with the checked-in lock.
|
|
90
|
+
msrv:
|
|
91
|
+
name: MSRV (${{ matrix.toolchain }})
|
|
92
|
+
runs-on: ubuntu-latest
|
|
93
|
+
strategy:
|
|
94
|
+
fail-fast: false
|
|
95
|
+
matrix:
|
|
96
|
+
include:
|
|
97
|
+
- toolchain: "1.89.0"
|
|
98
|
+
features: "file,dir-spool,middleware,yaml,plugin,mongodb,kafka,amqp,nats,mqtt,http,zeromq,redis-streams,sled,grpc,clickhouse,http-bulk,websocket,object-store,parquet,avro,rustls-aws-lc,ibm-mq"
|
|
99
|
+
- toolchain: "1.94.1"
|
|
100
|
+
features: "full"
|
|
101
|
+
steps:
|
|
102
|
+
- uses: actions/checkout@v7
|
|
103
|
+
|
|
104
|
+
- name: Install Rust toolchain
|
|
105
|
+
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
|
|
106
|
+
with:
|
|
107
|
+
toolchain: ${{ matrix.toolchain }}
|
|
108
|
+
|
|
109
|
+
- name: Cache cargo build
|
|
110
|
+
uses: Swatinem/rust-cache@v2
|
|
111
|
+
|
|
112
|
+
- name: Check with the minimum Rust version
|
|
113
|
+
run: cargo check --lib --locked --features ${{ matrix.features }}
|
|
114
|
+
|
|
89
115
|
# Unit tests
|
|
90
116
|
test:
|
|
91
117
|
name: Test
|
|
@@ -182,12 +208,10 @@ jobs:
|
|
|
182
208
|
include:
|
|
183
209
|
- name: Status
|
|
184
210
|
filter: 'binary(integration_test) & test(=test_all_status)'
|
|
185
|
-
- name: Chaos
|
|
186
|
-
filter: 'binary(integration_test) & test(=test_all_chaos)'
|
|
187
211
|
- name: Logic
|
|
188
212
|
filter: 'binary(integration_test) & (test(=test_all_request_reply) | test(=test_all_subscriber_logic))'
|
|
189
213
|
- name: Endpoints
|
|
190
|
-
filter: 'binary(integration_test) & not test(=test_all_status) & not test(=
|
|
214
|
+
filter: 'binary(integration_test) & not test(=test_all_status) & not test(=test_all_request_reply) & not test(=test_all_subscriber_logic) & not test(=test_all_performance_pipeline) & not test(=test_all_performance_direct)'
|
|
191
215
|
- name: Performance Pipeline
|
|
192
216
|
filter: 'binary(integration_test) & test(=test_all_performance_pipeline)'
|
|
193
217
|
- name: Performance Direct
|
|
@@ -244,9 +268,11 @@ jobs:
|
|
|
244
268
|
|
|
245
269
|
# Armature clones an external repo and runs its test suite: no docker stacks, no
|
|
246
270
|
# TLS certs, no keytool. It used to pay ~1.3m of setup for 1.7m of tests.
|
|
271
|
+
# Advisory: it builds armature's `develop` head unlocked, so their breakage shows here.
|
|
247
272
|
integration-armature:
|
|
248
273
|
name: Integration — Armature
|
|
249
274
|
runs-on: ubuntu-latest
|
|
275
|
+
continue-on-error: true
|
|
250
276
|
needs: integration-build
|
|
251
277
|
steps:
|
|
252
278
|
- uses: actions/checkout@v7
|
|
@@ -283,6 +309,27 @@ jobs:
|
|
|
283
309
|
- name: Build documentation (deny warnings)
|
|
284
310
|
run: RUSTDOCFLAGS="-D warnings" cargo doc --features lint-all --no-deps
|
|
285
311
|
|
|
312
|
+
# Public Rust API against the latest release on crates.io: a change that breaks a
|
|
313
|
+
# downstream crate needs a major version. A new config field or enum variant
|
|
314
|
+
# needs a minor one; Cargo.toml sets that under `cargo-semver-checks.lints`.
|
|
315
|
+
semver:
|
|
316
|
+
name: SemVer
|
|
317
|
+
runs-on: ubuntu-latest
|
|
318
|
+
steps:
|
|
319
|
+
- uses: actions/checkout@v7
|
|
320
|
+
|
|
321
|
+
- name: Install Rust toolchain
|
|
322
|
+
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
|
|
323
|
+
|
|
324
|
+
# Not a gate until it has passed once; see production-review-decisions-4.md, 4-7.
|
|
325
|
+
- name: Check semver
|
|
326
|
+
continue-on-error: true
|
|
327
|
+
uses: obi1kenobi/cargo-semver-checks-action@v2
|
|
328
|
+
with:
|
|
329
|
+
package: mq-bridge
|
|
330
|
+
feature-group: only-explicit-features
|
|
331
|
+
features: full,plugin-sdk
|
|
332
|
+
|
|
286
333
|
# Supply chain: licenses, banned crates, source registries, RustSec advisories
|
|
287
334
|
supply-chain:
|
|
288
335
|
name: Supply Chain
|
|
@@ -301,6 +348,11 @@ jobs:
|
|
|
301
348
|
with:
|
|
302
349
|
command: check bans licenses sources
|
|
303
350
|
|
|
351
|
+
# cargo-deny approves licenses; this checks the shipped notice files name
|
|
352
|
+
# every crate that ends up in a release artifact.
|
|
353
|
+
- name: Third-party notices list every shipped crate
|
|
354
|
+
run: scripts/ci/check_third_party_notices.sh
|
|
355
|
+
|
|
304
356
|
# Informational: every current advisory is in a transitive dependency we
|
|
305
357
|
# cannot upgrade ourselves, and RustSec updates daily. SECURITY.md records
|
|
306
358
|
# the per-feature reachability analysis; deny.toml carries the reasoning.
|
|
@@ -62,15 +62,23 @@ jobs:
|
|
|
62
62
|
${{ runner.os }}-cargo-ibmmq-
|
|
63
63
|
${{ runner.os }}-cargo-
|
|
64
64
|
|
|
65
|
+
# Only a cache miss reaches IBM's download host.
|
|
66
|
+
- name: Cache IBM MQ redist archive
|
|
67
|
+
uses: actions/cache@v6
|
|
68
|
+
with:
|
|
69
|
+
path: ~/ibm-mq-redist
|
|
70
|
+
key: ibm-mq-redist-${{ env.IBM_MQ_REDIST_SHA256 }}
|
|
71
|
+
|
|
65
72
|
- name: Install IBM MQ Client Libraries
|
|
66
73
|
id: mqclient
|
|
67
74
|
run: |
|
|
68
|
-
|
|
69
|
-
archive_name="$(basename "$archive_url")"
|
|
75
|
+
archive_name="$HOME/ibm-mq-redist/$(basename "$IBM_MQ_REDIST_URL")"
|
|
70
76
|
# IBM's download host is occasionally unreachable from runners. Treat a
|
|
71
77
|
# download failure as infrastructure flakiness and skip the rest of the
|
|
72
78
|
# job (see `if:` guards below). Checksum/extract failures still fail.
|
|
73
|
-
|
|
79
|
+
# Download outside the cached dir so a failure never caches an empty one.
|
|
80
|
+
tmp="$RUNNER_TEMP/$(basename "$archive_name")"
|
|
81
|
+
if [ ! -f "$archive_name" ] && ! { curl -fsSL --retry 5 --retry-all-errors --retry-delay 5 --connect-timeout 30 -o "$tmp" "$IBM_MQ_REDIST_URL" && mkdir -p "$(dirname "$archive_name")" && mv "$tmp" "$archive_name"; }; then
|
|
74
82
|
echo "::warning::IBM MQ redist download failed (host unreachable); skipping IBM MQ build."
|
|
75
83
|
echo "available=false" >> "$GITHUB_OUTPUT"
|
|
76
84
|
exit 0
|
|
@@ -131,15 +139,23 @@ jobs:
|
|
|
131
139
|
${{ runner.os }}-cargo-ibmmq-
|
|
132
140
|
${{ runner.os }}-cargo-
|
|
133
141
|
|
|
142
|
+
# Only a cache miss reaches IBM's download host.
|
|
143
|
+
- name: Cache IBM MQ redist archive
|
|
144
|
+
uses: actions/cache@v6
|
|
145
|
+
with:
|
|
146
|
+
path: ~/ibm-mq-redist
|
|
147
|
+
key: ibm-mq-redist-${{ env.IBM_MQ_REDIST_SHA256 }}
|
|
148
|
+
|
|
134
149
|
- name: Install IBM MQ Client Libraries
|
|
135
150
|
id: mqclient
|
|
136
151
|
run: |
|
|
137
|
-
|
|
138
|
-
archive_name="$(basename "$archive_url")"
|
|
152
|
+
archive_name="$HOME/ibm-mq-redist/$(basename "$IBM_MQ_REDIST_URL")"
|
|
139
153
|
# IBM's download host is occasionally unreachable from runners. Treat a
|
|
140
154
|
# download failure as infrastructure flakiness and skip the rest of the
|
|
141
155
|
# job (see `if:` guards below). Checksum/extract failures still fail.
|
|
142
|
-
|
|
156
|
+
# Download outside the cached dir so a failure never caches an empty one.
|
|
157
|
+
tmp="$RUNNER_TEMP/$(basename "$archive_name")"
|
|
158
|
+
if [ ! -f "$archive_name" ] && ! { curl -fsSL --retry 5 --retry-all-errors --retry-delay 5 --connect-timeout 30 -o "$tmp" "$IBM_MQ_REDIST_URL" && mkdir -p "$(dirname "$archive_name")" && mv "$tmp" "$archive_name"; }; then
|
|
143
159
|
echo "::warning::IBM MQ redist download failed (host unreachable); skipping IBM MQ integration tests."
|
|
144
160
|
echo "available=false" >> "$GITHUB_OUTPUT"
|
|
145
161
|
exit 0
|
|
@@ -188,7 +204,7 @@ jobs:
|
|
|
188
204
|
--ignored --nocapture --test-threads=1 \
|
|
189
205
|
test_all_subscriber_logic \
|
|
190
206
|
test_all_performance_pipeline \
|
|
191
|
-
|
|
207
|
+
test_ibm_mq_chaos \
|
|
192
208
|
test_all_status
|
|
193
209
|
|
|
194
210
|
- name: Run IBM MQ TLS tests
|
|
@@ -223,20 +239,7 @@ jobs:
|
|
|
223
239
|
restore-keys: |
|
|
224
240
|
${{ runner.os }}-cargo-ibmmq-
|
|
225
241
|
|
|
226
|
-
-
|
|
227
|
-
run: |
|
|
228
|
-
archive_url="$IBM_MQ_REDIST_URL"
|
|
229
|
-
archive_name="$(basename "$archive_url")"
|
|
230
|
-
curl -fsSLO --retry 5 --retry-all-errors --retry-delay 5 --connect-timeout 30 "$archive_url"
|
|
231
|
-
echo "${IBM_MQ_REDIST_SHA256} ${archive_name}" | sha256sum -c -
|
|
232
|
-
# The redist archive extracts a self-contained MQ install tree
|
|
233
|
-
# (bin/, lib64/, inc/, ...) with no top-level mqm/ dir, so unpack
|
|
234
|
-
# it directly into the installation path.
|
|
235
|
-
sudo mkdir -p /opt/mqm
|
|
236
|
-
sudo tar -xzf "$archive_name" -C /opt/mqm
|
|
237
|
-
echo "LD_LIBRARY_PATH=/opt/mqm/lib64:$LD_LIBRARY_PATH" >> $GITHUB_ENV
|
|
238
|
-
echo "MQ_INSTALLATION_PATH=/opt/mqm" >> $GITHUB_ENV
|
|
239
|
-
|
|
242
|
+
# `ibm-mq` loads the client at runtime, so rustdoc needs no IBM MQ SDK.
|
|
240
243
|
- name: Build documentation
|
|
241
244
|
run: cargo doc --features ibm-mq --no-deps
|
|
242
245
|
|
|
@@ -24,11 +24,12 @@ on:
|
|
|
24
24
|
workflow_dispatch:
|
|
25
25
|
inputs:
|
|
26
26
|
target:
|
|
27
|
-
description: "Where to publish the packages"
|
|
27
|
+
description: "Where to publish the packages (build-only uploads nothing)"
|
|
28
28
|
required: true
|
|
29
|
-
default: "
|
|
29
|
+
default: "build-only"
|
|
30
30
|
type: choice
|
|
31
31
|
options:
|
|
32
|
+
- build-only
|
|
32
33
|
- testpypi
|
|
33
34
|
- pypi
|
|
34
35
|
|
|
@@ -200,8 +201,14 @@ jobs:
|
|
|
200
201
|
# cmake. manylinux containers already ship it; the musllinux (Alpine)
|
|
201
202
|
# container does not, so install it there. Guarded so it's a no-op
|
|
202
203
|
# wherever cmake is already present. Only runs for linux builds.
|
|
204
|
+
# full's `kafka-ssl` builds OpenSSL, whose Configure needs perl modules
|
|
205
|
+
# (IPC::Cmd, ...) the manylinux image leaves out.
|
|
203
206
|
before-script-linux: |
|
|
204
|
-
command -v
|
|
207
|
+
if command -v apk >/dev/null 2>&1; then
|
|
208
|
+
command -v cmake >/dev/null 2>&1 || apk add --no-cache cmake gcc g++ make musl-dev perl
|
|
209
|
+
elif command -v yum >/dev/null 2>&1; then
|
|
210
|
+
yum install -y perl-core || yum install -y perl perl-IPC-Cmd
|
|
211
|
+
fi
|
|
205
212
|
|
|
206
213
|
- name: Upload wheels
|
|
207
214
|
uses: actions/upload-artifact@v7
|
|
@@ -256,7 +263,7 @@ jobs:
|
|
|
256
263
|
# Direct runs only. Publishing from here under release.yml authenticates
|
|
257
264
|
# (PyPI matches the reusable workflow) but the attestation is signed with the
|
|
258
265
|
# *caller's* identity, which PyPI then rejects. release.yml uploads instead.
|
|
259
|
-
if: ${{ !inputs.skip_publish }}
|
|
266
|
+
if: ${{ !inputs.skip_publish && inputs.target != 'build-only' }}
|
|
260
267
|
runs-on: ubuntu-latest
|
|
261
268
|
needs: [build-wheels, build-sdists]
|
|
262
269
|
permissions:
|
|
@@ -451,6 +451,10 @@ jobs:
|
|
|
451
451
|
name: Build CLI asset for ${{ matrix.target }}
|
|
452
452
|
needs: [metadata, release]
|
|
453
453
|
runs-on: ${{ matrix.os }}
|
|
454
|
+
# Asset builds must not fail on warnings: MSVC emits LNK4099 for the vendored
|
|
455
|
+
# OpenSSL objects. Presetting this stops setup-rust-toolchain from denying them.
|
|
456
|
+
env:
|
|
457
|
+
CARGO_BUILD_WARNINGS: warn
|
|
454
458
|
permissions:
|
|
455
459
|
contents: write
|
|
456
460
|
strategy:
|
|
@@ -496,9 +500,13 @@ jobs:
|
|
|
496
500
|
if: runner.os == 'Linux'
|
|
497
501
|
run: sudo apt-get update && sudo apt-get install -y libssl-dev pkg-config zlib1g-dev cmake libcurl4-openssl-dev protobuf-compiler
|
|
498
502
|
|
|
503
|
+
# `kafka-ssl` builds OpenSSL with perl. The bash build step would pick Git's
|
|
504
|
+
# perl, which lacks the modules; pin the Strawberry perl this shell resolves.
|
|
499
505
|
- name: Install dependencies (Windows)
|
|
500
506
|
if: runner.os == 'Windows'
|
|
501
|
-
run:
|
|
507
|
+
run: |
|
|
508
|
+
choco install protoc --no-progress -y
|
|
509
|
+
"OPENSSL_SRC_PERL=$((Get-Command perl).Source)" >> $env:GITHUB_ENV
|
|
502
510
|
|
|
503
511
|
- name: Install dependencies (macOS)
|
|
504
512
|
if: runner.os == 'macOS'
|
|
@@ -541,6 +549,110 @@ jobs:
|
|
|
541
549
|
tag_name: ${{ needs.metadata.outputs.release_tag }}
|
|
542
550
|
files: ${{ env.ASSET_PATH }}
|
|
543
551
|
|
|
552
|
+
# The C library has no ABI stability, so each archive carries the header that
|
|
553
|
+
# matches its library. Shared library only: a `full` static archive is huge and
|
|
554
|
+
# needs a per-target native link line.
|
|
555
|
+
build-c-library:
|
|
556
|
+
name: Build C library asset for ${{ matrix.target }}
|
|
557
|
+
needs: [metadata, release]
|
|
558
|
+
runs-on: ${{ matrix.os }}
|
|
559
|
+
# Same LNK4099 reason as build-release.
|
|
560
|
+
env:
|
|
561
|
+
CARGO_BUILD_WARNINGS: warn
|
|
562
|
+
permissions:
|
|
563
|
+
contents: write
|
|
564
|
+
strategy:
|
|
565
|
+
fail-fast: false
|
|
566
|
+
matrix:
|
|
567
|
+
include:
|
|
568
|
+
# Same runners as the CLI assets, so both share one glibc floor.
|
|
569
|
+
- os: ubuntu-22.04
|
|
570
|
+
target: x86_64-unknown-linux-gnu
|
|
571
|
+
- os: macos-latest
|
|
572
|
+
target: aarch64-apple-darwin
|
|
573
|
+
- os: windows-2022
|
|
574
|
+
target: x86_64-pc-windows-msvc
|
|
575
|
+
steps:
|
|
576
|
+
- name: Checkout repository
|
|
577
|
+
uses: actions/checkout@v7
|
|
578
|
+
with:
|
|
579
|
+
ref: ${{ inputs.tag_name || github.ref }}
|
|
580
|
+
|
|
581
|
+
- name: Install Rust toolchain
|
|
582
|
+
uses: actions-rust-lang/setup-rust-toolchain@v2
|
|
583
|
+
with:
|
|
584
|
+
toolchain: stable
|
|
585
|
+
target: ${{ matrix.target }}
|
|
586
|
+
|
|
587
|
+
- name: Install dependencies (Linux)
|
|
588
|
+
if: runner.os == 'Linux'
|
|
589
|
+
run: sudo apt-get update && sudo apt-get install -y libssl-dev pkg-config zlib1g-dev cmake libcurl4-openssl-dev protobuf-compiler
|
|
590
|
+
|
|
591
|
+
# `kafka-ssl` builds OpenSSL with perl. The bash build step would pick Git's
|
|
592
|
+
# perl, which lacks the modules; pin the Strawberry perl this shell resolves.
|
|
593
|
+
- name: Install dependencies (Windows)
|
|
594
|
+
if: runner.os == 'Windows'
|
|
595
|
+
run: |
|
|
596
|
+
choco install protoc --no-progress -y
|
|
597
|
+
"OPENSSL_SRC_PERL=$((Get-Command perl).Source)" >> $env:GITHUB_ENV
|
|
598
|
+
|
|
599
|
+
- name: Install dependencies (macOS)
|
|
600
|
+
if: runner.os == 'macOS'
|
|
601
|
+
run: brew install cmake pkg-config openssl@3 protobuf
|
|
602
|
+
|
|
603
|
+
# `cargo rustc --crate-type` skips the static library the manifest also declares.
|
|
604
|
+
- name: Build shared library (full)
|
|
605
|
+
shell: bash
|
|
606
|
+
run: cargo rustc -p mq-bridge-c --release --target ${{ matrix.target }} --crate-type cdylib
|
|
607
|
+
|
|
608
|
+
- name: Package artifacts
|
|
609
|
+
shell: bash
|
|
610
|
+
run: |
|
|
611
|
+
ASSET_NAME="mq-bridge-c-${{ matrix.target }}"
|
|
612
|
+
OUT="target/${{ matrix.target }}/release"
|
|
613
|
+
mkdir -p staging/lib staging/include
|
|
614
|
+
case "$RUNNER_OS" in
|
|
615
|
+
Windows) cp "$OUT/mq_bridge.dll" "$OUT/mq_bridge.dll.lib" staging/lib/ ;;
|
|
616
|
+
macOS)
|
|
617
|
+
cp "$OUT/libmq_bridge.dylib" staging/lib/
|
|
618
|
+
# Pin the install name so programs find the library through their rpath.
|
|
619
|
+
install_name_tool -id @rpath/libmq_bridge.dylib staging/lib/libmq_bridge.dylib
|
|
620
|
+
codesign --force --sign - staging/lib/libmq_bridge.dylib
|
|
621
|
+
;;
|
|
622
|
+
*) cp "$OUT/libmq_bridge.so" staging/lib/ ;;
|
|
623
|
+
esac
|
|
624
|
+
cp include/*.h staging/include/
|
|
625
|
+
cp LICENSE LICENSE-MIT LICENSE-APACHE staging/
|
|
626
|
+
cp c/mq-bridge-c/README.md staging/README.md
|
|
627
|
+
cp c/mq-bridge-c/THIRD_PARTY_LICENSES.txt staging/
|
|
628
|
+
if [ "$RUNNER_OS" == "Windows" ]; then
|
|
629
|
+
7z a "${ASSET_NAME}.zip" ./staging/*
|
|
630
|
+
echo "ASSET_PATH=${ASSET_NAME}.zip" >> "$GITHUB_ENV"
|
|
631
|
+
else
|
|
632
|
+
tar -czf "${ASSET_NAME}.tar.gz" -C staging .
|
|
633
|
+
echo "ASSET_PATH=${ASSET_NAME}.tar.gz" >> "$GITHUB_ENV"
|
|
634
|
+
fi
|
|
635
|
+
|
|
636
|
+
# CI only links the `--no-default-features` build; this is the one place a C
|
|
637
|
+
# program meets the `full` library, and it uses the archive as a user would.
|
|
638
|
+
- name: Smoke test the archive
|
|
639
|
+
if: runner.os != 'Windows'
|
|
640
|
+
shell: bash
|
|
641
|
+
run: |
|
|
642
|
+
mkdir unpacked
|
|
643
|
+
tar -xzf "$ASSET_PATH" -C unpacked
|
|
644
|
+
cc -std=c11 -I unpacked/include examples/c-library/smoke.c \
|
|
645
|
+
-L unpacked/lib -lmq_bridge "-Wl,-rpath,$PWD/unpacked/lib" -o smoke
|
|
646
|
+
if [ "$RUNNER_OS" == "macOS" ]; then otool -L unpacked/lib/libmq_bridge.dylib; else ldd unpacked/lib/libmq_bridge.so; fi
|
|
647
|
+
./smoke "$RUNNER_TEMP" | tee smoke.log
|
|
648
|
+
grep -q "smoke test passed" smoke.log
|
|
649
|
+
|
|
650
|
+
- name: Upload Release Asset
|
|
651
|
+
uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3
|
|
652
|
+
with:
|
|
653
|
+
tag_name: ${{ needs.metadata.outputs.release_tag }}
|
|
654
|
+
files: ${{ env.ASSET_PATH }}
|
|
655
|
+
|
|
544
656
|
build-linux-amd64:
|
|
545
657
|
name: Build docker linux/amd64
|
|
546
658
|
needs: [metadata, preflight, test, app-checks, package-dry-run]
|
|
@@ -833,6 +945,7 @@ jobs:
|
|
|
833
945
|
needs:
|
|
834
946
|
- metadata
|
|
835
947
|
- build-release
|
|
948
|
+
- build-c-library
|
|
836
949
|
- build-linux-arm64-asset
|
|
837
950
|
- build-tauri-release
|
|
838
951
|
- publish-manifest
|