diff --git a/AGENTS.md b/AGENTS.md index d7258a4..7d5a4e4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -91,6 +91,11 @@ Current behavior: Do not manually hardcode release versions in the committed `meta.lsx` for each release if CI can derive them from tags. +Release preparation rule: + +- before creating a release tag, run `scripts/set-version.ps1 -VersionTag ` to update repository `Mods/DnD 5.5e AIO Russian/meta.lsx` +- only after that commit the change and create/push the release tag + ## info.json Expectations `info.json` is generated during build and should remain aligned with BG3/BG3ModManager expectations. diff --git a/scripts/set-version.ps1 b/scripts/set-version.ps1 new file mode 100644 index 0000000..765c29c --- /dev/null +++ b/scripts/set-version.ps1 @@ -0,0 +1,49 @@ +param( + [Parameter(Mandatory = $true)] + [string]$VersionTag, + [string]$MetaPath = "Mods/DnD 5.5e AIO Russian/meta.lsx" +) + +$ErrorActionPreference = "Stop" + +function Convert-VersionTagToVersion64 { + param( + [string]$Tag + ) + + $normalized = $Tag + if ($normalized.StartsWith("v")) { + $normalized = $normalized.Substring(1) + } + + if ($normalized -notmatch '^\d+(\.\d+){0,3}$') { + throw "Version tag '$Tag' is invalid. Expected format: vX.Y.Z or X.Y.Z" + } + + $parts = $normalized.Split(".") + $numbers = @(0, 0, 0, 0) + for ($i = 0; $i -lt $parts.Length; $i++) { + $numbers[$i] = [int]$parts[$i] + } + + return ([int64]$numbers[0] -shl 55) -bor ([int64]$numbers[1] -shl 47) -bor ([int64]$numbers[2] -shl 31) -bor [int64]$numbers[3] +} + +$resolvedMetaPath = [System.IO.Path]::GetFullPath($MetaPath) +if (-not (Test-Path -LiteralPath $resolvedMetaPath)) { + throw "meta.lsx was not found: '$resolvedMetaPath'." +} + +$resolvedVersion64 = Convert-VersionTagToVersion64 -Tag $VersionTag +$metaContent = Get-Content -LiteralPath $resolvedMetaPath -Raw + +$versionPattern = '()' +if ($metaContent -notmatch $versionPattern) { + throw "Version64 attributes were not found in '$resolvedMetaPath'." +} +$updatedMeta = $metaContent -replace $versionPattern, "`${1}$resolvedVersion64`${2}" + +$utf8Bom = New-Object System.Text.UTF8Encoding($true) +[System.IO.File]::WriteAllText($resolvedMetaPath, $updatedMeta, $utf8Bom) + +Write-Host "[set-version.ps1] Updated '$resolvedMetaPath' to Version64=$resolvedVersion64 (from tag '$VersionTag')."