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
13 changes: 13 additions & 0 deletions docs-mslearn/toolkit/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,19 @@ The following section lists features and enhancements that are currently in deve

<br><a name="latest"></a>

## v14

_Released March 2026_

<!-- prettier-ignore-start -->
> [!div class="nextstepaction"]
> [Download](https://github.com/microsoft/finops-toolkit/releases/tag/v14)
> [!div class="nextstepaction"]
> [Full changelog](https://github.com/microsoft/finops-toolkit/compare/v13...v14)
<!-- prettier-ignore-end -->

<br>

## v13 Update 1

_Released February 11, 2026_
Expand Down
2 changes: 1 addition & 1 deletion docs/_includes/ftktag.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v13
v14.0-dev
2 changes: 1 addition & 1 deletion docs/_includes/ftkver.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
13.0
14.0-dev
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ftk",
"version": "13.0.0",
"version": "14.0.0-dev",
"description": "Starter kits, scripts, and advanced solutions to accelerate your FinOps journey in the Microsoft Cloud.",
"main": "index.js",
"directories": {
Expand Down
2 changes: 1 addition & 1 deletion src/optimization-engine/ftkver.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
13.0
14.0-dev
2 changes: 1 addition & 1 deletion src/powershell/Private/Get-VersionNumber.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
function Get-VersionNumber
{
param()
return '13.0'
return '14.0-dev'
}
13 changes: 9 additions & 4 deletions src/powershell/Tests/Integration/Toolkit.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@
Describe 'Get-FinOpsToolkitVersion' {
It 'Should return all known releases' {
# Arrange
$plannedRelease = '13'
$expected = @('12', '0.11', '0.10', '0.9', '0.8', '0.7', '0.6', '0.5', '0.4', '0.3', '0.2', '0.1.1', '0.1', '0.0.1')
$plannedRelease = '14'
$expected = @('13', '12', '0.11', '0.10', '0.9', '0.8', '0.7', '0.6', '0.5', '0.4', '0.3', '0.2', '0.1.1', '0.1', '0.0.1')

# Helper function to normalize version strings for [version] parsing
# Single-part versions like "12" need to become "12.0" for [version] to parse them
function NormalizeVersion($ver) {
function NormalizeVersion($ver)
{
if ($ver -notmatch '\.') { return "$ver.0" }
return $ver
}
Expand Down Expand Up @@ -54,7 +55,7 @@ Describe 'Get-FinOpsToolkitVersion' {
CheckFile "optimization-workbook-v$verStr.zip" $null '0.5'

# Power BI
CheckFile "FinOpsToolkitData.pbix" '12.0' $null
CheckFile "FinOpsToolkitData.pbix" '12.0' '12.0' # Accidentally added in v12
CheckFile "PowerBI-demo.zip" '0.7' $null
CheckFile "PowerBI-kql.zip" '0.7' $null
CheckFile "PowerBI-storage.zip" '0.7' $null
Expand All @@ -80,6 +81,10 @@ Describe 'Get-FinOpsToolkitVersion' {
CheckFile "ResourceTypes.json" '0.2' $null
CheckFile "Services.csv" '0.1' $null

# Meeting invites
CheckFile "contributor-sync.ics" '13.0' $null
CheckFile "office-hours.ics" '13.0' $null

# Deprecated / renamed
CheckFile "CommitmentDiscounts.pbit" '0.2' '0.3'
CheckFile "CommitmentDiscounts.pbix" $null '0.3'
Expand Down
87 changes: 87 additions & 0 deletions src/scripts/Update-Version.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,93 @@ if ($update -or $Version)
Write-Output " return '$ver'"
Write-Output "}"
} | Out-File "$PSScriptRoot/../PowerShell/Private/Get-VersionNumber.ps1" -Encoding ascii -Append:$false

# Release tag strips prerelease labels and trailing .0 (e.g., "14.0-dev" -> "v14")
$releaseTag = 'v' + (($ver -replace '-.*$', '') -replace '\.0$', '')

# Update changelog with new version section
Write-Verbose "Updating changelog..."
$changelogPath = Join-Path $repoRoot 'docs-mslearn/toolkit/changelog.md'
if (Test-Path $changelogPath)
{
$changelogLines = Get-Content $changelogPath
$anchorIndex = $changelogLines.IndexOf('<br><a name="latest"></a>')
if ($anchorIndex -ge 0)
{
# Find the first ## v heading after the anchor
$prevTag = $null
for ($i = $anchorIndex + 1; $i -lt $changelogLines.Count; $i++)
{
if ($changelogLines[$i] -match '^## v(.+)$')
{
$prevTag = $Matches[1] -replace '\s.*$', ''
break
}
}

$releaseTagName = $releaseTag.TrimStart('v')

# Skip if this version section already exists
if ($prevTag -eq $releaseTagName)
{
Write-Verbose "- Changelog already has v$releaseTagName section"
}
else
{
$releaseDate = (Get-Date).AddMonths(1).ToString('MMMM yyyy')
$newSection = @(
''
"## v$releaseTagName"
''
"_Released ${releaseDate}_"
''
'<!-- prettier-ignore-start -->'
'> [!div class="nextstepaction"]'
"> [Download](https://github.com/microsoft/finops-toolkit/releases/tag/$releaseTag)"
'> [!div class="nextstepaction"]'
"> [Full changelog](https://github.com/microsoft/finops-toolkit/compare/v$prevTag...$releaseTag)"
'<!-- prettier-ignore-end -->'
''
'<br>'
)

$changelogLines = $changelogLines[0..$anchorIndex] + $newSection + $changelogLines[($anchorIndex + 1)..($changelogLines.Count - 1)]
$changelogLines | Out-File $changelogPath -Encoding utf8
Write-Verbose "- Added v$releaseTagName section to changelog"
}
}
}

# Update integration test version variables
Write-Verbose "Updating integration test versions..."
$testPath = Join-Path $repoRoot 'src/powershell/Tests/Integration/Toolkit.Tests.ps1'
if (Test-Path $testPath)
{
$testContent = Get-Content $testPath -Raw
$releaseTagName = $releaseTag.TrimStart('v')

# Extract current planned release and skip if already up to date
if ($testContent -match '\$plannedRelease = ''([^'']+)''')
{
$oldPlanned = $Matches[1]

if ($oldPlanned -eq $releaseTagName)
{
Write-Verbose "- Integration test already has planned release '$releaseTagName'"
}
else
{
# Update $plannedRelease to the new version
$testContent = $testContent -replace '\$plannedRelease = ''[^'']+''', ('$plannedRelease = ''{0}''' -f $releaseTagName)

# Prepend old planned release to $expected array
$testContent = $testContent -replace '\$expected = @\(', ('$expected = @(''{0}'', ' -f $oldPlanned)

$testContent | Out-File $testPath -NoNewline -Encoding utf8
Write-Verbose "- Updated planned release from '$oldPlanned' to '$releaseTagName'"
}
}
}
}

return $ver
2 changes: 1 addition & 1 deletion src/templates/finops-alerts/modules/ftkver.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
13.0
14.0-dev
2 changes: 1 addition & 1 deletion src/templates/finops-hub/modules/fx/ftktag.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v13
v14.0-dev
2 changes: 1 addition & 1 deletion src/templates/finops-hub/modules/fx/ftkver.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
13.0
14.0-dev
2 changes: 1 addition & 1 deletion src/templates/finops-workbooks/ftkver.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
13.0
14.0-dev
2 changes: 1 addition & 1 deletion src/workbooks/.scaffold/ftkver.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
13.0
14.0-dev
Loading