Delivery & Release Process
This page records the repo's normal development, CI, and release flow.
Branch model
developis the active integration branch for day-to-day work.mainis the stable release branch.- Normal contributions should target
develop. - Stable tags such as
v2.5.0must point to commits reachable frommain. - Preview tags such as
v2.6.0-beta1may point todevelop.
Local change flow
- Bootstrap the development environment.
- Make the code or documentation changes.
- Build and validate locally.
- Regenerate help/docs if public cmdlets changed.
- Open or update the pull request targeting
develop.
pwsh -File .\DevOps\Build\bootstrap.ps1
pwsh -File .\DevOps\Build\build.ps1 -TaskNames build
pwsh -File .\DevOps\Quality\test.ps1
pwsh -File .\DevOps\Quality\run-pssa.ps1
If public functions or comment-based help changed, also run:
pwsh -File .\DevOps\Build\build.ps1 -TaskNames generateShortNamesMapping,updateHelp,publishDocs
CI pipeline on develop
The CI workflow runs on pushes and pull requests targeting develop.
It executes in this order:
- Lint with PSScriptAnalyzer
- Run Tests
- Build Module
The test job also bootstraps dependencies, builds the C# helper projects, uploads Pester results, and publishes coverage artifacts to Codecov.
Stable release flow
- Update
CHANGELOG.mdandSource/NinjaOne.psd1together ondevelop. - Make sure the release-prep commit is green in CI.
- Open or update the PR from
developintomain. - Merge only after the required checks pass.
- Create the stable release tag from the merged
maincommit. - Let the release workflows publish the module, release notes, and docs.
Example tag flow:
git checkout main
git pull origin main
git tag v2.5.0
git push origin v2.5.0
What the tag workflows do
tag-validate.yml
Validates that the tag came from the correct branch:
- stable tags must be reachable from
main - prerelease tags must be reachable from
develop
build-and-publish.yml
Builds and packages the module, generates documentation artifacts, publishes to the PowerShell Gallery, and uploads the release zip asset.
create-release.yml
Creates or updates the GitHub release using the matching section from CHANGELOG.md.
publish-docs.yml
Publishes the generated documentation artifact after a successful tagged release build.
Preview release flow
Preview releases follow the same basic pattern, but use prerelease tags such as:
v2.6.0-alpha1v2.6.0-beta1v2.6.0-rc1
These tags should be cut from commits reachable from develop.
Scheduled maintenance workflow
The repo also includes a monthly instance capability check workflow. It compares live instance API paths with repo metadata and cmdlet coverage, then produces a report and can open or update tracking issues when drift is detected.
Issue triage workflow
When new work is identified, the normal pattern is:
- Open or update a GitHub issue describing the bug, drift, or feature gap.
- Confirm whether the work belongs in
developand whether it affects cmdlet metadata, tests, or docs. - Prefer small, targeted changes over large refactors.
- If the issue is endpoint coverage related, match the existing cmdlet scaffold and metadata patterns.
- Add or update lasting regression coverage where it protects real behavior.
For endpoint drift and missing-coverage work, the monthly capability check report can be used as the starting point for new issues.
Pull request workflow
- Branch and PR work should flow through
develop. - Run local validation before asking for review.
- If public cmdlets changed, include help/doc regeneration in the update.
- Address CI failures first, then address review comments with minimal, targeted fixes.
- Merge to
mainonly when the release branch or PR is ready for a stable cut.
A typical PR checklist is:
- build succeeds locally
- tests pass locally
- PSScriptAnalyzer is clean
- manifest exports are updated if new public cmdlets were added
- changelog is updated when the change is user-visible
- review feedback and Copilot comments are addressed before merge
Release checklist
CHANGELOG.mdandSource/NinjaOne.psd1are updated together- CI is green on the release-prep commit
- the release PR into
mainis merged cleanly - the tag is created from the correct branch
- GitHub Release and PowerShell Gallery publication complete successfully
- documentation publishing completes successfully