-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
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
Have a deprecation policy #1532
Comments
Releases tagged LTS will not include breaking changes. Our expected cadence for those is annually with the .12 releases. We expect to include security and maintenance fixes. Any releases not identified as LTS may include breaking changes. |
FWIW this policy will likely become a headache for Sentry supporting Sanic. We are currently supporting 0.8, 18, and 19 and just experienced CI breakage because of a change in supported Python versions. As far as I understand your versioning scheme implies that version That's fine, but no tooling expects this. |
* fix: Deal with gevent patched thread locals * fix: Linters * build: Remove support for sanic 19 See sanic-org/sanic#1532 (comment)
I will not speak for everyone, but I do understand your point and appreciate you bringing this to us. We are trying to take a "build fast, run fast" attitude, which also means that we are trying to be reactive to users as features and bugs come in. Which means with a regular release cycle, and an LTS, we can give developers an expectation. Now, using the terms "beta" and "stable" are somewhat arbitrary. The whole project is still classified as "beta" in PyPI. If your usage numbers are showing a bent towards v19 releases, then great. That doesn't make version 18 any less "in development" than v19. I for one use the 18.12LTS in production for work.And will wait to upgrade to 19.12 in the beginning of 2020. Knowing that a particular version will be supported with security or other major bug fixes for two years isn't a statement of its "betaness", but if it's assurance that you will not be required to upgrade. Neither semver nor calver are perfect systems. They have advantages and disadvantages. This change was a positive (from our perspective) because it gives people more clarity and transparency when making a decision on which version to use. Indeed, I would argue it is much more predictable than the previous "zero-ver" that it was on, and that projects like Flask just were able to kick. With that said, v19.6 does have a new feature (ASGI support) that we are explicitly calling out as a beta feature. That is to say that running Sanic over ASGI may change if needed. However, that will not alter the front facing API. The LTS is there for precisely this reason. You probably are right that we need a better way to document the practices. Indeed I am hoping to have a brand new website with details like this out by the 19.12LTS. If you have any other thoughts or critiques I for one would be happy to hear your thoughts. Again, thank you for bringing this up. |
19.6's breakage was not in terms of API, but in terms of supported Python versions. The labels "beta" and "stable" are not arbitrary, they are just relative. Yes, sanic as a project is considered beta, but 18 is still considered more stable than 19. In any case, if I am running my sanic v19 app on Python 3.5, updating Sanic will break my app. This was an intentional change, while the same happening with version 18 would probably be considered a bug.
From my perspective (ex-Flask maintainer) Flask has had a more predictable deprecation policy than Sanic since way before it became 1.0. A widely adopted convention for pre-1.0 versions in semver is to deprecate things in npm and cargo, two package managers with some knowledge of semver, pin such versions correctly (e.g. Really, one thing i care about right now is: If I start my project in Sanic, which version should I use? Again, I would assume In any case I will no longer have tests for sanic 19 in the Sentry SDK's CI until 19.12 comes out. |
When sanic was using semver, it was very clear which version is bumped for API-breaking changes. With the adoption of calver, this is not clear at all.
At Sentry we maintain code that hooks into Sanic's API to report uncaught exceptions. If Sanic was still following semver, we would have a test matrix of Sanic versions 0.8, 0.9, 1.x, 2.x and so on. Which version ranges make sense now?
Twisted uses calver but also has a incredibly extensive deprecation policy which solves this problem. Sanic used to come with the implicit guarantees of semver, but now has nothing.
The text was updated successfully, but these errors were encountered: