Private/Write-ProjectVersion.ps1
|
<# .SYNOPSIS Writes a version to a project's native file. .DESCRIPTION Updates the version in the appropriate ecosystem file. .PARAMETER Version The new version string (without 'v' prefix). .PARAMETER ProjectType Project type object from Get-ProjectType. #> function Write-ProjectVersion { [CmdletBinding()] param( [Parameter(Mandatory)] [string]$Version, [Parameter(Mandatory)] [PSCustomObject]$ProjectType ) # Strip v prefix if present $cleanVersion = $Version -replace '^v', '' switch ($ProjectType.Type) { 'PowerShell' { $content = Get-Content -Path $ProjectType.File -Raw $content = $content -replace "ModuleVersion\s*=\s*'[^']+'", "ModuleVersion = '$cleanVersion'" Set-Content -Path $ProjectType.File -Value $content -NoNewline } 'DotNet' { [xml]$csproj = Get-Content -Path $ProjectType.File -Raw $propertyGroup = $csproj.Project.PropertyGroup | Where-Object { $_.Version -or $_.PackageVersion } | Select-Object -First 1 if (-not $propertyGroup) { $propertyGroup = $csproj.Project.PropertyGroup | Select-Object -First 1 } if ($propertyGroup.Version) { $propertyGroup.Version = $cleanVersion } else { $versionElement = $csproj.CreateElement('Version') $versionElement.InnerText = $cleanVersion $propertyGroup.AppendChild($versionElement) | Out-Null } $csproj.Save($ProjectType.File) } 'Node' { $pkg = Get-Content -Path $ProjectType.File -Raw | ConvertFrom-Json $pkg.version = $cleanVersion $pkg | ConvertTo-Json -Depth 100 | Set-Content -Path $ProjectType.File -NoNewline } 'Python' { $content = Get-Content -Path $ProjectType.File -Raw $content = $content -replace 'version\s*=\s*"[^"]+"', "version = `"$cleanVersion`"" Set-Content -Path $ProjectType.File -Value $content -NoNewline } default { throw "Cannot write version: unsupported project type '$($ProjectType.Type)'" } } } |