PSTui's pipeline follows the tui-cs/clet model, adapted for a PowerShell binary module published to the PowerShell Gallery (rather than a NativeAOT CLI shipped to NuGet/Homebrew/WinGet).
| Branch | Role |
|---|---|
develop |
Default. Day-to-day work and PRs land here. |
main |
Release-only. Merging develop → main ships a release. |
Builds and tests on every push / PR to main (and merge queue) across
Windows, macOS, and Linux via Invoke-Build Build, Test, Package.
Triggered by:
- push to
main(onsrc/**,test/**, or the build files), workflow_dispatch(optionalversion_override), andrepository_dispatch(terminal-gui-published) so Terminal.Gui can trigger a rebuild/republish when it ships a new version.
It resolves the version, builds + tests, stamps the manifest, publishes to the
PowerShell Gallery, tags the commit, and creates a GitHub Release. A
notify-failure job opens/updates a release-failure issue if anything fails.
The source of truth is PSTui.Common.props:
<VersionPrefix>— base version, e.g.1.0.0.<VersionSuffix>— prerelease phase; empty for stable, otherwise a label likerc,beta, oralpha.
To move between phases, change these and merge to main:
VersionPrefix |
VersionSuffix |
Produces | PSGallery |
|---|---|---|---|
1.0.0 |
rc |
1.0.0-rc1, -rc2 |
prerelease (Install-Module -AllowPrerelease) |
1.0.0 |
(empty) | 1.0.0, 1.0.1… |
stable (default Install-Module PSTui) |
PowerShell prerelease labels are alphanumeric only (no dots) — so the pipeline emits
rc1,rc2, … (not clet'src.1). The build number auto-increments off the latest matchingv…git tag.
PSGALLERY_API_KEYrepo secret — the PowerShell Gallery API key (under the tui-cs org). Until it is set,release.ymlruns as a dry run: it builds, tests, and resolves the version but skips publishing, tagging, and the GitHub Release. This lets the pipeline be validated safely before going live.
This pipeline is new and not yet exercised end-to-end (see issue #5). Before
the first real release: add the PSGALLERY_API_KEY secret, reserve the PSTui
package id on the Gallery (issue #6), and confirm a workflow_dispatch dry run
is green.