mirror of
https://github.com/MAKS-IT-COM/uscheduler.git
synced 2026-11-14 01:36:13 +01:00
240 lines
8.1 KiB
Markdown
240 lines
8.1 KiB
Markdown
# Contributing to MaksIT.UScheduler
|
|
|
|
Thank you for your interest in contributing to MaksIT.UScheduler!
|
|
|
|
## Table of Contents
|
|
|
|
- [Development Setup](#development-setup)
|
|
- [Branch Strategy](#branch-strategy)
|
|
- [Making Changes](#making-changes)
|
|
- [Commit Message Format](#commit-message-format)
|
|
- [Versioning](#versioning)
|
|
- [Build and Test](#build-and-test)
|
|
- [Release Process](#release-process)
|
|
- [Changelog Guidelines](#changelog-guidelines)
|
|
|
|
---
|
|
|
|
## Development Setup
|
|
|
|
1. Clone the repository:
|
|
```bash
|
|
git clone https://github.com/MaksIT/uscheduler.git
|
|
cd uscheduler
|
|
```
|
|
|
|
2. Open the solution in Visual Studio or your preferred IDE:
|
|
```
|
|
src/MaksIT.UScheduler.slnx
|
|
```
|
|
|
|
3. Build the project:
|
|
```bash
|
|
dotnet build src/MaksIT.UScheduler.UI/MaksIT.UScheduler.UI.csproj
|
|
```
|
|
|
|
---
|
|
|
|
## Branch Strategy
|
|
|
|
- `main` - Production-ready code
|
|
- `dev` - Active development branch
|
|
- Feature branches - Created from `dev` for specific features
|
|
|
|
---
|
|
|
|
## Making Changes
|
|
|
|
1. Create a feature branch from `dev`
|
|
2. Make your changes
|
|
3. Update [CHANGELOG.md](CHANGELOG.md) and [WHATSNEW.md](WHATSNEW.md). What's New is the short list shown in the app. The changelog keeps Added, Changed, and Fixed, including maintainer notes.
|
|
4. Update version in `.csproj` if needed
|
|
5. Run tests locally (`utils/Invoke-TestEngine.bat`)
|
|
6. 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](https://semver.org/):
|
|
|
|
- **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:
|
|
|
|
1. **`src/MaksIT.UScheduler.UI/MaksIT.UScheduler.UI.csproj`** — canonical `<Version>`
|
|
2. **`CHANGELOG.md`** — matching version header
|
|
3. **`WHATSNEW.md`** — short notes for that version, shown in the app
|
|
|
|
---
|
|
|
|
## Build and Test
|
|
|
|
### Tests and coverage badges
|
|
|
|
```powershell
|
|
.\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](https://git.maks-it.com/MAKS-IT/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 on `main`
|
|
- `GitHub` environment variable (see `utils/engines/release/scriptSettings.json`)
|
|
|
|
### Development build (`dev` branch)
|
|
|
|
No git tag required. Uncommitted changes are allowed.
|
|
|
|
```powershell
|
|
# 1. Update version in .csproj files, CHANGELOG.md, and WHATSNEW.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)
|
|
|
|
```powershell
|
|
# 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`
|
|
|
|
## Microsoft Store (MSIX)
|
|
|
|
`MsixPack` writes `releases/maksit-uscheduler-{version}.msix` from the Windows installer payload (the UI program plus bundled Scripts). It is a full-trust desktop package (`runFullTrust`), x64, language English (`en-us` only). Upload that file on an **MSIX** product in Partner Center. The Store re-signs it. An EXE/MSI product listing cannot take this file.
|
|
|
|
The UI project sets `SatelliteResourceLanguages` to `en`, and `MsixPack` drops any leftover culture folder that contains `*.resources.dll`. If that folder is packed, makeappx treats it as a second package language. Partner Center then reports the English resources as incomplete, even though the app UI is English only. A Store listing language marked incomplete is separate: that means a required listing field for that language is still empty.
|
|
|
|
Partner Center package identity for this product:
|
|
|
|
| Field | Value |
|
|
|-------|--------|
|
|
| Package/Identity/Name | `MAKS-IT.UScheduler` |
|
|
| Package/Identity/Publisher | `CN=FCC8C0E7-6D5F-4028-B8EE-903B88C0C8F9` |
|
|
| PublisherDisplayName | `MaksIT` |
|
|
| Package Family Name | `MAKS-IT.UScheduler_pt3s39h1tn26a` |
|
|
| Package SID | `S-1-15-2-839323616-4275740711-2118678478-1772334301-1145667798-1068409364-565805883` |
|
|
| Store ID | `9PLRWJ6G7RSF` |
|
|
|
|
Those name, publisher, and publisher display strings are `packageName`, `publisher`, and `publisherDisplayName` in `utils/engines/release/scriptSettings.json`. A placeholder publisher `CN=PartnerCenter` stops `MsixPack` until it is replaced.
|
|
|
|
The Store deep link and the Web Store URL are available after the product is live. The `.msix` is not a GitHub release asset.
|
|
|
|
Store listing copy:
|
|
|
|
| Field | Document |
|
|
|-------|----------|
|
|
| Short description, description, extra requirements | [packaging/microsoft-store/description.md](packaging/microsoft-store/description.md) |
|
|
| Product features (up to 20 bullets, 200 characters each) | [packaging/microsoft-store/product-features.md](packaging/microsoft-store/product-features.md) |
|
|
| Keywords (up to 7, 40 characters each, 21 words total) | [packaging/microsoft-store/keywords.md](packaging/microsoft-store/keywords.md) |
|
|
| Copyright, additional license terms, Developed by | [packaging/microsoft-store/additional-info.md](packaging/microsoft-store/additional-info.md) |
|
|
| Restricted capability `runFullTrust` | [packaging/microsoft-store/restricted-capabilities.md](packaging/microsoft-store/restricted-capabilities.md) |
|
|
| Store logos (9:16 poster, 1:1 box art, app tiles) | [packaging/microsoft-store/logos.md](packaging/microsoft-store/logos.md) |
|
|
| Screenshot order (`<!-- microsoft-store N -->`) | [docs/features.md](docs/features.md) |
|
|
|
|
### System requirements (Properties)
|
|
|
|
Partner Center → **Properties** → **System requirements**. A blank cell stays unset. Minimum is what the Store may warn on; Recommended does not warn.
|
|
|
|
The app is a win-x64 desktop scheduler. It does not use a camera, microphone, radio, gamepad, or a specific GPU.
|
|
|
|
| Feature | Minimum | Recommended |
|
|
|---------|---------|-------------|
|
|
| Touch screen | | |
|
|
| Keyboard | Minimum | |
|
|
| Mouse | Minimum | |
|
|
| Camera | | |
|
|
| NFC HCE | | |
|
|
| NFC Proximity | | |
|
|
| Bluetooth LE | | |
|
|
| Telephony | | |
|
|
| Microphone | | |
|
|
| Xbox controller or gamepad | | |
|
|
| Windows Mixed Reality motion controllers | | |
|
|
| Windows Mixed Reality immersive headset | | |
|
|
| Memory | 2 GB | 4 GB |
|
|
| DirectX | Not specified | Not specified |
|
|
| Video memory | Not specified | Not specified |
|
|
| Processor | x64 | Not specified |
|
|
| Graphics | Not specified | Not specified |
|
|
|
|
---
|
|
|
|
## Changelog Guidelines
|
|
|
|
Follow [Keep a Changelog](https://keepachangelog.com/) format:
|
|
|
|
```markdown
|
|
## [1.0.2] - YYYY-MM-DD
|
|
|
|
### Added
|
|
- New features
|
|
|
|
### Changed
|
|
- Changes to existing functionality
|
|
|
|
### Fixed
|
|
- Bug fixes
|
|
```
|
|
|
|
## License
|
|
|
|
By contributing, you agree that your contributions are licensed under the terms in [LICENSE.md](LICENSE.md) (Apache 2.0).
|
|
|
|
---
|