diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 00000000..17461dd5
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,83 @@
+name: Release
+
+on:
+ push:
+ tags:
+ - 'v*'
+
+permissions:
+ contents: write
+
+jobs:
+ release:
+ runs-on: windows-latest
+ name: Build and Release ${{ github.ref_name }}
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0 # Required for GitVersion to compute version from tags
+
+ - name: Install .NET Core
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 10.0.x
+
+ - name: Install InnoSetup
+ run: choco install innosetup --no-progress -y
+
+ - name: Build and Package
+ run: ./build.ps1 --target Clean Pack --configuration Release
+
+ - name: Install nuget-license tool
+ run: dotnet tool install --global nuget-license
+
+ - name: Update usedComponents.json
+ shell: pwsh
+ run: |
+ # Generate updated component list (packages already restored by build)
+ $output = nuget-license -i src/LogExpert.sln -o JsonPretty
+ Set-Content -Path "src/Solution Items/usedComponents.json" -Value $output -Encoding UTF8
+
+ - name: Commit generated files to Development
+ shell: pwsh
+ run: |
+ git config user.name "github-actions[bot]"
+ git config user.email "github-actions[bot]@users.noreply.github.com"
+
+ # Save generated files before switching branches (checkout would overwrite them)
+ $tempComponents = [System.IO.Path]::GetTempFileName()
+ $tempHashes = [System.IO.Path]::GetTempFileName()
+ Copy-Item "src/Solution Items/usedComponents.json" $tempComponents
+ Copy-Item "src/PluginRegistry/PluginHashGenerator.Generated.cs" $tempHashes
+
+ # Switch to Development and apply both updates
+ git fetch origin Development
+ git checkout Development
+ Copy-Item $tempComponents "src/Solution Items/usedComponents.json"
+ Copy-Item $tempHashes "src/PluginRegistry/PluginHashGenerator.Generated.cs"
+
+ git add "src/Solution Items/usedComponents.json"
+ git add "src/PluginRegistry/PluginHashGenerator.Generated.cs"
+ git diff --staged --quiet
+ if ($LASTEXITCODE -ne 0) {
+ git commit -m "chore: update plugin hashes and usedComponents.json for ${{ github.ref_name }} [skip ci]"
+ git push origin Development
+ } else {
+ Write-Host "No changes to commit"
+ }
+
+ - name: Create GitHub Release
+ uses: softprops/action-gh-release@v2
+ with:
+ files: |
+ bin/LogExpert-Setup-*.exe
+ bin/LogExpert.*.zip
+ bin/LogExpert.ColumnizerLib.*.nupkg
+ bin/SftpFileSystem.x64.*.zip
+ bin/SftpFileSystem.x86.*.zip
+ bin/chocolatey/logexpert.*.nupkg
+ generate_release_notes: true
+ draft: false
+ prerelease: ${{ contains(github.ref_name, '-') }}
diff --git a/src/PluginRegistry/PluginHashGenerator.Generated.cs b/src/PluginRegistry/PluginHashGenerator.Generated.cs
index 1684a0ec..21fff2a6 100644
--- a/src/PluginRegistry/PluginHashGenerator.Generated.cs
+++ b/src/PluginRegistry/PluginHashGenerator.Generated.cs
@@ -10,7 +10,7 @@ public static partial class PluginValidator
{
///
/// Gets pre-calculated SHA256 hashes for built-in plugins.
- /// Generated: 2026-06-01 14:21:26 UTC
+ /// Generated: 2026-06-03 11:38:48 UTC
/// Configuration: Release
/// Plugin count: 21
///
@@ -18,27 +18,27 @@ public static Dictionary GetBuiltInPluginHashes()
{
return new Dictionary(StringComparer.OrdinalIgnoreCase)
{
- ["AutoColumnizer.dll"] = "DC7D1EF56AFB8A47739707CC183A1F93575B795FCF677CAF2F9563C7FD813F1F",
+ ["AutoColumnizer.dll"] = "B0965F04F73C61B0BC29208E9E652A9DB208E2E98C277F324C5E9FB51C2E8BD5",
["BouncyCastle.Cryptography.dll"] = "E5EEAF6D263C493619982FD3638E6135077311D08C961E1FE128F9107D29EBC6",
["BouncyCastle.Cryptography.dll (x86)"] = "E5EEAF6D263C493619982FD3638E6135077311D08C961E1FE128F9107D29EBC6",
- ["CsvColumnizer.dll"] = "5814B514ABBC966B259268BA4B9B1E8E54B519160FD107D20894AA1D0BACC5A5",
- ["CsvColumnizer.dll (x86)"] = "5814B514ABBC966B259268BA4B9B1E8E54B519160FD107D20894AA1D0BACC5A5",
- ["DefaultPlugins.dll"] = "70254CD15387236A799FE160F3A2021FEE60FE8F92A96979202ADB4A2C84FE6D",
- ["FlashIconHighlighter.dll"] = "DBB3E6E8AD24B0A0C74ECADE6B6650BA7CF3A3A25BA2B6F60E2F6006605CCE76",
- ["GlassfishColumnizer.dll"] = "9DE9E6F2C606046B0DDE3C368D7888E342050EA85331C0FE46AB05E147B7B830",
- ["JsonColumnizer.dll"] = "30663E7C7DF7DC7FF4C299697EABA8A4B9F2616E0D90DDDD976B91C0EA6982E5",
- ["JsonCompactColumnizer.dll"] = "7326622318DFBFA204E36787D8487113E2E3A76824B7C6264F446B80096D1251",
- ["Log4jXmlColumnizer.dll"] = "AFD096C80934CFF8C8BBDFECC27C4530130A8961F0F92EFDB6503546513D6875",
- ["LogExpert.Resources.dll"] = "44A4C12022FEBE9D0FEE88896F7C652A951FE82C2D07B785704288651EC71490",
+ ["CsvColumnizer.dll"] = "CEC990903F1BD94965E37726A6025D8501C18C9932D96B111FA3FB9CDF71FCF7",
+ ["CsvColumnizer.dll (x86)"] = "CEC990903F1BD94965E37726A6025D8501C18C9932D96B111FA3FB9CDF71FCF7",
+ ["DefaultPlugins.dll"] = "B0766FFD6AA499BE4A854013B280A5DFF490B989EDB7406468D266A1DF892EBE",
+ ["FlashIconHighlighter.dll"] = "456544EA8F97FF53DD2203F99A00A0F7A669F355C1A6E9B0A6F5F44A498B52CA",
+ ["GlassfishColumnizer.dll"] = "64021C14C36807716462B9E9AC2B7AD5514061D74F90D08074D0BBAFF74BE3CD",
+ ["JsonColumnizer.dll"] = "F1D9F58572FC6795FCB855EE70A7F0717C291BFA0623B8D49B5ADB3381DEFC4B",
+ ["JsonCompactColumnizer.dll"] = "4A9CC547B1F05C073D66216F0A05D416D316D4A784D3DC7993AE127F8A83D916",
+ ["Log4jXmlColumnizer.dll"] = "04FD914B7587A5BF29B3D0DF13B0F939D50C9C78A1C3988B25FC5E6CE40302A6",
+ ["LogExpert.Resources.dll"] = "DF7378CA858BC60D5A781331D8CC6B79CF1026075D20202E6E7A384805351889",
["Microsoft.Extensions.DependencyInjection.Abstractions.dll"] = "67FA4325000DB017DC0C35829B416F024F042D24EFB868BCF17A895EE6500A93",
["Microsoft.Extensions.DependencyInjection.Abstractions.dll (x86)"] = "67FA4325000DB017DC0C35829B416F024F042D24EFB868BCF17A895EE6500A93",
["Microsoft.Extensions.Logging.Abstractions.dll"] = "BB853130F5AFAF335BE7858D661F8212EC653835100F5A4E3AA2C66A4D4F685D",
["Microsoft.Extensions.Logging.Abstractions.dll (x86)"] = "BB853130F5AFAF335BE7858D661F8212EC653835100F5A4E3AA2C66A4D4F685D",
- ["RegexColumnizer.dll"] = "F53554822DD21133040836668F04AA59D55A960B1C2988B50904F2A1B08DA084",
- ["SftpFileSystem.dll"] = "BCA378ACA3F21BB396C49A81E1876FFB0E9B2FC33EEDDC361C46CE88305AACF1",
- ["SftpFileSystem.dll (x86)"] = "6B1B3C33820B6AC5C7DEF41B7FE5AB96F8BE3F60DEEE26889A05BE34BBB73619",
- ["SftpFileSystem.Resources.dll"] = "F5E023A76F1F5F19BCC4771C27932CE25A9207A5590AE8D0ED5EF371522B9861",
- ["SftpFileSystem.Resources.dll (x86)"] = "F5E023A76F1F5F19BCC4771C27932CE25A9207A5590AE8D0ED5EF371522B9861",
+ ["RegexColumnizer.dll"] = "36EB2C8B04313A4FE068CB7F69C057EF441471D12E636797092C87A63FF021A0",
+ ["SftpFileSystem.dll"] = "166BAA0702A9C0913CDA6F6B529601911BF145FDE7BB74A37C6CF086CAADB63C",
+ ["SftpFileSystem.dll (x86)"] = "B0ECE111B2C74EFD52181D070A757B1ACC3005B6C714FD231FAC73B26EFE9A90",
+ ["SftpFileSystem.Resources.dll"] = "BD2280AC54C20AC563000128080A2C9B7C8B6E689353E319FB7AE5371225FEFA",
+ ["SftpFileSystem.Resources.dll (x86)"] = "BD2280AC54C20AC563000128080A2C9B7C8B6E689353E319FB7AE5371225FEFA",
};
}