-
Notifications
You must be signed in to change notification settings - Fork 5
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
Major.minor.patch definitions #41
Comments
This is quite hard to understand, how about something simpler to read like: "If the change to the SDK unintentionally breaks the its functionality or usage, and the change was not made to intentionally change the underlying functionality or usage, then this should not be considered a breaking change" Also I'd call out the breaking changes first before mentioning what does not fall under that category |
I'm agreed with most of @kavilla's proposal. It was helpful for me to re-categorize some of our past decisions under a much more aggressive framework which would allow us to move faster (at the expense of plugin developers, who will need to make more changes for minor releases) What's a breaking changeNew definitionAny change in the public API (as documented on the public documentation site).
What's not a breaking changePreviously considered breaking1. Breaking version bumps to direct dependencies
2. Breaking bumps to runtimes, packaging, test frameworks (node, webpack, yarn, babel, jest, mocha, etc)
3. Undocumented public APIs
4. Dropping support for visual customization in saved visualizationsOld saved objects should remain functional, but we retain the ability to remove cosmetic capabilities and controls 5. Dropping browser support for old browsersNever breakingFeatures
Non-features
Other assumptionsAll new development should happen on
|
Once this section is complete we should update documentation defined.
Definitions
Definition of major:
core.application.navigateToApp
on click which basically refactors the component to utilize the router instead of a href causing a full browser reload. This had the unintended consequence of random query params on thedashboards
route preventing navigation to the select dashboard. A developer could have implemented their plugin or feature to depend on the ability that they can inject a query param into the route without any consequence and rely on that query param for functional purposes. But since this is not explicitly stated as something we supported this should not factor as a breaking change. Developers should feel free to create an issue for the SDK and it can be discussed if their previous solution should be supported within the SDK.Definition of minor:
Definition of patch:
Dependency management
Issues that constantly arises when considering SEMVER and if something is breaking change are related to dependencies.
The current system attempts to control the bundle size of the application and prevent conflicts of usages by utilizing a global shared dependencies that adds these packages and can be re-used by plugins and components even though it is not explicitly defined within the nested package.json. This causes issues at build time when there is a lazy string compare to check if the defined string are the same or not (even when they semantically resolve to the same version). Even the adding of the package in the core layer can cause breakages because a plugin could have defined this package since it needed it and core was not providing it. But since we added it, it goes through the conflict prevention mechanism and fails. Removals as well cause issues because plugins can depend on core importing this dependency and did not explicitly defined it themselves.
If the goal is to not cause breaking changes when bumping versions for whatever reason, the following options are:
We can also consider treating dependency changes as non-breaking changes and provide developers mitigations. There will be code change requirements but there should be consideration. We should consider if we did not explicitly defined the types being imported even though we did not prevent exposure of these types does this fall under the unintended consequences definition. Developers should feel free to create an issue for the SDK about why the package has to be consumed to allow them to use a previous dependency and exposing a specific type.
The above options think about the project as a SPA and should be considered as so when we move forward unless stated as a architecture design is decided to be different (if we ever plan so).
Medium term
Define a public API that people can trust
The text was updated successfully, but these errors were encountered: