From 06dc723d014064ef4c8ad5a762834d8b4c1ba341 Mon Sep 17 00:00:00 2001 From: Erik Darling <2136037+erikdarlingdata@users.noreply.github.com> Date: Fri, 22 May 2026 08:56:46 -0400 Subject: [PATCH 1/4] Publish SSMS extension to the SSMS Gallery on release (#343) (#348) --- .github/workflows/release.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 50abc36..cc250db 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -114,6 +114,19 @@ jobs: VERSION: ${{ steps.version.outputs.VERSION }} run: gh release upload "v$env:VERSION" releases/PlanViewer.Ssms.vsix releases/InstallSsmsExtension.exe --clobber + # Publish to the SSMS Gallery (https://ssmsgallery.azurewebsites.net, issue 343). + # The gallery extracts version/description from the vsixmanifest, so the + # upload filename is irrelevant. continue-on-error: a gallery outage must + # never fail the release. bash so `curl` is curl.exe, not the pwsh alias. + - name: Publish SSMS extension to SSMS Gallery + if: steps.ssms.outputs.BUILT == 'true' + continue-on-error: true + shell: bash + run: | + echo "Uploading PlanViewer.Ssms.vsix to the SSMS Gallery..." + curl -sS -f "https://ssmsgallery.azurewebsites.net/api/upload" \ + -F "file=@releases/PlanViewer.Ssms.vsix" + # ── SignPath code signing (Windows only, skipped if secret not configured) ── - name: Check if signing is configured id: signing From ae901aec8e53112535aba57bc5745c6634d085a6 Mon Sep 17 00:00:00 2001 From: Romain Ferraton <16419423+rferraton@users.noreply.github.com> Date: Thu, 28 May 2026 01:46:08 +0200 Subject: [PATCH 2/4] Add unified Settings window (#351) Adds a non-modal Settings window (ALT+S) consolidating Query Store, Multi QS Overview, Query History, and Script Options into a single sidebar UI. Settings persist to appsettings.json; one-time migration from the legacy perfstudio_format_settings.json. --- .../Controls/QuerySessionControl.Format.cs | 10 +- .../Controls/QuerySessionControl.axaml | 4 - .../Controls/QueryStoreGridControl.axaml.cs | 32 +- .../QueryStoreHistoryControl.axaml.cs | 9 +- .../QueryStoreOverviewControl.axaml.cs | 31 +- .../Controls/TimeRangeSlicerControl.axaml.cs | 10 +- src/PlanViewer.App/Dialogs/FormatOptionRow.cs | 56 ++ .../Dialogs/FormatOptionsWindow.axaml | 121 --- .../Dialogs/FormatOptionsWindow.axaml.cs | 342 -------- .../Dialogs/QueryStoreHistoryWindow.axaml.cs | 11 +- .../Dialogs/SettingsWindow.axaml | 72 ++ .../Dialogs/SettingsWindow.axaml.cs | 732 ++++++++++++++++++ src/PlanViewer.App/MainWindow.axaml | 1 + src/PlanViewer.App/MainWindow.axaml.cs | 23 + .../Services/AppSettingsService.cs | 184 ++++- .../Services/SqlFormatSettingsService.cs | 55 -- 16 files changed, 1122 insertions(+), 571 deletions(-) create mode 100644 src/PlanViewer.App/Dialogs/FormatOptionRow.cs delete mode 100644 src/PlanViewer.App/Dialogs/FormatOptionsWindow.axaml delete mode 100644 src/PlanViewer.App/Dialogs/FormatOptionsWindow.axaml.cs create mode 100644 src/PlanViewer.App/Dialogs/SettingsWindow.axaml create mode 100644 src/PlanViewer.App/Dialogs/SettingsWindow.axaml.cs diff --git a/src/PlanViewer.App/Controls/QuerySessionControl.Format.cs b/src/PlanViewer.App/Controls/QuerySessionControl.Format.cs index 9ead789..eea3f84 100644 --- a/src/PlanViewer.App/Controls/QuerySessionControl.Format.cs +++ b/src/PlanViewer.App/Controls/QuerySessionControl.Format.cs @@ -86,9 +86,7 @@ private async void Format_Click(object? sender, RoutedEventArgs e) try { - var settings = SqlFormatSettingsService.Load(out var loadError); - if (loadError != null) - SetStatus("Warning: using default format settings (load failed)"); + var settings = AppSettingsService.Load().FormatOptions ?? new SqlFormatSettings(); var (formatted, errors) = await Task.Run(() => SqlFormattingService.Format(sql, settings)); @@ -150,10 +148,4 @@ private async void Format_Click(object? sender, RoutedEventArgs e) FormatButton.IsEnabled = true; } } - - private void FormatOptions_Click(object? sender, RoutedEventArgs e) - { - var dialog = new Dialogs.FormatOptionsWindow(); - dialog.ShowDialog(GetParentWindow()); - } } diff --git a/src/PlanViewer.App/Controls/QuerySessionControl.axaml b/src/PlanViewer.App/Controls/QuerySessionControl.axaml index a9aefad..f651f35 100644 --- a/src/PlanViewer.App/Controls/QuerySessionControl.axaml +++ b/src/PlanViewer.App/Controls/QuerySessionControl.axaml @@ -92,10 +92,6 @@ Height="28" Padding="10,0" FontSize="12" Theme="{StaticResource AppButton}" ToolTip.Tip="Format the SQL query"/> -