Conversation
Summary of ChangesHello @yesudeep, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly enhances the Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request significantly expands the capabilities of releasekit by introducing a more generic protocol for Forges and VCS systems, and adding multiple new backend implementations (GitLab, Bitbucket, Mercurial). The introduction of transitive version propagation and synchronized versioning adds valuable new features for managing complex monorepos. The code is well-structured, and the addition of protocol conformance tests is a great step towards ensuring robustness and maintainability.
I have two suggestions for improvement: one regarding an inefficiency in the new BitbucketAPIBackend and another to fix a type mismatch in the GitLabCLIBackend.
0c38755 to
111618e
Compare
6e359e0 to
be56676
Compare
4acf6ba to
42068aa
Compare
|
/gemini review |
There was a problem hiding this comment.
Code Review
This is an impressive and substantial pull request that introduces a powerful new release orchestration tool, releasekit. The changes are extensive, well-structured, and demonstrate a deep understanding of release engineering challenges across multiple ecosystems. The move to a protocol-based backend system is excellent for testability and future extensibility. The detailed configuration options, transitive dependency propagation, and comprehensive health checks are all great features. The documentation updates in the README and roadmap are also very thorough. I've found a couple of security-related improvement opportunities in the GitHub Action workflow file, but overall this is a very high-quality contribution.
dbbdb5d to
b36f997
Compare
|
/gemini review |
There was a problem hiding this comment.
Code Review
This is an extensive and well-executed pull request that significantly enhances the releasekit tool. The introduction of a protocol-based backend system for VCS, forges, package managers, and registries is a fantastic design choice that makes the tool highly extensible and testable. The addition of backends for GitLab, Bitbucket, Mercurial, and pnpm demonstrates the power of this new architecture.
The new features, including transitive version propagation, synchronized versioning, granular exclusion controls, and group-based releases, are powerful and well-implemented. The move to a dedicated releasekit.toml configuration file is a smart decision for a polyglot tool.
The attention to detail is evident throughout, from the security-conscious GitHub Action implementation to the comprehensive updates to documentation and the addition of numerous health checks. The code quality is excellent, and the new test suite provides good coverage for the new functionality. This is a high-quality contribution that greatly expands the capabilities of the release tool.
Add three backend implementations to validate protocol generality and catch transport/forge-specific edge cases early. The Forge protocol maps cleanly to CLI tools (gh, glab) and REST APIs (Bitbucket), and the VCS protocol works for both Git and Mercurial. Naming convention: CLI-based backends use 'CLIBackend' suffix, REST API-based backends use 'APIBackend' suffix. This makes it unambiguous if a future GitHubAPIBackend is added alongside GitHubCLIBackend. Backend renames: - GitHubBackend → GitHubCLIBackend - GitLabBackend → GitLabCLIBackend - GitBackend → GitCLIBackend - MercurialBackend → MercurialCLIBackend - BitbucketBackend → BitbucketAPIBackend Forge protocol (release-please foundations): - list_prs, add_labels, remove_labels, update_pr methods - GitHubCLIBackend: gh CLI (existing, extended) - GitLabCLIBackend: glab CLI (PR→MR, no draft releases) - BitbucketAPIBackend: httpx REST API (no labels, no native releases) Auth: Bearer token or Basic (username + app password), fail-fast Versioning (independent + synchronized modes): - BFS transitive PATCH propagation via dependency graph - synchronize=True config for lockstep versioning Code cleanup: - Removed section marker comments per GEMINI.md - Moved in-function imports to top-level - Converted asyncio.get_event_loop() to @pytest.mark.asyncio Config: - Added synchronize field to ReleaseConfig (default False) Tests: 524 pass. Lint and format clean. feat(releasekit): add prepare and release orchestrators Implements the two remaining orchestrators for the release-please pipeline: - prepare.py: bump versions, generate changelogs, open/update Release PR with embedded JSON manifest (RFC: marker comments for machine-parsing) - release.py: find merged PR, extract manifest, create tags, platform Release, update labels (autorelease: pending to tagged) Both modules are forge-agnostic with graceful degradation: - GitHub: full support (draft releases, labels) - GitLab: no drafts (logged warning), labels on MRs - Bitbucket: tags only (no Releases), labels are no-ops Also adds prepare/release CLI subcommands and updates the roadmap. Roadmap TODO: version constraint compatibility checking in BFS propagation to auto-skip packages whose pins conflict with new majors. feat: workspace protocol refactor: reorganize fix: for cli and api fix: cli and api fix: more stuff fix: lint fix: lint
b36f997 to
fa26455
Compare
Summary
Extends the releasekit Forge and VCS protocols with new operations needed for the release-please model, adds three new backend implementations to validate protocol generality, implements transitive version propagation, and adds granular exclusion controls with PyPI metadata compliance.
Changes
Forge protocol extensions
list_prs: find PRs by label/state/head (for tag step)add_labels/remove_labels: manage autorelease labelsupdate_pr: update Release PR body with embedded manifestNew backends
GitHubCLIBackend— usesghGitLabCLIBackend— usesglabBitbucketAPIBackend— useshttpxGitCLIBackend— usesgitMercurialCLIBackend— useshgNaming convention
CLI-based backends use
CLIBackendsuffix, REST API-based useAPIBackend. Makes futureGitHubAPIBackendunambiguous alongsideGitHubCLIBackend.Versioning
deque-based, handles multi-level chains)synchronize=True) for lockstep releasessynchronizefield added toReleaseConfig(defaultFalse)Exclusion hierarchy
Three levels of exclusion control how much of the pipeline a package participates in:
exclude_publishexclude_bumpexcludeGroup references with
group:<name>syntaxAll exclude lists support
group:<name>references that recursively expand to group patterns. Cycle detection prevents infinite loops.New health checks (17 total, up from 10)
python_version— consistentrequires-pythonacross packagespython_classifiers— Python version classifiers (3.10–3.14)dependency_resolution—uv pip checkpassesnamespace_init— no__init__.pyin namespace directoriesreadme_field— publishable packages declarereadmein[project]changelog_url— publishable packages haveChangelogin[project.urls]publish_classifier_consistency—exclude_publishagrees withPrivate :: Do Not UploadclassifierPyPI metadata improvements (all packages + plugins)
Framework :: AsyncIOclassifierFramework :: PydanticclassifierFramework :: Pydantic :: 2classifierChangelogURL to[project.urls]for all 14 publishable packagesPrivate :: Do Not Uploadclassifier to all 39 samples and 8 unreleased pluginsCode cleanup
asyncio.get_event_loop()to@pytest.mark.asyncio.releasekit-state.jsonandrelease-manifest.jsonto.gitignoreREADME updates
uv publishvsreleasekitcomparison tablegroup:reference syntaxexclude_publishandexclude_bumpTests