feat(ci): parse JUnit XML reports in native Rust#1465
Open
Conversation
This was referenced May 27, 2026
Member
Author
|
This pull request is part of a Mergify stack:
|
This was referenced May 27, 2026
Contributor
Merge ProtectionsYour pull request matches the following merge protections and will not be merged until they are valid. 🔴 ⛓️ Depends-On RequirementsWaiting for
This rule is failing.Requirement based on the presence of
🔴 👀 Review RequirementsWaiting for
This rule is failing.
🔴 🔎 ReviewsWaiting for
This rule is failing.
🟢 🤖 Continuous IntegrationWonderful, this rule succeeded.
🟢 Enforce conventional commitWonderful, this rule succeeded.Make sure that we follow https://www.conventionalcommits.org/en/v1.0.0/
🟢 📕 PR descriptionWonderful, this rule succeeded.
|
b1b850b to
d3fd85c
Compare
380699c to
aaf35b0
Compare
Member
Author
Revision history
|
d3fd85c to
2857e8a
Compare
aaf35b0 to
1dcc6df
Compare
2857e8a to
b0d5709
Compare
1dcc6df to
4778d48
Compare
First layer of the `mergify ci junit-process` port — a JUnit XML parser that produces semantically-tagged `TestCase` values. Hermetic (no network), so the upload and quarantine layers can be landed and reviewed separately on top of it. The parser mirrors the Python implementation's accepted dialect: `<testsuites>` root with nested `<testsuite>` children, a bare `<testsuite>` root, or a `<testsuite>` root with nested descendants. Within each suite, every `<testcase>` becomes a `TestCase` tagged with its result and (for failures and errors) the kind/message attributes plus the body text from the first `<failure>` / `<error>` child. quick-xml 0.40 splits text events around each entity reference, so the parser accumulates body content across `Text`, `CData`, and `GeneralRef` events into a per-failure buffer and trims once at the closing tag — anything else would silently lose the chunk before the first `>` / `<` / `&`. A live-smoke fixture pins the round-trip end to end against the actual XML pytest emits, so the upload layer cannot drift from what the parser expects. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> Change-Id: I7d0fb778bd495ff47ac075eeff6220b7551cd9ec
4778d48 to
e338014
Compare
b0d5709 to
a7edc08
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
First layer of the
mergify ci junit-processport — a JUnit XMLparser that produces semantically-tagged
TestCasevalues.Hermetic (no network), so the upload and quarantine layers can be
landed and reviewed separately on top of it.
The parser mirrors the Python implementation's accepted dialect:
<testsuites>root with nested<testsuite>children, a bare<testsuite>root, or a<testsuite>root with nesteddescendants. Within each suite, every
<testcase>becomes aTestCasetagged with its result and (for failures and errors)the kind/message attributes plus the body text from the first
<failure>/<error>child.quick-xml 0.40 splits text events around each entity reference,
so the parser accumulates body content across
Text,CData,and
GeneralRefevents into a per-failure buffer and trims onceat the closing tag — anything else would silently lose the chunk
before the first
>/</&. A live-smoke fixturepins the round-trip end to end against the actual XML pytest
emits, so the upload layer cannot drift from what the parser
expects.
Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com
Depends-On: #1461