Pull requests are welcome!
Please include a clear description of the changes you have made with your request. The title should follow the conventional commits guideline with one of the following prefixes:
feat:
A new featurefix:
A bug fixdocs:
Documentation only changesstyle:
Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)refactor:
A code change that neither fixes a bug nor adds a featureperf:
A code change that improves performancetest:
Adding missing tests or correcting existing testsbuild:
Changes that affect the build system or external dependenciesci:
Changes to our CI configuration files and scriptschore:
Other changes that don't modify src or test filesrevert:
Reverts a previous commit
All code should be covered by unit tests and comply with the coding guideline in this project.
Technical expectation
As a framework for supporting unit testing, this project has a high standard for testing itself.
In order to support this, static code analysis is performed using SonarCloud with quality gate requiring to
- solve all issues reported by SonarCloud
- have a code coverage of > 90%
Additionally each push to the main
branch checks the quality of the unit tests using Stryker.NET.
On the build system, unit tests are executed both against the MockFileSystem
and the RealFileSystem
. This ensures that the tests verify correct assumptions.
In order to simplify and speedup the development process, per default, some tests are disabled in DEBUG mode.
These can be enabled by explicitely running the Testably.Abstractions.TestSettings
tests:
LongRunningTests
(AlwaysEnabled
/DisabledInDebugMode
(default) /AlwaysDisabled
) Some tests take a long time to run against the real file system (e.g. timeout). Per default, they are disabled in DEBUG mode.RealFileSystemTests
(AlwaysEnabled
/DisabledInDebugMode
(default) /AlwaysDisabled
) All tests against the real file system. Per default, they are disabled in DEBUG mode.
Note: These settings are stored locally in test.settings.json
which is excluded in .gitignore
so that it only affects the individual developer!
This project uses MinVer for versioning.
Tags are automatically added during a release build. In order to trigger a release, create a release branch. After all tests are successful and the manual check is approved, that Tag is automatically applied and Nuget Packages are pushed to nuget.org.
Release branches must follow the following naming convention:
`release/v{major}.{minor}.{revision}`