4.3 KiB
Contributing to MaksIT.UScheduler
Thank you for your interest in contributing to MaksIT.UScheduler!
Table of Contents
- Development Setup
- Branch Strategy
- Making Changes
- Commit Message Format
- Versioning
- Build and Test
- Release Process
- Changelog Guidelines
Development Setup
-
Clone the repository:
git clone https://github.com/MaksIT/uscheduler.git cd uscheduler -
Open the solution in Visual Studio or your preferred IDE:
src/MaksIT.UScheduler.slnx -
Build the project:
dotnet build src/MaksIT.UScheduler/MaksIT.UScheduler.csproj
Branch Strategy
main- Production-ready codedev- Active development branch- Feature branches - Created from
devfor specific features
Making Changes
- Create a feature branch from
dev - Make your changes
- Update
CHANGELOG.mdwith your changes - Update version in
.csprojif needed - Run tests locally (
utils/Invoke-TestEngine.bat) - Submit a pull request to
dev
Commit Message Format
(type): description
| Type | Description |
|---|---|
(feature): |
New feature or enhancement |
(bugfix): |
Bug fix |
(refactor): |
Code refactoring without functional changes |
(perf): |
Performance improvement |
(test): |
Add or update tests |
(docs): |
Documentation-only changes |
(build): |
Build system, dependencies, or packaging |
(ci): |
CI/CD or automation changes |
(style): |
Formatting or non-functional style changes |
(revert): |
Revert a previous commit |
(chore): |
General maintenance |
Guidelines: lowercase description, no trailing period.
Versioning
This project follows Semantic Versioning:
- MAJOR - Incompatible API changes
- MINOR - New functionality (backwards compatible)
- PATCH - Bug fixes (backwards compatible)
Version format: X.Y.Z (e.g., 1.0.2) or SemVer prerelease (0.1.0-alpha.1, 0.1.0-beta.1, 0.1.0-rc.1). Git tag is v{version}.
Before a release, keep versions aligned across:
src/MaksIT.UScheduler/MaksIT.UScheduler.csproj— canonical<Version>src/MaksIT.UScheduler.UI/MaksIT.UScheduler.UI.csprojCHANGELOG.md— matching version header
Build and Test
Tests and coverage badges
.\utils\Invoke-TestEngine.bat
The test engine runs MaksIT.UScheduler.Tests under Microsoft Testing Platform (src/global.json test.runner) with xunit.v3 and coverlet.MTP, applies the quality gate, and rewrites README coverage badges as shields.io URLs. Commit README.md when coverage changes. Or run dotnet test on the test project.
Sync RepoUtils
Local-copy from maksit-repoutils (Community profile). Do not use Update-RepoUtils.
Release Process
Prerequisites
- .NET SDK
- PowerShell 7+
- Git CLI
- GitHub CLI (
gh) — required for production releases onmain GitHubenvironment variable (seeutils/engines/release/scriptSettings.json)
Development build (dev branch)
No git tag required. Uncommitted changes are allowed.
# 1. Update version in .csproj files and CHANGELOG.md
git checkout dev
# 2. Run the release engine
.\utils\Invoke-ReleasePackage-Single.bat
Output: release/maksit.uscheduler-{version}.zip (local only; GitHub publish is skipped on non-release branches).
Production release (main branch)
# 1. Merge to main and ensure a clean working tree
git checkout main
git merge dev
# 2. Create tag matching the .csproj version
git tag v1.0.2
# 3. Run the release engine
.\utils\Invoke-ReleasePackage-Single.bat
On main, ReleasePublishGuard requires an exact tag on HEAD matching the .NET project version. The engine publishes tests, builds the bundle, creates the ZIP, and pushes a GitHub release when guard requirements are met.
Configuration: utils/engines/release/scriptSettings.json
Changelog Guidelines
Follow Keep a Changelog format:
## [1.0.2] - YYYY-MM-DD
### Added
- New features
### Changed
- Changes to existing functionality
### Fixed
- Bug fixes