Skip to content

Commit

Permalink
Add helper script for releases
Browse files Browse the repository at this point in the history
  • Loading branch information
walbourn committed Sep 4, 2024
1 parent a670485 commit 02fd0e9
Showing 1 changed file with 95 additions and 0 deletions.
95 changes: 95 additions & 0 deletions build/preparerelease.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<#
.SYNOPSIS
Prepares a PR for release
.DESCRIPTION
This script is used to do the edits required for preparing a release PR.
.PARAMETER TargetBranch
This the branch to use as the base of the release. Defaults to 'main'.
.LINK
https://github.com/microsoft/DirectXMesh/wiki
#>

param(
$TargetBranch="main",
[bool]$UpdateVersion = $true
)

$reporoot = Split-Path -Path $PSScriptRoot -Parent
Write-Host $reporoot
$cmake = $reporoot + "\CMakeLists.txt"
$header = $reporoot + "\DirectXMesh\DirectXMesh.h"
$readme = $reporoot + "\README.md"
$history = $reporoot + "\CHANGELOG.md"
Write-Host $cmake

if ((-Not (Test-Path $cmake)) -Or (-Not (Test-Path $header)) -Or (-Not (Test-Path $readme)) -Or (-Not (Test-Path $history)))
{
Write-Error "ERROR: Unexpected location of script file!" -ErrorAction Stop
}

$branch = git branch --show-current
if ($branch -ne $TargetBranch)
{
Write-Error "ERROR: Must be in the $TargetBranch branch!" -ErrorAction Stop
}

git pull -q
if ($LastExitCode -ne 0)
{
Write-Error "ERROR: Failed to sync branch!" -ErrorAction Stop
}

$newreleasedate = Get-Date -Format "MMMM d, yyyy"
$newreleasetag = (Get-Date -Format "MMMyyyy").ToLower()

$version = Get-Content ($cmake) | Select-String -Pattern "set\(DIRECTXMESH_VERSION" -CaseSensitive
$version -match "([0-9]?\.[0-9]?\.[0-9]?)" > $null
$version = $Matches.0
$rawversion = $version.replace('.','')

if($UpdateVersion) {
[string]$newrawversion = ([int]$rawversion + 1)
}
else {
$newrawversion = $rawversion
}

$newversion = $newrawversion[0] + "." + $newrawversion[1] + "." + $newrawversion[2]

$rawreleasedate = $(Get-Content $readme) | Select-String -Pattern "\*\*[A-Z][a-z]+\S.\d+,?\S.\d\d\d\d\*\*"
$releasedate = $rawreleasedate -replace '\*',''

Write-Host " Old Version: " $version
Write-Host "Old Release Date: " $releasedate
Write-Host "->"
Write-Host " Release Date: " $newreleasedate
Write-Host " Release Tag: " $newreleasetag
Write-Host " Release Version: " $newversion

if($UpdateVersion) {
(Get-Content $cmake).Replace("set(DIRECTXMESH_VERSION $version)","set(DIRECTXMESH_VERSION $newversion)") | Set-Content $cmake
(Get-Content $header).Replace("#define DIRECTX_MESH_VERSION $rawversion","#define DIRECTX_MESH_VERSION $newrawversion") | Set-Content $header
}

(Get-Content $readme).Replace("$rawreleasedate", "**$newreleasedate**") | Set-Content $readme

Get-ChildItem -Path ($reporoot + "\.nuget") -Filter *.nuspec | Foreach-Object {
(Get-Content -Path $_.Fullname).Replace("$releasedate", "$newreleasedate") | Set-Content -Path $_.Fullname -Encoding utf8
}

[System.Collections.ArrayList]$file = Get-Content $history
$inserthere = @()

for ($i=0; $i -lt $file.count; $i++) {
if ($file[$i] -match "## Release History") {
$inserthere += $i + 1
}
}

$file.insert($inserthere[0], "`n#### $newreleasedate`n* change history here")
Set-Content -Path $history -Value $file

0 comments on commit 02fd0e9

Please sign in to comment.