Skip to content

Build the uAMQP AMQP stack in CI beside the Rust stack - #7324

Draft
Johnathan W (j7nw4r) wants to merge 2 commits into
mainfrom
experiment/uamqp-ci
Draft

Build the uAMQP AMQP stack in CI beside the Rust stack#7324
Johnathan W (j7nw4r) wants to merge 2 commits into
mainfrom
experiment/uamqp-ci

Conversation

@j7nw4r

@j7nw4r Johnathan W (j7nw4r) commented Aug 13, 2026

Copy link
Copy Markdown
Member

Summary

Continuous integration builds only the Rust AMQP stack. The uAMQP transport has no automated test coverage.

This change adds a three-leg matrix for uAMQP builds and tests. Each continuous integration run now covers both stacks. The Rust stack remains the default for all other consumers.

Motivation

No pipeline sets DISABLE_RUST_IN_BUILD. On 2025-03-11, #6442 forced USE_RUST_AMQP on. Continuous integration then compiled only the Rust AMQP stack.

The guards are symmetric. One stack alone leaves the other stack's test bodies empty. sdk/core/azure-core-amqp/test/ut contains 45 ENABLE_UAMQP guards across 9 files and 21 ENABLE_RUST_AMQP guards across 6 files.

Build 6707791 passed all 605 tests. The uAMQP run contained 225 azure-core-amqp entries; the Rust run contained 170.

The uAMQP build used WARNINGS_AS_ERRORS and produced no compiler warning or error in a uAMQP source. uAMQP needs no repair phase before continuous integration uses it.

Changes

  • Adds eng/pipelines/templates/stages/platform-matrix-uamqp.json with three legs: Ubuntu22_gpp9, Ubuntu22_clang15, and Win2022_x64. Each leg passes -DDISABLE_RUST_IN_BUILD=ON and -DBUILD_TESTING=ON.
  • Adds an AdditionalMatrixFile parameter with an empty default to the client job and stage templates. All other pipelines remain unchanged.
  • Uses a separate generate-job-matrix.yml call for the second matrix. One call gives each configuration the same AdditionalParameters object. Two configurations in one call declare the same job identifier twice.
  • Passes the parameter only to the Build stage, so pull request feedback keeps its current speed.
  • Adds the matrix to sdk/core/ci.yml and sdk/eventhubs/ci.yml. These two pipelines are the only pipelines that use AMQP.
  • Disables coverage for the uAMQP legs. The Rust build sets the baseline for LineCoverageTarget.
  • Changes the vendored uAMQP CMake floor to the guarded form on the upstream azure-uamqp-c master branch. The subdirectory uses the root CMake floor of 3.13.

Test plan

  • Create-JobMatrix.ps1 produced exactly the three expected legs. Each leg contained both flags.
  • The real pool filters routed two legs to Linux, one to Windows, and zero to macOS. The literal env: pool names passed the filter before variable resolution.
  • The base matrix still produced its current 26 legs.
  • The final continuous integration run must show a Rust leg set and a uAMQP leg set.

Related work

#7342 covers the sync of two upstream decoder fixes into the vendored copy.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
7 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

EXPERIMENT. Do not merge.

No pipeline sets DISABLE_RUST_IN_BUILD, so each pipeline gets the Rust
AMQP stack. CI has not compiled the uAMQP stack since 2025-03-11, when
#6442 forced USE_RUST_AMQP on. The uAMQP test bodies also sit inside
"#if ENABLE_UAMQP" with an empty else, so CI runs them as empty tests.

This commit changes the default of DISABLE_RUST_IN_BUILD from off to on,
so each pipeline builds uAMQP and runs its tests. The purpose is to
measure what 17 months did to that code on gcc, on clang, and on MSVC,
with WARNINGS_AS_ERRORS on.

This option is the switch that the build supports, so the Windows Store
jobs stay correct. The root CMakeLists sets DISABLE_AMQP for a Windows
Store build when this option is on. A change to USE_RUST_AMQP alone
would miss that and would break those jobs for a reason that belongs to
the experiment.
No pipeline set DISABLE_RUST_IN_BUILD, so continuous integration built
only the Rust AMQP stack after 2025-03-11. The uAMQP test bodies sit
inside "#if ENABLE_UAMQP", so those tests ran as empty tests. The Rust
test bodies sit inside "#if ENABLE_RUST_AMQP", so one stack alone always
leaves the other stack's tests empty.

This commit adds a small second matrix that builds the uAMQP stack, and
it opts in the two pipelines that use AMQP. One run now covers both
stacks. The Rust stack stays the default for every consumer, and this
commit reverts the experiment default in the root CMakeLists.txt so that
file matches main again.

The second matrix attaches through a separate call to
generate-job-matrix.yml, not through a second MatrixConfigs entry. That
common template passes one AdditionalParameters object to every config
it loops over, and ci.tests.yml names each job "<DisplayName>_<OSName>",
so two configs in one call would declare the same job identifier twice.
The precedent is cmake-generate-jobs.yml, which already makes two calls
with distinct GenerateJobName values.

The vendored uAMQP CMake floor moves to the guarded form that upstream
azure-uamqp-c master uses. CMake warns for a floor below 3.10 from
version 3.31 up. The guard makes the subdirectory inherit the root floor
of 3.13, so the warning goes away. No released CMake fails on the old
value, so this is hygiene and not a repair.
@j7nw4r Johnathan W (j7nw4r) changed the title [EXPERIMENT, DO NOT MERGE] Build the uAMQP stack in CI to measure its current state Build the uAMQP AMQP stack in CI beside the Rust stack Aug 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant