Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion .build/Get-PlatformVersion.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,21 @@
[CmdletBinding()]
param([string]$WorkspaceRoot=(Split-Path $PSScriptRoot -Parent))
Import-Module "$PSScriptRoot/../system/OpenGuidePlatform.PowerShell.PlatformBuild/OpenGuidePlatform.PowerShell.PlatformBuild.psm1"
$version=Get-PlatformBuildVersion -WorkspaceRoot $WorkspaceRoot
if($env:GITHUB_ACTIONS -eq 'true' -and $env:GITHUB_REF -like 'refs/tags/*'){
if($env:GITHUB_REF -cnotmatch '^refs/tags/v([0-9]+\.[0-9]+\.[0-9]+(?:-[A-Za-z0-9.-]+)?)$'){
Comment thread
MrHinsh marked this conversation as resolved.
throw "Unsupported platform release tag: $env:GITHUB_REF"
}
$releaseVersion=$Matches[1]
$parsedVersion=$null
if(-not [System.Management.Automation.SemanticVersion]::TryParse($releaseVersion,[ref]$parsedVersion) -or $parsedVersion.ToString() -cne $releaseVersion){
throw "Unsupported platform release tag: $env:GITHUB_REF"
}
$tagCommit=(& git -C $WorkspaceRoot rev-parse "$($env:GITHUB_REF)^{commit}" 2>$null)
if($LASTEXITCODE -ne 0){throw "Cannot resolve platform release tag: $env:GITHUB_REF"}
$version=Get-PlatformBuildVersion -WorkspaceRoot $WorkspaceRoot -Version $releaseVersion
if($tagCommit.Trim() -cne $version.Sha){throw "Platform release tag $env:GITHUB_REF does not identify the checked-out commit."}
}else{
$version=Get-PlatformBuildVersion -WorkspaceRoot $WorkspaceRoot
}
if($env:GITHUB_OUTPUT){[IO.File]::AppendAllText($env:GITHUB_OUTPUT,"semVer=$($version.SemVer)`nsha=$($version.Sha)`n")}
$version
58 changes: 58 additions & 0 deletions tests/Core/PlatformTagVersion.Tests.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
BeforeAll {
$root=Split-Path (Split-Path $PSScriptRoot -Parent) -Parent
$entry=Join-Path $root '.build/Get-PlatformVersion.ps1'
}

Describe 'Platform version selection for a pushed release tag' {
BeforeEach {
$fixture=Join-Path $TestDrive ([guid]::NewGuid().ToString('N'))
New-Item -ItemType Directory $fixture|Out-Null
git init -q -b main $fixture
git -C $fixture -c user.name=Test -c user.email=test@example.test commit --allow-empty -qm 'Release source'
git -C $fixture tag v1.0.1
git -C $fixture tag v1.0.1-Preview.6
git -C $fixture tag v1.0.2
$commit=(git -C $fixture rev-parse HEAD).Trim()
$priorActions=$env:GITHUB_ACTIONS
$priorRef=$env:GITHUB_REF
$priorOutput=$env:GITHUB_OUTPUT
$env:GITHUB_ACTIONS='true'
$env:GITHUB_REF='refs/tags/v1.0.2'
$env:GITHUB_OUTPUT=Join-Path $fixture 'github-output.txt'
}
AfterEach {
$env:GITHUB_ACTIONS=$priorActions
$env:GITHUB_REF=$priorRef
$env:GITHUB_OUTPUT=$priorOutput
}
It 'uses the pushed exact tag even when other release tags identify the same commit' {
$result=& $entry -WorkspaceRoot $fixture
$result.SemVer|Should -BeExactly '1.0.2'
$result.Sha|Should -BeExactly $commit
Get-Content $env:GITHUB_OUTPUT|Should -Be @('semVer=1.0.2',"sha=$commit")
}
It 'rejects a tag that does not identify the checked-out source' {
git -C $fixture -c user.name=Test -c user.email=test@example.test commit --allow-empty -qm 'Later source'
{ & $entry -WorkspaceRoot $fixture }|Should -Throw '*does not identify the checked-out commit*'
}
It 'rejects an unsupported tag before calculating a version' {
$env:GITHUB_REF='refs/tags/v1.0'
{ & $entry -WorkspaceRoot $fixture }|Should -Throw '*Unsupported platform release tag*'
}
It 'rejects noncanonical semantic version <Tag> without writing workflow outputs' -ForEach @(
@{Tag='v01.0.0'}
@{Tag='v1.0.0-.alpha'}
@{Tag='v1.0.0-01'}
) {
git -C $fixture tag $Tag
$env:GITHUB_REF="refs/tags/$Tag"
{ & $entry -WorkspaceRoot $fixture }|Should -Throw '*Unsupported platform release tag*'
Test-Path $env:GITHUB_OUTPUT|Should -BeFalse
}
It 'uses the exact prerelease tag when stable tags identify the same commit' {
$env:GITHUB_REF='refs/tags/v1.0.1-Preview.6'
$result=& $entry -WorkspaceRoot $fixture
$result.SemVer|Should -BeExactly '1.0.1-Preview.6'
$result.Sha|Should -BeExactly $commit
}
}
Loading