Description
Hello together,
This issue is to hold a discussion about which frameworks to use.
The scope of this issue is to decide on features all projects (currently backend and mobile app) should have.
Versioning and Release note management
We will be using Semantic Versioning for all projects.
Summary of Semantic Versioning:
Given a version number MAJOR.MINOR.PATCH, increment the:
- MAJOR version when you make incompatible API changes,
- MINOR version when you add functionality in a backwards-compatible manner, and
- PATCH version when you make backwards-compatible bug fixes.
Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.
As all npm packages and modules use this system, so will we. For more information on Semantic Versioning check out the specs.
There are several tools to automate and assist with a semver workflow. Al of the following tools can bump versions and create release notes more or less automated.
GitHub Releases
GitHub has this feature that allows you to tag specific commits to create a release. Whichever tool we decide on, all versions should be here too.
Using GitHub Releases without another tools consists of manually creating the tag and version string and after that uploading the build artifacts or other binary files.
Pro | Con |
---|---|
No external tools necessary | Completely manual |
No changelog neccessary (although prefered) | |
Can be scripted (using POST requests) |
git-semver
This works on either just a npm package.json
file to get the current version and bump it, or it will look for a CHANGELOG.md
file in the repository root. Using this tool one needs to manually run a script to bump the version and doing that decide, if this is just a patch, a minor or major release.
Pro | Con |
---|---|
easy to get into | need to release manually, not possible with CI |
no need to keep a changelog (although prefered) |
Reno
This is a release note management that is used in OpenStack. This framework can be dismissed easily, since it is far too complex for small projects and - far more important - it doe not work well with the Git Flow.
Pro | Con |
---|---|
- | does not work for our workflows |
semantic-release
As last framework for release note and version management has the capability to create both without any manual configuration. If one merges to master this tool will run a job and determine which version to bump (path, micor, major) and the release notes that go with this version. It does this on tthe basis of all the commits. Using this tool we are constrained to use only commits according to the Angular Commit Message Conventions.
Pro | Con |
---|---|
can create releases automatically | Need to have a clean commit history |
Last words about version management
Which ever tool we use, we will always publish to GitHub Releases, since many developers take this as the source of truth for the appication code and binaries. We could even add a changelog to every version on that platform.
So we need to think about how we will create a new version. Either we could do some things manual or completely automated. On the manual route it is possible to run a CI script when a git tag is created. Between manual and automated is the git-semver approach: Writing a CHANGELOG.md
and running the script manually to bump a version. The completely automated way would be using semantic-release, but I don't like this very much because of the strict commit message guidelines. They will likely scare of first time contributors and add an overhead to the code review process.
Linting
As all projects will be written in ECMAScript ESLint will be used.
- Configurations
- AirBnB
- Canonical
- ESLint
- prettier
- Standard
- others?
- Things that ESLint can't find
- Spread syntax
- default parameter syntax
- spelling mistakes
- ???
Documentation
- Should be publicly acessible
- Self-hosted
- Vuepress
- GitBook
- ???
- GitHub Pages
- GitHub Wiki
- ???
- Self-hosted
- for backend
- swagger
- for everything
- JsDoc
Feel free to comment on this issue and start a discussion on which framework / program to use.
If I missed any app just leave a comment, I will add it as soon as possible.
Cheers, Semjon