Packages in this repository must be versioned using PVP for Haskell and PureScript packages, and Semantic Versioning 2.0.0 for other languages.
Most importantly, minor and patch changes must not include any breaking changes: no entity is removed, and there's no change in type definitions and functionality of preexisting exported entities. If any of this occurs, a major version must be bumped. Disregarding this rule can end up in breaking client package updates.
Any changes must be logged in CHANGELOG.md
, which must comply with Keep A
Changelog requirements. Each entry
should also provide a link to the GitHub issue and/or Pull Request that
corresponds to the entry.
An example entry is below:
* Something is fixed
[#123](https://github.com/mlabs/lambda-buffers/issues/123)
In this repository we adopted a flow with multiple release branches, one for
each major version. This means that users of these packages can point to these
branches and use nix flake update
without having to deal with breaking changes.
These branches must follow the pattern of v-MAJOR(.MAJOR)
(v1
, v2
etc. for
Semantic Versioning, or v1.0 for PVP).
Furthermore, release versions are pushed as git tags
.
Stable versions should always be pushed to their respective release branches in a reasonable schedule (weekly or monthly depending on the project). In most cases this would also mean a release, which requires some additional manual tasks:
- bump versions in package manifest files (*.cabal, Cargo.toml, etc.)
- update lock file if necessary
- push git tag
If a repository has multiple packages, these can evolve independently and their
release cycle could be different. All changes shall be contained in the
aggregated CHANGELOG.md
of all packages under the appropriate header.
If a Semantic Versioning and PVP are used simultaneously, the first major number of PVP must always be 1 (or 0 if in a beta state).
Versioning policies when updating dependencies are well explained in the PVP and Semver documents, the same rules apply to dependencies inside the same repository. In short, if a dependency update does not have any effect on the public interface of the upstream package, it can be considered a minor or patch release.
As an example if we have three packages
HaskellApp-v1.3.4.1
,HaskellLib-v1.3.0.0
andRustApp-v0.1.0
, we could bumpHaskellApp
to1.4.0.0
without touching the other two.
This document was adapted from tx-village
CONTRIBUTING.md
's.
This is a living document that may change and grow to meet the project's needs