@@ -35,17 +35,46 @@ jobs:
3535 - name : Resolve release version
3636 shell : pwsh
3737 run : |
38- $version = "${{ github.ref_name }}"
3938 $releaseTag = "${{ github.ref_name }}"
40- if ($version -eq "main" -or $version -eq "master") {
41- $version = "1.0.4"
42- $releaseTag = "v$version"
39+
40+ function Get-ProjectProperty([string]$project, [string]$propertyName) {
41+ $xml = [xml](Get-Content $project)
42+ foreach ($group in $xml.Project.PropertyGroup) {
43+ $value = $group.$propertyName
44+ if (-not [string]::IsNullOrWhiteSpace($value)) {
45+ return $value.Trim()
46+ }
47+ }
48+
49+ return $null
50+ }
51+
52+ function Resolve-ProjectVersion([string]$project) {
53+ $version = Get-ProjectProperty $project "PackageVersion"
54+ if ([string]::IsNullOrWhiteSpace($version)) {
55+ $version = Get-ProjectProperty $project "Version"
56+ }
57+
58+ if ($version -match '^\$\((?<PropertyName>[^)]+)\)$') {
59+ $version = Get-ProjectProperty $project $Matches.PropertyName
60+ }
61+
62+ if ([string]::IsNullOrWhiteSpace($version)) {
63+ $version = Get-ProjectProperty $project "VsixPackageVersion"
64+ }
65+
66+ if ([string]::IsNullOrWhiteSpace($version)) {
67+ throw "Cannot resolve version from $project"
68+ }
69+
70+ return $version
4371 }
44- if ($version.StartsWith("v")) {
45- $version = $version.Substring(1)
72+
73+ if ("${{ github.ref_type }}" -ne "tag") {
74+ $releaseVersion = Resolve-ProjectVersion "src/Lizerium.Localization.Toolkit/Lizerium.Localization.Toolkit.csproj"
75+ $releaseTag = "v$releaseVersion"
4676 }
4777
48- "PACKAGE_VERSION=$version" >> $env:GITHUB_ENV
4978 "RELEASE_TAG=$releaseTag" >> $env:GITHUB_ENV
5079
5180 - name : Restore solution
6796 run : |
6897 New-Item -ItemType Directory -Force artifacts/nuget | Out-Null
6998
99+ function Get-ProjectProperty([string]$project, [string]$propertyName) {
100+ $xml = [xml](Get-Content $project)
101+ foreach ($group in $xml.Project.PropertyGroup) {
102+ $value = $group.$propertyName
103+ if (-not [string]::IsNullOrWhiteSpace($value)) {
104+ return $value.Trim()
105+ }
106+ }
107+
108+ return $null
109+ }
110+
111+ function Resolve-ProjectVersion([string]$project) {
112+ $version = Get-ProjectProperty $project "PackageVersion"
113+ if ([string]::IsNullOrWhiteSpace($version)) {
114+ $version = Get-ProjectProperty $project "Version"
115+ }
116+
117+ if ($version -match '^\$\((?<PropertyName>[^)]+)\)$') {
118+ $version = Get-ProjectProperty $project $Matches.PropertyName
119+ }
120+
121+ if ([string]::IsNullOrWhiteSpace($version)) {
122+ throw "Cannot resolve version from $project"
123+ }
124+
125+ return $version
126+ }
127+
70128 $projects = @(
71129 "src/Lizerium.Localization.Core/Lizerium.Localization.Core.csproj",
72130 "src/Lizerium.AI.LocalizationAssistant.Core/Lizerium.AI.LocalizationAssistant.Core.csproj",
@@ -78,10 +136,13 @@ jobs:
78136 )
79137
80138 foreach ($project in $projects) {
139+ $version = Resolve-ProjectVersion $project
140+ Write-Host "Packing $project version $version"
141+
81142 dotnet pack $project `
82143 -c $env:CONFIGURATION `
83- -p:Version=$env:PACKAGE_VERSION `
84- -p:PackageVersion=$env:PACKAGE_VERSION `
144+ -p:Version=$version `
145+ -p:PackageVersion=$version `
85146 -o artifacts/nuget `
86147 --no-restore `
87148 --no-build
@@ -92,29 +153,61 @@ jobs:
92153 run : |
93154 New-Item -ItemType Directory -Force artifacts/vsix | Out-Null
94155
156+ function Get-ProjectProperty([string]$project, [string]$propertyName) {
157+ $xml = [xml](Get-Content $project)
158+ foreach ($group in $xml.Project.PropertyGroup) {
159+ $value = $group.$propertyName
160+ if (-not [string]::IsNullOrWhiteSpace($value)) {
161+ return $value.Trim()
162+ }
163+ }
164+
165+ return $null
166+ }
167+
168+ function Resolve-VsixVersion([string]$project) {
169+ $version = Get-ProjectProperty $project "VsixPackageVersion"
170+ if ([string]::IsNullOrWhiteSpace($version)) {
171+ $version = Get-ProjectProperty $project "Version"
172+ }
173+
174+ if ($version -match '^\$\((?<PropertyName>[^)]+)\)$') {
175+ $version = Get-ProjectProperty $project $Matches.PropertyName
176+ }
177+
178+ if ([string]::IsNullOrWhiteSpace($version)) {
179+ throw "Cannot resolve VSIX version from $project"
180+ }
181+
182+ return $version
183+ }
184+
95185 $vsixProjects = @(
96186 @{
97187 Project = "src/Lizerium.Localization.Xaml.Vsix/Lizerium.Localization.Xaml.Vsix.csproj"
98- Output = "src/Lizerium.Localization.Xaml.Vsix/bin/$env:CONFIGURATION/net472/Lizerium.Localization.Xaml.Vsix.$env:PACKAGE_VERSION.vsix"
99- ReleaseName = "Lizerium.Localization.Xaml.Vsix-$env:RELEASE_TAG.vsix"
188+ PackageId = "Lizerium.Localization.Xaml.Vsix"
100189 },
101190 @{
102191 Project = "src/Lizerium.Localization.EditorHints/Lizerium.Localization.EditorHints.csproj"
103- Output = "src/Lizerium.Localization.EditorHints/bin/$env:CONFIGURATION/net472/Lizerium.Localization.EditorHints.$env:PACKAGE_VERSION.vsix"
104- ReleaseName = "Lizerium.Localization.EditorHints-$env:RELEASE_TAG.vsix"
192+ PackageId = "Lizerium.Localization.EditorHints"
105193 }
106194 )
107195
108196 foreach ($item in $vsixProjects) {
197+ $version = Resolve-VsixVersion $item.Project
198+ $output = "src/$($item.PackageId)/bin/$env:CONFIGURATION/net472/$($item.PackageId).$version.vsix"
199+ $releaseName = "$($item.PackageId)-v$version.vsix"
200+ Write-Host "Building $($item.Project) version $version"
201+
109202 msbuild $item.Project `
110203 /t:Build `
111204 /p:Configuration=$env:CONFIGURATION `
112205 /p:RestorePackages=false `
113- /p:VsixPackageVersion=$env:PACKAGE_VERSION `
114- /p:Version=$env:PACKAGE_VERSION `
206+ /p:VsixPackageVersion=$version `
207+ /p:Version=$version `
115208 /v:minimal
116209
117- Copy-Item $item.Output "artifacts/vsix/$($item.ReleaseName) " -Force
210+ Copy-Item $output "artifacts/vsix/$releaseName " -Force
118211 }
119212
120213 - name : Restore publish projects
@@ -177,32 +270,30 @@ jobs:
177270
178271 Copy-Item artifacts/vsix/*.vsix artifacts/release/ -Force
179272 Copy-Item CHANGELOG.md artifacts/release/CHANGELOG.md -Force
273+ Copy-Item CHANGELOG.ru.md artifacts/release/CHANGELOG.ru.md -Force
180274
181275 Get-ChildItem artifacts/release -File |
182276 Get-FileHash -Algorithm SHA256 |
183277 ForEach-Object { "$($_.Hash) $(Split-Path $_.Path -Leaf)" } |
184278 Set-Content "artifacts/release/SHA256SUMS.txt" -Encoding UTF8
185279
280+ $vsixList = Get-ChildItem artifacts/vsix/*.vsix |
281+ Sort-Object Name |
282+ ForEach-Object { "- VSIX для Visual Studio 2022: ``$($_.Name)``" }
283+ $vsixNotes = $vsixList -join "`n"
284+
186285 $releaseNotes = @"
187286 ## Lizerium.Localization.Toolkit $tag
188287
189- See the full bilingual changelog in `CHANGELOG.md`.
288+ Полное описание изменений:
190289
191- ### Included
192-
193- - NuGet packages: Toolkit, Core, AI Core, Generator, Analyzer, AI Analyzer, GUI
194- - Visual Studio 2022 VSIX: `Lizerium.Localization.Xaml.Vsix-$tag.vsix`
195- - Visual Studio 2022 VSIX: `Lizerium.Localization.EditorHints-$tag.vsix`
196- - Windows x64 standalone GUI editor
197- - Windows x64 published WPF sample application
198- - Sample project source archive
199- - SHA-256 checksums
290+ - [Русский CHANGELOG](https://github.com/${{ github.repository }}/blob/${{ github.sha }}/CHANGELOG.ru.md)
291+ - [English CHANGELOG](https://github.com/${{ github.repository }}/blob/${{ github.sha }}/CHANGELOG.md)
200292
201293 ### Что входит
202294
203- - NuGet-пакеты: Toolkit, Core, AI Core, Generator, Analyzer, AI Analyzer, GUI
204- - VSIX для Visual Studio 2022: `Lizerium.Localization.Xaml.Vsix-$tag.vsix`
205- - VSIX для Visual Studio 2022: `Lizerium.Localization.EditorHints-$tag.vsix`
295+ - NuGet-пакеты: Toolkit, Core, AI Core, Generator, Analyzer, AI Analyzer, GUI. Версия каждого пакета берется из его `.csproj`.
296+ $vsixNotes
206297 - Самостоятельная Windows x64 сборка GUI-редактора
207298 - Опубликованная Windows x64 сборка WPF sample-приложения
208299 - Архив исходников sample-проекта
@@ -227,4 +318,5 @@ jobs:
227318 artifacts/release/*.zip
228319 artifacts/release/*.vsix
229320 artifacts/release/CHANGELOG.md
321+ artifacts/release/CHANGELOG.ru.md
230322 artifacts/release/SHA256SUMS.txt
0 commit comments