Enforce MAJOR.MINOR.PATCH for all SDK releases - #58
Conversation
|
👋 Hello @glenn-jocher, thank you for submitting a
For more guidance, please refer to our Contributing Guide. Don't hesitate to leave a comment if you have any questions. Thank you for contributing to Ultralytics! 🚀 |
UltralyticsAssistant
left a comment
There was a problem hiding this comment.
🔍 PR Review
Made with ❤️ by Ultralytics Actions
Reviewed the publishing workflow and SDK metadata path, including PEP 440 comparisons, missing-project handling, registry error propagation, manual recovery, first-release behavior, and release-tag outputs. The change correctly supports post-release ordering without introducing a concrete regression. LGTM.
UltralyticsAssistant
left a comment
There was a problem hiding this comment.
🔍 PR Review 2
Made with ❤️ by Ultralytics Actions
Since review 1, the post-release scheme has been replaced with patch increments, synchronization now rejects non-three-part contract and package versions, and manual publishing is also format-guarded. The existing publishing helper and version guard remain intact. I found no concrete regressions in the workflow or documentation changes. LGTM.
UltralyticsAssistant
left a comment
There was a problem hiding this comment.
🔍 PR Review 3
Made with ❤️ by Ultralytics Actions
Since review 2, the three-part version enforcement, patch-increment synchronization, manual-dispatch guard, and documentation updates remain consistent. I found no new behavioral regressions or unresolved concrete issues. LGTM.
|
🎉 PR #58 has been merged—thank you, @glenn-jocher, for strengthening SDK synchronization and publishing!
This PR puts that principle into practice by enforcing three-part versions, incrementing patches for SDK-only changes, adopting only newer API contracts, and validating versions before publishing. |
Ultralytics publishes only three-number
MAJOR.MINOR.PATCHversions. Remove the post-release scheme introduced in #56: SDK-only output changes now increment the patch number, while newer API contract versions are adopted without downgrading or reusing an existing SDK version. Reject non-three-part contract and package versions during synchronization.Preserve the existing publishing helper and its version guard. Add an explicit format rejection before manual-recovery handling so that manual dispatch cannot publish a non-three-part version either. The previously proposed PEP 440 publisher replacement has been removed from this PR. No non-three-part SDK version was published to PyPI; the skipped
0.1.31.post1attempt was followed by the normal0.1.32release.Record the organization-wide PyPI release standard in SDK
AGENTS.mdand correct the synchronization documentation. The general OpenAPI converter remains independent of this Ultralytics-specific publishing policy.Validation: executed the actual synchronization workflow steps with the current generator in an isolated repository. Verified SDK-only patch increments, API/SDK version collisions, repeated no-op runs, older-contract handling, newer-contract adoption, suffix rejection, and preservation of the consumer auth provider. Executed the actual publishing decision step with the installed Actions helper and live PyPI metadata: ordinary patch releases and manual recovery retain their behavior; suffixed and incomplete versions fail before publishing outputs, including with manual recovery enabled. All published SDK versions use three numeric components. Python 3.11 and 3.14 CI checks pass.
🛠️ PR Summary
Made with ❤️ by Ultralytics Actions
🌟 Summary
Updated SDK synchronization and publishing to enforce three-part
MAJOR.MINOR.PATCHversions, increment patches for SDK-only changes, and adopt only newer API contract versions.📊 Key Changes
.postreleases.AGENTS.mdandREADME.mdto document the PyPI versioning and synchronization rules.🎯 Purpose & Impact