The SemVerPS PowerShell module offers the ability to work with Semantic Version utilizing the .net implementation from Max Hauser's SemVer repository. With this module, it is possible to:
- Work with Semantic Version as typed object leveraging or comparison operators
- Enhance object with a
NoteProperty
that contains a Semantic Version. - Filter and/or test above enhanced list of objects.
- This could be very useful if for example a list of items is retrieved where part of the name is a semantic version and we want to filter the list.
Basic usage with ConvertTo-SemVer
Use the ConvertTo-SemVer
to convert strings to semantic version objects. For example:
ConvertTo-SemVer -Version "1.0.0"
Major : 1
Minor : 0
Patch : 0
Prerelease :
Build :
ConvertTo-SemVer -Version "1.0.1-alpha+1" -Strict
Major : 1
Minor : 0
Patch : 1
Prerelease : alpha
Build : 1
Use the Test-SemVer
to test if a string or a semantic version is stable or prerelease. For example:
Test-SemVer -InputObject "1.0.0"
#True
Test-SemVer -InputObject "1.0.0" -Stable
#True
Test-SemVer -InputObject "1.0.0-alpha+1" -PreRelease alpha
#True
Add semantic versioning member to existing objects
Often there is a need to attach a semantic version notation to an object or a list of objects. Use the Add-SemVerMember
to add a member where the semantic version value is derived either from an expression or a script block. By default the semantic version is add to a property named SemVer
but this can be changed by defining the Property
parameter. For example:
[pscustomobject]@{Name="example-1.0.0"}|Add-SemVerMember -Expression 'Name.Replace("example-","")' -PassThru
[pscustomobject]@{Name="example-1.0.0"}|Add-SemVerMember -ScriptBlock {$_.Name.Replace("example-","")} -PassThru -Name "AnotherProperty"
Name SemVer
---- ------
example-1.0.0 1.0.0
Name AnotherProperty
---- ---------------
example-1.0.0 1.0.0
As an extension of the Test-SemVer
, use the Limit-SemVer
to filter objects based on semantic version conditions. Each object can be in the form of a string, or a semantic version instance or an object that has been enhanced with Add-SemVerMember
. For example:
$versions=@(
"1.0.0"
"1.0.0-alpha+1"
)
$versions|Limit-SemVer -Stable
$versions|Limit-SemVer -Prerelease alpha
1.0.0
1.0.0-alpha+1
$objectsWithVersions=@(
"example-1.0.0"
"example-1.0.0-alpha+1"
)|Foreach-Object {
[pscustomobject]@{Name=$_}| Add-SemVerMember -Expression 'Name.Replace("example-","")' -PassThru
}
$objectsWithVersions
$objectsWithVersions|Limit-SemVer -Stable
$objectsWithVersions|Limit-SemVer -Prerelease alpha
Name SemVer
---- ------
example-1.0.0 1.0.0
Name SemVer
---- ------
example-1.0.0-alpha+1 1.0.0-alpha+1
Copied from my personal blog post
Top comments (0)