kosiew commented on issue #22192:
URL: https://github.com/apache/datafusion/issues/22192#issuecomment-4477233446

   @rluvaton,
   
   Thanks for the detailed scenarios.
   I agree the interaction is hard to reason about without spelling out each 
baseline separately. The important rule in this PR is:
   
   - `check-semver-advisory` compares PR HEAD against the PR base branch 
(`main` / `apache/${BASE_REF}`). It is advisory only.
   - `check-semver-blocking` compares PR HEAD against the latest stable release 
tag. This is the blocking/user-facing signal.
   - The auto-managed `auto detected api change` label is tied only to the 
latest-release/blocking result.
   - A sticky comment is present when either signal fails, and has separate 
sections/logs for blocking latest-release and advisory base-branch results.
   - A semver incompatibility itself does not make either Actions job red in 
the current implementation; the job records `success`/`failure` in artifacts 
for the comment/label workflow. The Actions job only fails for 
workflow/script/infrastructure errors.
   
   | Scenario | Label | Sticky comment | CI job status / signal |
   |---|---|---|---|
   | Revert all breaking changes from `main` | Remove/no `auto detected api 
change`, because latest-release passes. No advisory label. | Add/update comment 
because advisory fails. Blocking section: `success`, no release breakage. 
Advisory section: `failure`, flags reverting `hello(arg)` -> `hello()` and 
`world(a, b)` -> `world()` relative to unreleased `main`. | 
`check-semver-advisory` records failure signal; `check-semver-blocking` records 
success signal. Both Actions jobs stay green unless infra fails. |
   | Revert one breaking change | Add/keep `auto detected api change`, because 
latest-release still fails on `world`. | Add/update comment. Blocking section: 
`failure`, flags `world()` -> `world(a, b)` relative to latest release. 
Advisory section: `failure`, flags `hello(arg)` -> `hello()` relative to 
`main`. | Advisory records failure; blocking records failure. Both Actions jobs 
stay green unless infra fails. |
   | Add another independent breaking change (`how`) | Add/keep `auto detected 
api change`, because latest-release fails. | Add/update comment. Blocking 
section: `failure`, flags existing release breakages `hello`, `world`, plus new 
`how`. Advisory section: `failure`, flags only new `how` relative to `main`. | 
Advisory records failure; blocking records failure. Both Actions jobs stay 
green unless infra fails. |
   | Add non-breaking change depending on existing `main` break (`hello` body 
change) | Add/keep `auto detected api change`, because latest-release still 
fails. | Add/update comment. Blocking section: `failure`, flags 
release-baseline API breakages `hello` and `world` (the body-only `println!` is 
not semver breakage). Advisory section: `success`. | Advisory records success; 
blocking records failure. Both Actions jobs stay green unless infra fails. |
   | Add non-breaking change to unbroken function (`how` body change) | 
Add/keep `auto detected api change`, because latest-release still fails for the 
changed crate. | Add/update comment. Blocking section: `failure`, flags 
release-baseline API breakages `hello` and `world`; `how` body change is not a 
semver breakage. Advisory section: `success`. | Advisory records success; 
blocking records failure. Both Actions jobs stay green unless infra fails. |
   | Modify existing breaking change (`hello(arg: u32)` -> `hello(arg: usize)`) 
| Add/keep `auto detected api change`, because latest-release fails. | 
Add/update comment. Blocking section: `failure`, flags `hello()` -> `hello(arg: 
usize)` and `world()` -> `world(a, b)` relative to latest release. Advisory 
section: `failure`, flags `hello(arg: u32)` -> `hello(arg: usize)` relative to 
`main`. | Advisory records failure; blocking records failure. Both Actions jobs 
stay green unless infra fails. |
   
   So, yes: the latest-release check can report pre-existing unreleased 
breakage in a changed crate. That is intentional for the release-baseline 
signal because it answers “would this PR’s changed published crate be 
compatible for users upgrading from the latest release?” The base-branch 
advisory signal is the one that answers “did this PR introduce new API breakage 
relative to `main`?”
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to