-
Notifications
You must be signed in to change notification settings - Fork 738
Enhance cherry-pick script #29064
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
Enhance cherry-pick script #29064
Conversation
… error handling - Added `--allow-unmerged` option to backport unmerged PRs directly using their commits. - Introduced `--merge-commits` option to control behavior for merge commits (skip or fail). - Enhanced error handling for cherry-pick conflicts and Git command failures. - Improved PR title and body formatting to include metadata and linked issues. - Updated workflow configuration to support new script options.
|
🟢 |
|
⚪
🟢 |
|
⚪
🟢 |
…body formatting - Added methods to extract changelog category, entry, and description from PR body. - Improved PR body generation to include extracted changelog information and ensure validation requirements are met. - Updated workflow configuration to support new changelog features.
|
⚪
🟢 |
|
⚪
🟢 |
… backport comment handling - Updated datetime formatting to include seconds, preventing branch name conflicts. - Added method to find and update existing backport comments in original PRs, enhancing comment management. - Improved logging for comment creation and updates to provide clearer feedback on operations.
|
⚪
🟢 |
|
⚪
🟢 |
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.
Pull Request Overview
This PR enhances the cherry-pick script to support backporting unmerged PRs and improves error handling throughout the workflow. The changes introduce new command-line options for flexible handling of unmerged PRs and merge commits, better conflict resolution with draft PR creation, and comprehensive metadata tracking in backport PRs.
- Added
--allow-unmergedflag to enable backporting of unmerged PRs using their commits directly - Introduced
--merge-commitsoption to control handling of merge commits (skip or fail) - Enhanced conflict handling with automatic draft PR creation and detailed resolution instructions
- Improved PR body formatting with changelog extraction, linked issues, and metadata tracking
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 15 comments.
| File | Description |
|---|---|
| .github/workflows/cherry_pick.yml | Added allow_unmerged workflow input parameter and configured new environment variables for tracking workflow metadata |
| .github/scripts/cherry_pick.py | Complete rewrite of cherry-pick logic with support for unmerged PRs, conflict handling, validation, GraphQL integration for linked issues, and comprehensive error tracking |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| try: | ||
| commit_author = commit.author.login if commit.author else None | ||
| if commit_author and commit_author not in self.pull_authors: | ||
| self.pull_authors.append(commit_author) |
Copilot
AI
Nov 18, 2025
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.
Bare except clause will catch all exceptions including KeyboardInterrupt and SystemExit. This should be replaced with a specific exception type like Exception or AttributeError.
| self.pull_authors.append(commit_author) | |
| except AttributeError: |
…formation - Updated the `created_backport_prs` structure to store conflicted files alongside target branches and PRs. - Improved the PR body generation to include a section for files with conflicts, providing links for easier resolution. - Enhanced conflict handling to return a list of conflicted files, improving logging and user feedback during cherry-pick operations.
- Introduced a new `pr_template.py` file containing PR template and issue reference patterns for the YDB project. - Updated `validate_pr_description.py` to utilize the new template and patterns, ensuring consistency in PR descriptions. - Enhanced `cherry_pick.py` to import category definitions and streamline changelog category handling.
|
⚪
🟢 |
|
⚪
🟢 |
…resolution - Added detailed error handling for the `git rev-parse` command to ensure the repository is cloned before execution. - Updated exception handling to specify the type of error encountered during PR fetching and automerge attempts. - Improved conflict detection logic to ensure all changes are captured and logged appropriately. - Enhanced logging for conflict resolution, providing clearer feedback on the status of conflicted files.
|
⚪
🟢 |
|
⚪
🟢 |
- Added detailed diagnostics for `git merge-base` command to better handle ancestor checks and error reporting. - Updated conflict resolution logic to capture line numbers of conflicts, improving user feedback on conflicted files. - Enhanced PR body generation to include links to specific lines in files with conflicts, facilitating easier resolution. - Introduced a method to find the first line with conflict markers in files, improving conflict detection accuracy.
|
⚪
🟢 |
|
⚪
🟢 |
- Enhanced the logic for capturing conflict messages to ensure accurate matching of file paths, including handling both relative and absolute paths. - Improved the detection of continuation lines in conflict messages, allowing for better summarization of conflicts. - Added a cleanup step to quit the cherry-pick operation if no commits are left to apply, improving script robustness.
|
⚪
🟢 |
|
⚪
🟢 |
- Updated the logic to collect and determine the changelog category from multiple PRs, ensuring it is only set if all categories are the same. - Improved handling of category extraction to allow for better flexibility when dealing with differing categories across PRs. - Enhanced comments for clarity on the purpose of category determination in the changelog process.
…k script - Introduced a new method to add Git conflict markers for conflict types (DU, UD, AA) where they are not generated automatically. - Enhanced the conflict resolution process by ensuring visibility of conflicts in PR diffs, improving user experience during cherry-picking. - Updated logging to provide feedback when conflict markers are added, aiding in troubleshooting and resolution efforts.
|
Backported to |
- Added debug and warning logs to provide better visibility into the conflict resolution process, including details on the number of status lines and specific conflict types (DU, UD, AA). - Improved error handling by including exception information in warning logs when adding conflict markers fails. - Updated logging to ensure clarity on the state of conflict markers and the conditions under which they are added or skipped.
|
⚪
🟢 |
|
Backported to |
|
⚪
🟢 |
- Added logic to skip files that already have conflict markers to prevent overwriting existing information during cherry-picking. - Introduced a mechanism to track processed files, ensuring that multiple conflicts in the same file are handled sequentially without duplication. - Enhanced logging to provide clearer insights into the conflict resolution process, including reasons for skipping files and details on existing conflict markers.
- Replaced the previous method for extracting conflict messages with a new function that accurately matches file paths from git output, improving reliability. - Enhanced the handling of conflict messages to ensure both relative and absolute paths are considered, streamlining the conflict resolution process. - Removed redundant code related to conflict message extraction, simplifying the overall logic and improving maintainability.
- Introduced a new method to find conflict messages for specific files, improving the accuracy of message matching from git output. - Simplified the conflict message extraction logic by consolidating redundant code, enhancing maintainability and readability. - Ensured compatibility with both relative and absolute file paths in conflict message matching, streamlining the conflict resolution process.
- Added a warning log for unexpected clean working tree state after conflict detection, indicating potential auto-resolution or inconsistent state. - Updated the cherry-pick logic to use '--skip' instead of '--quit' when a commit is already in the target branch, enhancing the cleanup process during cherry-picking.
|
⚪
🟢 |
|
⚪
🟢 |
|
Backport results:
|
|
Backport results:
|
|
Backported to |
… error handling
--allow-unmergedoption to backport unmerged PRs directly using their commits.--merge-commitsoption to control behavior for merge commits (skip or fail).Changelog entry
FOR CHANGLOG TEST!
ITS GOOD CHANGES!
Changelog category
Description for reviewers
📦 Backport
stable-25-2stable-25-2-1stable-25-3stable-25-3-1▶ Select branches manually - opens UI to select branches
Legend: