-
Notifications
You must be signed in to change notification settings - Fork 4k
GH-33659: [Developer Tools] Add definition of Breaking Change and Critical Fix #33660
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
b2ab856
Add definition of Breaking Change and Critical Fix
wjones127 ad0afea
use a checkbox
wjones127 f3dc08e
use checkboxes and explain priority labels
wjones127 982b03d
Add more explanation
wjones127 8adde88
note that experimental APIs aren't exempt
wjones127 af3d726
update definition of critical fix to include crashes
wjones127 a0f7db5
add better mechanism and request explanation
wjones127 21dac1a
Update .github/pull_request_template.md
wjones127 6729725
clarify to use issue not PR labels
wjones127 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -255,3 +255,43 @@ Social aspects | |
| * Like any communication, code reviews are governed by the Apache | ||
| `Code of Conduct <https://www.apache.org/foundation/policies/conduct.html>`_. | ||
| This applies to both reviewers and contributors. | ||
|
|
||
|
|
||
| Labelling | ||
| ========= | ||
|
|
||
| While reviewing PRs, we should try to identify whether the corresponding issue | ||
| needs to be marked with one or both of the following issue labels: | ||
|
|
||
| * **Critical Fix**: The change fixes either: (a) a security vulnerability; | ||
| (b) a bug that causes incorrect or invalid data to be produced; | ||
| or (c) a bug that causes a crash (while the API contract is upheld). | ||
| This is intended to mark fixes to issues that may affect users without their | ||
| knowledge. For this reason, fixing bugs that cause errors don't count, since | ||
| those bugs are usually obvious. Bugs that cause crashes are considered critical | ||
| because they are a possible vector of Denial-of-Service attacks. | ||
| * **Breaking Change**: The change breaks backwards compatibility in a public API. | ||
| For changes in C++, this does not include changes that simply break ABI | ||
| compatibility, except for the few places where we do guarantee ABI | ||
| compatibility (such as C Data Interface). Experimental APIs are *not* | ||
| exempt from this; they are just more likely to be associated with this tag. | ||
|
|
||
| Breaking changes and critical fixes are separate: breaking changes alter the | ||
| API contract, while critical fixes make the implementation align with the | ||
| existing API contract. For example, fixing a bug that caused a Parquet reader | ||
| to skip rows containing the number 42 is a critical fix but not a breaking change, | ||
| since the row skipping wasn't behavior a reasonable user would rely on. | ||
|
|
||
| These labels are used in the release to highlight changes that users ought to be | ||
| aware of when they consider upgrading library versions. Breaking changes help | ||
| identify reasons when users may wish to wait to upgrade until they have time to | ||
| adapt their code, while critical fixes highlight the risk in *not* upgrading. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is a nice description, very clear! |
||
|
|
||
| In addition, we use the following labels to indicate priority: | ||
|
|
||
| * **Priority: Blocker**: Indicates the changes **must** be merged before the next | ||
| release can happen. This includes fixes to test or packaging failures that | ||
| would prevent the release from succeeding final packaging or verification. | ||
| * **Priority: Critical**: Indicates issues that are high priority. This is a | ||
| superset of issues marked "Critical Fix", as it also contains certain fixes | ||
| to issues causing errors and crashes. | ||
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do we not include ABI compatibility?
I think that we need to bump major version when we break API or ABI compatibility.
I thought that we use "Breaking Change" to determine whether we should bump major/minor version.
BTW, we will be able to check ABI compatibility automatically by CI. (Some projects do it.) So we may not check ABI compatibility manually.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What I meant is that we don't guarantee that your code compiled against the headers of Arrow 10.0.0 can be linked against the Arrow 11.0.0 shared libraries. But we do try to keep it stable such that you don't need to change your code when you upgrade the dependency.
For example, IIUC changing a function signature from
To:
Breaks ABI compatibility, since it alters the symbol for
MyFunctionin the shared library. But downstream projects won't have to change their code when they upgrade. So this paragraph means we wouldn't label this change as a "Breaking Change".There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks. I see.
My understanding: We use "Breaking Change" to provide upgrade difficulty for users. We don't use "Breaking Change" to determine which version component (major/minor/patch) should be bumped.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For now, yes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I suspect this won't be viable until we do #15280, but worth discussing after.