-
Notifications
You must be signed in to change notification settings - Fork 0
Release Process
This page documents how to ship a new version of SPSUserSync. The process is centered around a single source of truth — the ModuleVersion field of SPSUserSync.Common.psd1 — and a v* git tag that triggers the GitHub release workflow.
SPSUserSync follows Semantic Versioning 2.0.
| Bump | When |
|---|---|
| MAJOR (X.0.0) | Breaking change in .psd1 structure, public module function signature, or JSON snapshot format. |
| MINOR (X.Y.0) | New backward-compatible feature (new domain support, new public function, new optional setting). |
| PATCH (X.Y.Z) | Bug fix, documentation-only change. |
Edit one value in src/Modules/SPSUserSync.Common/SPSUserSync.Common.psd1:
ModuleVersion = '1.1.0' # was '1.0.0'This single change propagates automatically to:
- The Event Log header (
SPSUserSync Version: 1.1.0) - The script banner output (
Configuration SPSyncUserInfoList 1.1.0) - The
Get-Module SPSUserSync.Commonversion surfaced to users
Promote the [Unreleased] block to a dated header for the version being released, and insert a fresh empty [Unreleased] heading on top so future PRs have somewhere to write to:
## [Unreleased]
## [1.1.0] - 2026-MM-DD
### Added
...RELEASE-NOTES.md is used verbatim as the body of the GitHub Release. It must contain only the section of the version being released (Added / Changed / Fixed sub-sections, no [Unreleased] header). Replace its content with the new version's notes.
Import-Module .\src\Modules\SPSUserSync.Common\SPSUserSync.Common.psd1 -Force
(Get-Module SPSUserSync.Common).Version # should match the bumped versiongit checkout -b release/1.1.0
git add -A
git commit -m "release: v1.1.0"
git push -u origin release/1.1.0Open a Pull Request, review, merge to main.
After the PR is merged:
git checkout main
git pull
git tag v1.1.0
git push origin v1.1.0The .github/workflows/release.yml workflow runs automatically. It:
- Packages
src/intoSPSUserSync-v1.1.0.zip - Publishes a GitHub Release using
RELEASE-NOTES.mdas the body - Attaches the ZIP and
LICENSEto the release
- Releases: https://github.com/luigilink/SPSUserSync/releases — the new release is listed with the expected body and ZIP attached.
-
Actions: https://github.com/luigilink/SPSUserSync/actions —
release.ymlran green. -
Wiki: https://github.com/luigilink/SPSUserSync/wiki —
wiki.ymlsynced anywiki/changes pushed in the same release.
If you tagged too early (typo in RELEASE-NOTES.md, forgot to promote [Unreleased], etc.), recover with:
# 1. Delete the tag locally and remotely
git tag -d v1.1.0
git push origin --delete v1.1.0# 2. On GitHub, manually delete the auto-created Release at
# https://github.com/luigilink/SPSUserSync/releases
# (button "Delete release" in the top-right of the release page)
# 3. Fix what needs fixing, commit, push
git add -A
git commit -m "docs: fix release notes for v1.1.0"
git push
# 4. Re-tag from the new HEAD
git tag v1.1.0
git push origin v1.1.0The workflow re-runs and creates a fresh Release with the corrected content.
⚠️ Don't move a published tag that has been live for more than a few minutes. If users may have already cloned it, prefer publishing avX.Y.(Z+1)patch release instead of rewritingvX.Y.Z.
Navigation
Project