Forgejo publicly uses semantic versioning since v7.0.0.
However no formal definition has been made for MAJOR, MINOR, PATCH. I would propose the following:
PATCH:
- only backward compatible bug fixes (migrations should be avoided as much as possible)
- template/styling changes are possible (no guarantee for now)
MINOR:
- migrations are fine
- no feature removal
- URL changes are Ok outside of the API, as long as GET endpoints have a proper redirection (for bookmarks/history)
- API must stay compatible (additions of fields to responses or new API routes are fine for instance)
- New configurations are fine, as long as old config is still supported and no value is needed (sensible default)
- Deprecation messages are ok
- template/styling changes are fine (no guarantee for now)
MAJOR: anything else
- feature removal
- API schema change
- Configuration change
Note: template and styling customizations are currently not covered by this semantic versioning and may break anytime.
Ideally I think it would be great if major version would only have some feature removal, API schema changes and configuration changes.
Put in other words, every effort should be made to integrate the new features in a backward-compatible way.
This way all admins can upgrade to the latest minor version (9.99 for instance), check all deprecation messages and fix them, and the upgrade to 10.0 is mostly a no-op (from the user point of view - the sysadmin may need to adjust some tools/config files which could not be made backward compatible).
answered question: what about template/styling changes?̛
They will be breaking IF the sysadmin made some customization.
I would rather have the template changes under MINOR (so no compatibility-promise), at least until a clear direction has been made in forgejo/discussions#160.
Forgejo publicly uses [semantic versioning](https://semver.org/spec/v2.0.0.html) since [v7.0.0](https://forgejo.org/2024-04-release-v7-0/#70-long-term-support-lts-and-semantic-versioning).
However no formal definition has been made for MAJOR, MINOR, PATCH. I would propose the following:
PATCH:
- only backward compatible bug fixes (migrations should be avoided as much as possible)
- template/styling changes are possible (no guarantee for now)
MINOR:
- migrations are fine
- no feature removal
- URL changes are Ok outside of the API, as long as GET endpoints have a proper redirection (for bookmarks/history)
- API must stay compatible (additions of fields to responses or new API routes are fine for instance)
- New configurations are fine, as long as old config is still supported and no value is needed (sensible default)
- Deprecation messages are ok
- template/styling changes are fine (no guarantee for now)
MAJOR: anything else
- feature removal
- API schema change
- Configuration change
Note: template and styling customizations are currently not covered by this semantic versioning and may break anytime.
---
Ideally I think it would be great if major version would only have some feature removal, API schema changes and configuration changes.
Put in other words, every effort should be made to integrate the new features in a backward-compatible way.
This way all admins can upgrade to the latest minor version (9.99 for instance), check all deprecation messages and fix them, and the upgrade to 10.0 is mostly a no-op (from the user point of view - the sysadmin may need to adjust some tools/config files which could not be made backward compatible).
---
<details><summary>answered question: what about template/styling changes?̛</summary>
They will be breaking IF the sysadmin made some customization.
I would rather have the template changes under MINOR (so no compatibility-promise), at least until a clear direction has been made in forgejo/discussions#160.
</details>