mq-bridge-basic 0.4.19__tar.gz → 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.dockerignore +1 -1
- mq_bridge_basic-1.0.0/.gitattributes +1 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/dependabot.yml +2 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/workflows/app.yml +39 -23
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/workflows/benchmark.yml +2 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/workflows/ci.yml +57 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/workflows/docs.yml +13 -9
- mq_bridge_basic-1.0.0/.github/workflows/examples.yml +62 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/workflows/publish-python.yml +11 -4
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/workflows/release.yml +114 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/AGENTS.md +2 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/CHANGELOG.md +993 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/Cargo.lock +213 -156
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/Cargo.toml +57 -30
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/PKG-INFO +1 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/README.md +28 -11
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/THIRD_PARTY_LICENSES.txt +517 -408
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/benches/csv_to_json_bench.rs +2 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/benches/performance_bench.rs +2 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/bindings-common/Cargo.toml +1 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/bindings-common/src/lib.rs +31 -10
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/build.rs +2 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/docs/ARCHITECTURE.md +5 -1
- mq_bridge_basic-1.0.0/docs/CAPABILITIES.md +201 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/docs/CONFIGURATION.md +77 -12
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/docs/DELIVERY.md +51 -20
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/docs/EXTENDING.md +1 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/docs/GRPC.md +5 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/docs/PLUGINS.md +51 -3
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/docs/REFERENCE.md +142 -20
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/docs/THIRD_PARTY_LICENSES.md +9 -1
- mq_bridge_basic-1.0.0/examples/c-library/publish.c +40 -0
- mq_bridge_basic-1.0.0/examples/c-library/smoke.c +371 -0
- mq_bridge_basic-1.0.0/examples/postgres-cdc-to-qdrant/README.md +56 -0
- mq_bridge_basic-1.0.0/examples/postgres-cdc-to-qdrant/docker-compose.yml +53 -0
- mq_bridge_basic-1.0.0/examples/postgres-cdc-to-qdrant/init.sql +11 -0
- mq_bridge_basic-1.0.0/examples/postgres-cdc-to-qdrant/routes.yaml +53 -0
- mq_bridge_basic-1.0.0/examples/postgres-cdc-to-qdrant/search.sh +16 -0
- mq_bridge_basic-1.0.0/examples/postgres-cdc-to-qdrant/test.sh +43 -0
- mq_bridge_basic-1.0.0/examples/transactional-outbox/README.md +49 -0
- mq_bridge_basic-1.0.0/examples/transactional-outbox/consume.sh +6 -0
- mq_bridge_basic-1.0.0/examples/transactional-outbox/docker-compose.yml +38 -0
- mq_bridge_basic-1.0.0/examples/transactional-outbox/init.sql +17 -0
- mq_bridge_basic-1.0.0/examples/transactional-outbox/routes.yaml +17 -0
- mq_bridge_basic-1.0.0/examples/transactional-outbox/test.sh +50 -0
- mq_bridge_basic-1.0.0/include/mq_bridge.h +252 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/llms.txt +4 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/mq-bridge.schema.json +4863 -3998
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/mq_bridge/config.py +26 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/mq_bridge/config.pyi +128 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/Cargo.toml +1 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/THIRD_PARTY_LICENSES.txt +517 -408
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/examples/IBM_MQ.md +1 -1
- mq_bridge_basic-1.0.0/rustfmt.toml +3 -0
- mq_bridge_basic-1.0.0/scripts/ci/check_third_party_notices.sh +41 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/sync-version.mjs +1 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/canonical_message.rs +44 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/checkpoint.rs +95 -23
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/config_file.rs +56 -18
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/amqp.rs +242 -101
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/aws.rs +273 -73
- mq_bridge_basic-1.0.0/src/endpoints/capabilities.rs +647 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/clickhouse.rs +498 -99
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/dir_spool/mod.rs +245 -50
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/dir_spool/tests.rs +191 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/file/csv_dialect.rs +15 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/file/mod.rs +533 -116
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/file/tests.rs +513 -3
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/grpc/consumer.rs +105 -81
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/grpc/mod.rs +19 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/grpc/server.rs +11 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/grpc/tests.rs +222 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/http/mod.rs +138 -182
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/http/publisher.rs +59 -9
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/http/stream.rs +73 -131
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/http/tests.rs +662 -42
- mq_bridge_basic-1.0.0/src/endpoints/http_bulk/consumer.rs +1338 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/http_bulk/mod.rs +51 -13
- mq_bridge_basic-1.0.0/src/endpoints/http_bulk/presets.rs +1390 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/http_bulk/publisher.rs +168 -16
- mq_bridge_basic-1.0.0/src/endpoints/http_bulk/query.rs +764 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/ibm_mq.rs +137 -41
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/kafka.rs +315 -39
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/memory/endpoint.rs +34 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/memory/framed.rs +1 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/memory/ipc_unix.rs +179 -59
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/memory/transport.rs +6 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/mod.rs +492 -47
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/mongodb/aggregate.rs +6 -3
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/mongodb/consumer.rs +6 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/mongodb/dedup.rs +25 -3
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/mongodb/mod.rs +66 -20
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/mongodb/publisher.rs +71 -144
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/mongodb/readers.rs +350 -200
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/mongodb/tests.rs +153 -13
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/mqtt.rs +109 -14
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/nats.rs +255 -150
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/object_store.rs +266 -77
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/postgres/VENDORED.md +18 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/postgres/mod.rs +369 -45
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/postgres/pgoutput/values.rs +2 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/postgres/replication.rs +187 -59
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/redis_streams.rs +241 -53
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/sled.rs +116 -28
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/sqlx/aggregate.rs +6 -3
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/sqlx/columns.rs +58 -4
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/sqlx/dedup.rs +26 -3
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/sqlx/mod.rs +468 -210
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/sqlx/tests.rs +262 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/structural/fanout.rs +68 -11
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/structural/reader.rs +46 -6
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/structural/request.rs +113 -17
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/structural/sequence.rs +268 -15
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/structural/stream_buffer.rs +15 -21
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/structural/switch.rs +160 -3
- mq_bridge_basic-1.0.0/src/endpoints/websocket.rs +1589 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/zeromq/codec.rs +20 -1
- mq_bridge_basic-1.0.0/src/endpoints/zeromq/mod.rs +403 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/zeromq/omq.rs +5 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/zeromq/zmq.rs +259 -205
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/errors.rs +29 -3
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/event_store.rs +41 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/lib.rs +23 -7
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/buffer.rs +182 -23
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/compression.rs +176 -27
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/cookie_jar.rs +34 -7
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/deduplication/memory.rs +17 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/deduplication.rs +281 -28
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/deferred_commit.rs +106 -9
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/dlq.rs +125 -8
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/encryption.rs +135 -15
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/filter.rs +109 -17
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/limiter.rs +11 -5
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/lookup.rs +81 -10
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/metrics.rs +71 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/mod.rs +214 -15
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/pack.rs +52 -13
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/random_panic.rs +117 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/retry.rs +100 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/timeout.rs +51 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/weak_join.rs +136 -12
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/models/builders.rs +455 -5
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/models/defaults.rs +20 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/models/secrets.rs +336 -7
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/models/serde_support.rs +103 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/models/tests.rs +276 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/models.rs +514 -52
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/plugin/completion.rs +53 -9
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/plugin/conformance.rs +54 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/plugin/crash.rs +47 -7
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/plugin/discovery.rs +7 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/plugin/endpoint.rs +105 -9
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/plugin/middleware.rs +359 -5
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/plugin/mod.rs +79 -6
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/plugin/sdk.rs +144 -22
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/publisher.rs +107 -5
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/response.rs +9 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/route.rs +679 -101
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/shutdown.rs +2 -3
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/config_schema.rs +14 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/crypto.rs +2 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/crypto_envelope.rs +1 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/interpolation.rs +4 -7
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/mod.rs +27 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/pack.rs +16 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/parallel.rs +7 -0
- mq_bridge_basic-1.0.0/src/support/redact.rs +125 -0
- mq_bridge_basic-1.0.0/src/support/sse.rs +74 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/stream_batch.rs +14 -1
- mq_bridge_basic-1.0.0/src/support/tls.rs +196 -0
- mq_bridge_basic-1.0.0/src/support/tls_check.rs +122 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/test_utils.rs +3 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/traits.rs +82 -10
- mq_bridge_basic-1.0.0/tests/full_plugin_fallback_test.rs +49 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/amqp.rs +69 -17
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/aws.rs +51 -0
- mq_bridge_basic-1.0.0/tests/integration/contract.rs +320 -0
- mq_bridge_basic-1.0.0/tests/integration/docker-compose/ibm-mq-certs/client.crl +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/ibm-mq-certs/client.kdb +0 -0
- mq_bridge_basic-1.0.0/tests/integration/docker-compose/ibm-mq-certs/client.p12 +0 -0
- mq_bridge_basic-1.0.0/tests/integration/docker-compose/ibm-mq-certs/client.rdb +0 -0
- mq_bridge_basic-1.0.0/tests/integration/docker-compose/ibm-mq-certs/client.sth +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/http.rs +4 -4
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/http_tls.rs +1 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/ibm_mq.rs +103 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/kafka.rs +11 -6
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/mod.rs +1 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/mongodb.rs +321 -6
- mq_bridge_basic-1.0.0/tests/integration/mongodb_raw.rs +58 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/mqtt.rs +45 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/object_store.rs +8 -5
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/postgres.rs +83 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/postgres_cdc.rs +222 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/redis_streams.rs +136 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/route.rs +23 -13
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/sqlite.rs +0 -5
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration_test.rs +101 -0
- mq_bridge_basic-1.0.0/tests/plugin_loading_latch_test.rs +28 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/reference_docs_test.rs +3 -3
- mq_bridge_basic-0.4.19/benches/ETL_BENCHMARKS.md +0 -85
- mq_bridge_basic-0.4.19/src/endpoints/http_bulk/consumer.rs +0 -710
- mq_bridge_basic-0.4.19/src/endpoints/http_bulk/presets.rs +0 -776
- mq_bridge_basic-0.4.19/src/endpoints/http_bulk/query.rs +0 -429
- mq_bridge_basic-0.4.19/src/endpoints/websocket.rs +0 -837
- mq_bridge_basic-0.4.19/src/endpoints/zeromq/mod.rs +0 -106
- mq_bridge_basic-0.4.19/tests/integration/docker-compose/ibm-mq-certs/client.crl +0 -0
- mq_bridge_basic-0.4.19/tests/integration/docker-compose/ibm-mq-certs/client.p12 +0 -0
- mq_bridge_basic-0.4.19/tests/integration/docker-compose/ibm-mq-certs/client.rdb +0 -0
- mq_bridge_basic-0.4.19/tests/integration/docker-compose/ibm-mq-certs/client.sth +0 -0
- mq_bridge_basic-0.4.19/tests/integration/mongodb_raw.rs +0 -62
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.cargo/config.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.coderabbit.yaml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/workflows/build-node.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/workflows/conda.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/workflows/ibm-mq.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/workflows/node.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/workflows/publish-node.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/workflows/python.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.github/workflows/test-matrix.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.gitignore +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/.justfile +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/CLAUDE.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/CONTRIBUTING.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/LICENSE +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/LICENSE-APACHE +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/LICENSE-APACHE.python +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/LICENSE-MIT +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/LICENSE-MIT.python +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/LICENSE.python +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/SECURITY.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/benches/middleware_expr_bench.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/benches/pack_bench.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/benches/router_bench.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/benches/zeromq_backends.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/bindings-common/src/logging.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/deny.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/docs/assets/copy-demo.png +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/examples/c-plugin/CMakeLists.txt +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/examples/c-plugin/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/examples/c-plugin/legacy_ledger.c +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/examples/c-plugin/legacy_ledger.h +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/examples/c-plugin/legacy_parser.c +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/examples/c-plugin/legacy_parser.h +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/examples/c-plugin/minimal.c +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/examples/c-plugin/plugin.c +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/examples/ipc_worker_queue.yaml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/include/cbindgen.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/include/mq_bridge_plugin.h +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/include/mq_bridge_plugin_helpers.h +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/mq_bridge/__init__.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/mq_bridge/__init__.pyi +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/mq_bridge/plugin_packaging.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/mq_bridge/py.typed +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/package-lock.json +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/pyproject.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/LICENSE-APACHE.python +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/LICENSE-MIT.python +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/LICENSE.python +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/analysis/bench_http_native.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/example.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/examples/bench_memory.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/examples/bench_memory.yaml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/examples/consume_pull.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/examples/dlt_source.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/examples/ibm-mq-input.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/examples/json_route.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/examples/memory.yaml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/examples/raw_route.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/pyproject-basic.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/pyproject-reduced.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/scripts/gen_config_types.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/src/lib.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/tests/test_config_types.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/tests/test_custom_endpoint.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/tests/test_logging.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/tests/test_packaging.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/tests/test_performance_smoke.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/tests/test_plugin_package.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/tests/test_public_api.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/tests/test_routes.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/tests/test_shutdown.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/python/mq-bridge-py/uv.lock +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/analysis/benches/metadata_bench.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/analysis/debug_ibm_mq_tls.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/analysis/http/analyze_xctrace_time_profile.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/analysis/http/http_flamegraph.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/analysis/http/mq_bridge_http_profile.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/analysis/http/run_http_ladder.sh +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/ci/format_bench_output.sh +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/httparena/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/httparena/frameworks/mq-bridge-py/Dockerfile +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/httparena/frameworks/mq-bridge-py/meta.json +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/httparena/frameworks/mq-bridge-py/server.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/httparena/frameworks/mq-bridge-py/templates/fortunes.html +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/mqb-agent.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/techempower/Python/mq-bridge-py/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/techempower/Python/mq-bridge-py/benchmark_config.json +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/techempower/Python/mq-bridge-py/mq-bridge-py.dockerfile +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/techempower/Python/mq-bridge-py/server.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/techempower/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/techempower/postgres.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/techempower/seed.sql +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/techempower/verify.sh +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/the-benchmarker/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/the-benchmarker/python/mq-bridge-py/config.yaml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/the-benchmarker/python/mq-bridge-py/pyproject.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/scripts/the-benchmarker/python/mq-bridge-py/server.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/command_handler.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/grpc/dynamic.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/grpc/proto/mqbridge/bridge.proto +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/grpc/publisher.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/http_bulk/auth.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/memory/ipc_windows.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/memory/memory_transport.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/memory/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/poll.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/postgres/pgoutput/decoder.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/postgres/pgoutput/messages.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/postgres/pgoutput/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/postgres/pgoutput/registry.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/postgres/state.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/structural/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/structural/null.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/structural/response.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/endpoints/structural/static_endpoint.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/event_handler.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/extensions.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/aggregate/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/aggregate/states.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/aggregate/store.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/aggregate/tests.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/aggregate/writer.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/delay.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/id.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/otel.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/raw_json.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/transform/coerce.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/transform/compiled.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/transform/error.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/transform/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/transform/path.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/transform/schema.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/middleware/transform/tests.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/outcomes.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/plugin/forward.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/plugin/host.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/plugin/message.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/plugin/test_support.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/base64_engine.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/change_op.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/compression.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/compression_pool.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/connection_registry.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/http_status.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/lookup_batch.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/ndjson.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/parquet.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/plugin_abi.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/poll_job.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/support/source_ranges.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/src/type_handler.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/armature_integration.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/compat/python/bridge_client.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/dedup_store_bench.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/delivery_guarantee_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/clickhouse.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/config.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/amqp.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/aws.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/clickhouse.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/ibm_mq.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/ibm_mq_tls.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/kafka-tls.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/kafka.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/mariadb.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/mongodb-replica.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/mongodb-tls.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/mongodb.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/mosquitto.conf +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/mosquitto_performance.conf +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/mosquitto_persistence.conf +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/mq_init.mqsc +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/mq_init_tls.mqsc +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/mqtt.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/mqtt_performance.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/mysql.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/nats.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/object_store.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/postgres.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/postgres_cdc.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/docker-compose/redis.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/file.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/grpc.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/grpc_tls.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/ibm_mq_tls.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/ipc.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/kafka_tls.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/logic_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/mariadb.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/memory.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/mongodb_tls.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/mysql.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/nats.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/performance_static.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/scripts/gen_certs.sh +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/tls_helpers.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/websocket.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/integration/zeromq.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/memory_leak_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/otel_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/ref_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/sqlite_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/tls_example.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/unit_tests.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-1.0.0}/tests/websocket_test.rs +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* text=auto eol=lf
|
|
@@ -9,7 +9,8 @@ updates:
|
|
|
9
9
|
directory: "/" # Location of package manifests
|
|
10
10
|
target-branch: "dev"
|
|
11
11
|
schedule:
|
|
12
|
-
|
|
12
|
+
# Same cadence as the app workspace below, so the two lockfiles do not drift.
|
|
13
|
+
interval: "weekly"
|
|
13
14
|
groups:
|
|
14
15
|
minor-and-patch:
|
|
15
16
|
applies-to: version-updates
|
|
@@ -51,6 +51,7 @@ jobs:
|
|
|
51
51
|
cache-workspace-crates: true
|
|
52
52
|
|
|
53
53
|
- name: Install system dependencies
|
|
54
|
+
timeout-minutes: 5
|
|
54
55
|
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
|
|
|
56
57
|
- name: Test desktop crate
|
|
@@ -116,6 +117,7 @@ jobs:
|
|
|
116
117
|
cache-dependency-path: apps/mq-bridge-app/package-lock.json
|
|
117
118
|
|
|
118
119
|
- name: Install system dependencies
|
|
120
|
+
timeout-minutes: 5
|
|
119
121
|
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler
|
|
120
122
|
|
|
121
123
|
- name: Install frontend dependencies
|
|
@@ -193,6 +195,7 @@ jobs:
|
|
|
193
195
|
cache-workspace-crates: true
|
|
194
196
|
|
|
195
197
|
- name: Install system dependencies
|
|
198
|
+
timeout-minutes: 5
|
|
196
199
|
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler
|
|
197
200
|
|
|
198
201
|
- name: Run integration suite
|
|
@@ -224,6 +227,7 @@ jobs:
|
|
|
224
227
|
cache-workspace-crates: true
|
|
225
228
|
|
|
226
229
|
- name: Install system dependencies
|
|
230
|
+
timeout-minutes: 5
|
|
227
231
|
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler
|
|
228
232
|
|
|
229
233
|
# The test drives the CLI through `env!("CARGO_BIN_EXE_mq-bridge-app")`, an
|
|
@@ -262,18 +266,14 @@ jobs:
|
|
|
262
266
|
path: docker-suite
|
|
263
267
|
retention-days: 1
|
|
264
268
|
|
|
265
|
-
# One backend
|
|
266
|
-
# fixed host ports the test URIs use. `run_docker_tests.sh` does the
|
|
267
|
-
# locally
|
|
269
|
+
# One backend at a time on one runner, so the servers never compete for memory
|
|
270
|
+
# or for the fixed host ports the test URIs use. `run_docker_tests.sh` does the
|
|
271
|
+
# same loop locally. Nine runners for ~20 s of tests each held slots the rest
|
|
272
|
+
# of the workflows were queuing for.
|
|
268
273
|
docker:
|
|
269
|
-
name: App docker
|
|
274
|
+
name: App docker
|
|
270
275
|
runs-on: ubuntu-latest
|
|
271
276
|
needs: docker-build
|
|
272
|
-
strategy:
|
|
273
|
-
fail-fast: false
|
|
274
|
-
matrix:
|
|
275
|
-
backend:
|
|
276
|
-
[postgres, mysql, mariadb, kafka, nats, mongodb, redis, amqp, mqtt]
|
|
277
277
|
steps:
|
|
278
278
|
- uses: actions/checkout@v7
|
|
279
279
|
|
|
@@ -294,28 +294,44 @@ jobs:
|
|
|
294
294
|
chmod +x "$cli" docker-suite/test-binary
|
|
295
295
|
|
|
296
296
|
- name: Install runtime libraries
|
|
297
|
+
timeout-minutes: 5
|
|
297
298
|
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev zlib1g-dev
|
|
298
299
|
|
|
299
300
|
# The engine's own integration stacks, so there is one definition per
|
|
300
301
|
# service rather than a second copy that can drift.
|
|
301
|
-
|
|
302
|
-
run: docker compose -f tests/integration/docker-compose/${{ matrix.backend }}.yml up -d --wait --wait-timeout 300
|
|
303
|
-
|
|
302
|
+
#
|
|
304
303
|
# The backend name filters the test names as well as MQB_TEST_BACKEND:
|
|
305
304
|
# `backend!` skips by returning, so without the name filter every excluded
|
|
306
305
|
# test still reports `ok` and a broken service would look green.
|
|
307
|
-
|
|
306
|
+
#
|
|
307
|
+
# A failing backend does not stop the loop; the step fails at the end and
|
|
308
|
+
# names every backend that failed.
|
|
309
|
+
- name: Run the backends one after another
|
|
310
|
+
timeout-minutes: 45
|
|
308
311
|
# `shell: bash` for pipefail: the default shell would take `tee`'s exit
|
|
309
312
|
# status and report a failing test run as a pass.
|
|
310
313
|
shell: bash
|
|
311
|
-
env:
|
|
312
|
-
MQB_TEST_BACKEND: ${{ matrix.backend }}
|
|
313
314
|
run: |
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
315
|
+
failed=()
|
|
316
|
+
for backend in postgres mysql mariadb kafka nats mongodb redis amqp mqtt; do
|
|
317
|
+
compose="tests/integration/docker-compose/$backend.yml"
|
|
318
|
+
echo "::group::$backend"
|
|
319
|
+
ok=1
|
|
320
|
+
docker compose -f "$compose" up -d --wait --wait-timeout 300 || ok=0
|
|
321
|
+
if [ "$ok" = 1 ]; then
|
|
322
|
+
MQB_TEST_BACKEND="$backend" ./docker-suite/test-binary \
|
|
323
|
+
--ignored --test-threads=1 "$backend" 2>&1 | tee result.log || ok=0
|
|
324
|
+
grep -qE 'test result: ok\. [1-9]' result.log \
|
|
325
|
+
|| { echo "no $backend tests ran"; ok=0; }
|
|
326
|
+
fi
|
|
327
|
+
if [ "$ok" = 0 ]; then
|
|
328
|
+
failed+=("$backend")
|
|
329
|
+
docker compose -f "$compose" logs --tail 200 || true
|
|
330
|
+
fi
|
|
331
|
+
docker compose -f "$compose" down -v --remove-orphans || true
|
|
332
|
+
echo "::endgroup::"
|
|
333
|
+
done
|
|
334
|
+
if [ "${#failed[@]}" -gt 0 ]; then
|
|
335
|
+
echo "::error::failed backends: ${failed[*]}"
|
|
336
|
+
exit 1
|
|
337
|
+
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
|
|
@@ -120,6 +146,11 @@ jobs:
|
|
|
120
146
|
- name: C plugin header is current and a C plugin loads
|
|
121
147
|
run: cargo test -p mq-bridge-plugin-fixture --test plugin_c_header --test plugin_c_abi
|
|
122
148
|
|
|
149
|
+
- name: C library header is current and a C program links and runs
|
|
150
|
+
run: cargo test -p mq-bridge-c --no-default-features
|
|
151
|
+
env:
|
|
152
|
+
MQB_C_ASAN: "1" # AddressSanitizer; on Linux it also fails on leaks
|
|
153
|
+
|
|
123
154
|
- name: Memory leak soak (route commit-task JoinSet)
|
|
124
155
|
run: cargo test --test memory_leak_test --features=full -- --ignored --nocapture
|
|
125
156
|
|
|
@@ -278,6 +309,27 @@ jobs:
|
|
|
278
309
|
- name: Build documentation (deny warnings)
|
|
279
310
|
run: RUSTDOCFLAGS="-D warnings" cargo doc --features lint-all --no-deps
|
|
280
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
|
+
|
|
281
333
|
# Supply chain: licenses, banned crates, source registries, RustSec advisories
|
|
282
334
|
supply-chain:
|
|
283
335
|
name: Supply Chain
|
|
@@ -296,6 +348,11 @@ jobs:
|
|
|
296
348
|
with:
|
|
297
349
|
command: check bans licenses sources
|
|
298
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
|
+
|
|
299
356
|
# Informational: every current advisory is in a transitive dependency we
|
|
300
357
|
# cannot upgrade ourselves, and RustSec updates daily. SECURITY.md records
|
|
301
358
|
# the per-feature reachability analysis; deny.toml carries the reasoning.
|
|
@@ -5,7 +5,7 @@ on:
|
|
|
5
5
|
branches: [main]
|
|
6
6
|
paths:
|
|
7
7
|
- "docs/**"
|
|
8
|
-
- "
|
|
8
|
+
- "llms.txt"
|
|
9
9
|
- "apps/mq-bridge-app/crates/cli/examples/gen_url_docs.rs"
|
|
10
10
|
- ".github/workflows/docs.yml"
|
|
11
11
|
# The benchmark workflow pushes new data to the gh-pages branch; republish the
|
|
@@ -38,14 +38,18 @@ jobs:
|
|
|
38
38
|
mdbook-version: "0.5.4"
|
|
39
39
|
|
|
40
40
|
- name: Vendor engine docs
|
|
41
|
-
run: bash
|
|
41
|
+
run: bash docs/book/sync-engine-docs.sh
|
|
42
42
|
|
|
43
43
|
- name: Build book
|
|
44
|
-
run: mdbook build
|
|
44
|
+
run: mdbook build docs/book
|
|
45
45
|
|
|
46
|
-
#
|
|
47
|
-
- name:
|
|
48
|
-
run:
|
|
46
|
+
# llms.txt lives at the repository root; publish it with the book.
|
|
47
|
+
- name: Publish llms.txt
|
|
48
|
+
run: cp llms.txt docs/book/book/llms.txt
|
|
49
|
+
|
|
50
|
+
# Canonical URLs, meta descriptions, sitemap.xml and llms-full.txt.
|
|
51
|
+
- name: Postprocess book
|
|
52
|
+
run: python3 docs/book/postprocess.py
|
|
49
53
|
|
|
50
54
|
# The benchmark dashboard lives on the gh-pages branch. Copy it into the
|
|
51
55
|
# book so this workflow is the only thing that publishes to Pages.
|
|
@@ -61,8 +65,8 @@ jobs:
|
|
|
61
65
|
run: |
|
|
62
66
|
src=.benchmark-data/dev/bench
|
|
63
67
|
if [ -d "$src" ]; then
|
|
64
|
-
mkdir -p
|
|
65
|
-
cp -R "$src"
|
|
68
|
+
mkdir -p docs/book/book/dev
|
|
69
|
+
cp -R "$src" docs/book/book/dev/bench
|
|
66
70
|
else
|
|
67
71
|
echo "::warning::no benchmark data on gh-pages; /dev/bench/ will be missing"
|
|
68
72
|
fi
|
|
@@ -70,7 +74,7 @@ jobs:
|
|
|
70
74
|
- name: Upload Pages artifact
|
|
71
75
|
uses: actions/upload-pages-artifact@v5
|
|
72
76
|
with:
|
|
73
|
-
path:
|
|
77
|
+
path: docs/book/book
|
|
74
78
|
|
|
75
79
|
deploy:
|
|
76
80
|
name: Deploy to Pages
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: Examples
|
|
2
|
+
|
|
3
|
+
# Runs the use-case examples under examples/ the way their READMEs describe.
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
paths:
|
|
8
|
+
- "examples/postgres-cdc-to-qdrant/**"
|
|
9
|
+
- "examples/transactional-outbox/**"
|
|
10
|
+
- "examples/test-without-a-broker/**"
|
|
11
|
+
- ".github/workflows/examples.yml"
|
|
12
|
+
pull_request:
|
|
13
|
+
paths:
|
|
14
|
+
- "examples/postgres-cdc-to-qdrant/**"
|
|
15
|
+
- "examples/transactional-outbox/**"
|
|
16
|
+
- "examples/test-without-a-broker/**"
|
|
17
|
+
- ".github/workflows/examples.yml"
|
|
18
|
+
workflow_dispatch:
|
|
19
|
+
|
|
20
|
+
permissions:
|
|
21
|
+
contents: read
|
|
22
|
+
|
|
23
|
+
concurrency:
|
|
24
|
+
group: examples-${{ github.ref }}
|
|
25
|
+
cancel-in-progress: true
|
|
26
|
+
|
|
27
|
+
jobs:
|
|
28
|
+
docker:
|
|
29
|
+
name: ${{ matrix.example }}
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
timeout-minutes: 20
|
|
32
|
+
strategy:
|
|
33
|
+
fail-fast: false
|
|
34
|
+
matrix:
|
|
35
|
+
example: [postgres-cdc-to-qdrant, transactional-outbox]
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@v7
|
|
38
|
+
with:
|
|
39
|
+
persist-credentials: false
|
|
40
|
+
- name: Run the example's smoke test
|
|
41
|
+
working-directory: examples/${{ matrix.example }}
|
|
42
|
+
run: ./test.sh
|
|
43
|
+
|
|
44
|
+
test-without-a-broker:
|
|
45
|
+
name: test-without-a-broker
|
|
46
|
+
runs-on: ubuntu-latest
|
|
47
|
+
timeout-minutes: 20
|
|
48
|
+
steps:
|
|
49
|
+
- uses: actions/checkout@v7
|
|
50
|
+
with:
|
|
51
|
+
persist-credentials: false
|
|
52
|
+
- name: Rust
|
|
53
|
+
working-directory: examples/test-without-a-broker
|
|
54
|
+
run: cargo test --locked
|
|
55
|
+
- uses: actions/setup-python@v7
|
|
56
|
+
with:
|
|
57
|
+
python-version: "3.12"
|
|
58
|
+
- name: Python
|
|
59
|
+
working-directory: examples/test-without-a-broker/python
|
|
60
|
+
run: |
|
|
61
|
+
pip install -r requirements.txt
|
|
62
|
+
pytest -q
|
|
@@ -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
|
|
@@ -186,8 +186,8 @@ The grammar and examples are in [CONFIGURATION.md](docs/CONFIGURATION.md).
|
|
|
186
186
|
2. **New middleware**: Add to `middleware/mod.rs`, implement middleware wrapper types
|
|
187
187
|
3. **Configuration changes**: Update `models.rs` with new config structs, add to `EndpointType`/`Middleware` enums
|
|
188
188
|
4. **Tests**: Add integration tests in `tests/integration/`, update Docker Compose if needed
|
|
189
|
-
5. **Documentation**: Update README.md and add doc comments; when middleware or endpoint behaviour changes, also check the book's hand-written pages in `
|
|
189
|
+
5. **Documentation**: Update README.md and add doc comments; when middleware or endpoint behaviour changes, also check the book's hand-written pages in `docs/book/cookbook` and `operations`
|
|
190
190
|
|
|
191
191
|
### Dependencies
|
|
192
192
|
|
|
193
|
-
Dependencies and the feature that gates each optional one are in `Cargo.toml`, with comments explaining the non-obvious choices. The
|
|
193
|
+
Dependencies and the feature that gates each optional one are in `Cargo.toml`, with comments explaining the non-obvious choices. The only default features are `file` and `dir-spool`; an endpoint whose feature is off is served by a registered factory of the same name if there is one (see `plugins/full`).
|