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

Introduce versioning and release scheme #44

Closed
opatut opened this issue Feb 24, 2021 · 1 comment
Closed

Introduce versioning and release scheme #44

opatut opened this issue Feb 24, 2021 · 1 comment
Labels
documentation Improvements or additions to documentation

Comments

@opatut
Copy link
Member

opatut commented Feb 24, 2021

We should start versioning this, to indicate possible breaking changes, and make sure we can communicate about it. I suggest a general version for both frontend and API. We should start at 0.1.0 and follow semver. I think we're still in initial development phase, no stable release 1.0.0 yet.

@opatut opatut added the documentation Improvements or additions to documentation label Feb 24, 2021
@opatut
Copy link
Member Author

opatut commented Dec 1, 2021

We're following semver 2.0.0, and there is a script to tag a new release (e.g. ./tag-release 1.2.3).

Public interface

The public interface considered for breaking changes is:

  • The HTTP API, including the tile schema
  • The shape of the imported data (OSM and OBS data)
  • The shape of exported data (there is no export yet)
  • The configuration files.
  • The database schema.

Rationale

The reasoning behind this is to make it easy for platform maintainers to check whether their upgrade needs additional work. This includes

  • checking for compatiblity with clients (such as the OBS device itself)
  • rerunning certain import or export routines

The public interface is also rather large (including the database schema, for example), as this makes it easier to build and maintain third-party integrations, which we want to have lots of.

There is no problem with huge version numbers. Let's get bumping!

Examples for non-breaking changes

  • additional routes
  • additional properties or layers in the tile schema
  • introducing a new export format or adding data to it
  • columns not imported anymore from OSM, but still present in the database
  • adding a new flag optional to the config file
  • not using a flag from the config file anymore
  • adding an optional column to the database
  • adding a new table in the database

Examples for breaking changes

  • non-backwards-compatible changes to the shape of an API route
  • removal of an API route
  • removing or renaming layers or properties in the tile shcema
  • removing an export format or changing it in a breaking way
  • importing more data from OSM or importing it in a different way that cannot be considered an improvement, but requires a reimport to still produce the same correctness of result as with the old code
  • adding a required config flag
  • changing the interpretation of a config flag that requires manual intervention and possible reconfiguration
  • breaking change of a column in the database

Bug fixes and features

A bug fix that does not change the public interface is usually released as a patch release (e.g. 0.3.2 -> 0.3.3).

A new feature that does not cause a breaking change can be released in a minor version (e.g. 1.3.x -> 1.4.0), if it adds to the public interface. If it does not add to it but only improves something internally (such as a change to the frontend), a patch release is acceptable. During initial development (0.x versions), a patch release is used instead of a minor release in any case that is not breaking public interface.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

1 participant