As with any open source projects, contributions are most welcome!
Generally pull requests should go to the master
branch where all new development and bugfixes are integrated. An exception are bug fixes that only apply to a specific version, which can be targeted to the relevant release/vX.Y
branch.
Run the unit tests in NCalcAsync.Tests
to test the project. New features should always have corresponding unit tests that exercise them.
Coverlet is used to collect code coverage when running the unit tests, using the VSTest integration.
The script run-code-coverage.ps1
will run the tests with code coverage enabled and then produce an HTML report.
Github Actions are used for CI builds in all pull requests and on new commits to master
, and for publishing packages (see below).
Nerdbank.GitVersioning is used to assign version numbers to the packages using a standard major.minor.patch[-alpha]
scheme. Patch versions may only contain bugfixes. New backward compatible features require a new minor version, and any breaking changes require a new major version.
The nbgv
tool is used to manage the git branches and tags and to update version.json
.
master
is used to integrates new features and bugfixes. Any builds here will be labelled X.Y.Z-alpha
.
release/vX.Y
branches contain the commits that are published as non-alpha versions, and any builds in them will get a X.Y.Z
version number.
Any non-backward compatible features require a new major release. This should be created from master
with nbgv
:
git checkout master
nbgv set-version X.0-alpha
Commit the new version.json
. Create a branch for the new major release:
nbgv prepare-release
nbgv
will create a new release/vX.Y
branch and update version.json
in both that branch and in master
.
Check that it looks correct and then push both master
and the new branch to this repository to trigger builds.
Follow the publishing process below to tag and publish the release.
New backward-compatible features should always be published in a new minor release. This should be created from master
with nbgv
:
git checkout master
nbgv prepare-release
nbgv
will create a new release/vX.Y
branch and update version.json
in both that branch and in master
.
Check that it looks correct and then push both master
and the new branch to this repository to trigger builds.
Follow the publishing process below to tag and publish the release.
Just push commits to the relevant release/vX.Y
branch, and follow the publishing process below to tag and publish the release.
The current master
can be released as an alpha by following the publishing process below.
- Create and tag the new version with
nbgv
: ** Alpha releases:nbgv tag master
** Other releases:nbgv tag release/vX.Y
- Push the tag to Github.
- Go to https://github.com/ncalc/ncalc-async/tags and select the tag.
- Click
Create release from tag
and copy the release notes fromCHANGELOG.md
, and publish the release. - A Github Action will run to package the library and publish it to Nuget.