PoshCode / ModuleBuilder

A PowerShell Module to help scripters write, version, sign, package, and publish.
MIT License
445 stars 54 forks source link

Feature: Support SemVer 2.0 Informational Version #110

Open Jaykul opened 2 years ago

Jaykul commented 2 years ago

Currently Build-Module supports passing an informational version to -SemVer and it splits it into:

ModuleVersion=Major.Minor.Patch
PrivateData.PSData.Prerelease=PreReleaseTagWithoutDash

and also puts the whole thing into the release notes.

We love that, but are trying to adopt GitVersion and the SemVer 2.0 version numbers for everything else.

Unfortunately, although PowerShell is ok with that, PowerShellGet is not: you can't publish the module:

The Prerelease string 'PullRequest17887.2' contains invalid characters. 
Please ensure that only characters 'a-zA-Z0-9' and possibly hyphen ('-') at the beginning are in the Prerelease string.

Note that hyphens aren't really allowed -- they're just willing to ignore ONE at the beginning of the string.

Could you take any valid SemVer 2 version number, like say 1.2.3-beta.4 or 1.2.3-pre-release.2+build24 and:

  1. strip the non-alphanumeric digits that PowerShellGet won't accept
  2. zero-pad the number at the end (maybe default to 4 digits?)
Jaykul commented 2 years ago

Note: there's also a length limit to pre-release strings in nuget 2 -- or is that in PSGet/PowerShell Gallery? Actually, it doesn't matter. The point is that we might need this to be truncated to work, and I'm not sure what I think should happen in that case.