Skip to content
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

feat: gains version.md guidance #34

Merged
merged 6 commits into from
Mar 4, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions maintainer.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ Maintainers are the decision-makers for structural changes or contentious featur

Maintainers should be particularly cautious about changes to repositories that are dependencies of larger workflows to avoid breaking changes.

## Versioning and Release

Maintainers are responsible for communicating overall application version through some informative version identifier. See [Software Versioning](version.md) for more information.

## Communication of Changes

Any substantial change that may affect other parts of the workflow should be communicated, preferably in a tech review call or similar forum, to discuss the potential impacts and necessary adjustments.
Expand Down
35 changes: 35 additions & 0 deletions version.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Software Versioning

Versioning is a critical aspect of software development. It is the process of assigning identifiers to a package to distinguish it from other versions of the same package. In contrast to a "git hash", which serves as an immutable machine-friendly identifier of the state of the software, the version number serves more to communicate the function of the package to (human) users. This document outlines our practices for versioning a package.
jdhoffa marked this conversation as resolved.
Show resolved Hide resolved

## Semantic Versioning

Semantic versioning ([SemVer](https://semver.org/)) is a versioning scheme that provides a simple set of rules and requirements that dictate how version numbers are assigned and incremented. The version number is a three-part number in the format of `MAJOR.MINOR.PATCH`.
- `MAJOR` version increments when you make backwards-incompatible changes
- `MINOR` version increments when you add functionality in a backwards-compatible manner
- `PATCH` version increments when you make backwards-compatible bug fixes, or maintenance, upkeep or any other developer-facing improvements

When a package is in a development stage (e.g. not yet ready for release), it is identified by "adding a large component" to the version number, e.g. `0.1.0.9000`. This is a signal to users that the package is in between stable releases.

## Calender Versioning

Calender versioning (CalVer) is a versioning scheme that uses some portion of the date of release as the version number. There are different styles of CalVer. One is very similar to SemVer, however the `MAJOR` version is instead replaced with the year of release, e.g. `YYYY.MINOR.PATCH`. Other variants can be found here: [CalVer](https://calver.org/).

## R Packages

R packages should be versioned using a Semantic Versioning (SemVer) compliant variant as described in the [R package versioning guide](https://r-pkgs.org/release.html#release-version).
jdhoffa marked this conversation as resolved.
Show resolved Hide resolved

This means, either standard SemVer, or the CalVer variant as described above. This may be the case, for example, in packages who's primary exported outputs are data, and the package is updated on a regular schedule.

## Other Repositories

At this stage, no clear guidance is given for other `RMI-PACTA` repositories. In general, some consistent tagging system may be useful (e.g. tag relevant images with `date-built`, or `COP CH 2024`, or other useful user-facing tags), but the specifics of this are left to the discretion of the repository maintainers.

## References

- [Semantic Versioning](https://semver.org/)
- [Calender Versioning](https://calver.org/)

## How

- [R package versioning guide](https://r-pkgs.org/release.html#release-version).