Add IntelliJ IDEA CE & Ultimate Windows apps - #46257
Conversation
Add Windows winget inputs and PowerShell scripts for IntelliJ IDEA Community Edition and Ultimate. New files include input manifests (ee/maintained-apps/inputs/winget/*.json), installer scripts that run the NSIS installers silently (using /S), and uninstall scripts that locate the uninstall string in the registry, stop running IDEA processes, ensure the /S silent flag, and execute the uninstaller. Update outputs by adding app entries in ee/maintained-apps/outputs/apps.json and new per-app outputs with version metadata, installer URLs, sha256 hashes and embedded script refs: CE version 2025.2.6.2 and Ultimate version 2025.2.5.
Enhance PowerShell uninstall scripts for IntelliJ IDEA (CE & Ultimate) and PhpStorm by adding a regex branch to correctly capture unquoted .exe paths (handles JetBrains installers with spaces in the path), plus explanatory comments and a fallback case. Update the corresponding windows.json files to point to new uninstall_script_ref IDs and adjust the refs mapping to include the revised uninstall script bodies.
Script Diff Resultsee/maintained-apps/outputs/intellij-idea-ce/windows.json=== Install Script (no changes) ===
=== Uninstall // e631fc11 -> 7fef56b2 ===
--- /tmp/old.3yPKYK 2026-05-27 14:50:41.106695315 +0000
+++ /tmp/new.HqodTO 2026-05-27 14:50:41.106695315 +0000
@@ -45,9 +45,17 @@
$exePath = ""
$existingArgs = ""
if ($uninstallCommand -match '^\s*"([^"]+)"\s*(.*)$') {
+ # Quoted path: "C:\Path With Spaces\uninst.exe" [args]
+ $exePath = $matches[1]
+ $existingArgs = $matches[2].Trim()
+} elseif ($uninstallCommand -match '(?i)^\s*(.+?\.exe)\s*(.*)$') {
+ # Unquoted path that may contain spaces: capture through the .exe.
+ # JetBrains stores e.g.
+ # C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2025.2.6.2\bin\Uninstall.exe
$exePath = $matches[1]
$existingArgs = $matches[2].Trim()
} elseif ($uninstallCommand -match '^\s*(\S+)\s*(.*)$') {
+ # Fallback: no .exe found, split on first whitespace.
$exePath = $matches[1]
$existingArgs = $matches[2].Trim()
} else {ee/maintained-apps/outputs/intellij-idea/windows.json=== Install Script (no changes) ===
=== Uninstall // 6d7e0c4a -> 59064213 ===
--- /tmp/old.M6KKEQ 2026-05-27 14:50:41.174695240 +0000
+++ /tmp/new.HSDVHj 2026-05-27 14:50:41.174695240 +0000
@@ -49,9 +49,17 @@
$exePath = ""
$existingArgs = ""
if ($uninstallCommand -match '^\s*"([^"]+)"\s*(.*)$') {
+ # Quoted path: "C:\Path With Spaces\uninst.exe" [args]
+ $exePath = $matches[1]
+ $existingArgs = $matches[2].Trim()
+} elseif ($uninstallCommand -match '(?i)^\s*(.+?\.exe)\s*(.*)$') {
+ # Unquoted path that may contain spaces: capture through the .exe.
+ # JetBrains stores e.g.
+ # C:\Program Files\JetBrains\IntelliJ IDEA 2025.2.5\bin\Uninstall.exe
$exePath = $matches[1]
$existingArgs = $matches[2].Trim()
} elseif ($uninstallCommand -match '^\s*(\S+)\s*(.*)$') {
+ # Fallback: no .exe found, split on first whitespace.
$exePath = $matches[1]
$existingArgs = $matches[2].Trim()
} else {ee/maintained-apps/outputs/phpstorm/windows.json=== Install Script (no changes) ===
=== Uninstall // 09082c04 -> 909d4772 ===
--- /tmp/old.Ohx7TN 2026-05-27 14:50:41.213695197 +0000
+++ /tmp/new.LoS2jL 2026-05-27 14:50:41.213695197 +0000
@@ -45,9 +45,17 @@
$exePath = ""
$existingArgs = ""
if ($uninstallCommand -match '^\s*"([^"]+)"\s*(.*)$') {
+ # Quoted path: "C:\Path With Spaces\uninst.exe" [args]
+ $exePath = $matches[1]
+ $existingArgs = $matches[2].Trim()
+} elseif ($uninstallCommand -match '(?i)^\s*(.+?\.exe)\s*(.*)$') {
+ # Unquoted path that may contain spaces: capture through the .exe.
+ # JetBrains stores e.g.
+ # C:\Program Files\JetBrains\PhpStorm 2026.1.2\bin\Uninstall.exe
$exePath = $matches[1]
$existingArgs = $matches[2].Trim()
} elseif ($uninstallCommand -match '^\s*(\S+)\s*(.*)$') {
+ # Fallback: no .exe found, split on first whitespace.
$exePath = $matches[1]
$existingArgs = $matches[2].Trim()
} else { |
There was a problem hiding this comment.
Claude Code Review
This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.
Tip: disable this comment in your organization's Code Review settings.
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds Windows support for IntelliJ IDEA (Ultimate + Community Edition) in the maintained-apps catalog and improves JetBrains NSIS uninstall handling (notably for unquoted paths with spaces).
Changes:
- Added Winget input manifests and PowerShell install/uninstall scripts for IntelliJ IDEA Ultimate and CE on Windows
- Added generated Windows output JSON for IntelliJ IDEA Ultimate and CE, plus corresponding entries in the apps catalog
- Updated PhpStorm Windows uninstall script/reference to better parse unquoted uninstall strings containing spaces
Reviewed changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| ee/maintained-apps/outputs/phpstorm/windows.json | Updates the referenced uninstall script for PhpStorm to a version with improved uninstall-string parsing. |
| ee/maintained-apps/outputs/intellij-idea/windows.json | Introduces the generated Windows definition (queries, installer URL, install/uninstall refs) for IntelliJ IDEA Ultimate. |
| ee/maintained-apps/outputs/intellij-idea-ce/windows.json | Introduces the generated Windows definition (queries, installer URL, install/uninstall refs) for IntelliJ IDEA Community Edition. |
| ee/maintained-apps/outputs/apps.json | Adds Windows app catalog entries for IntelliJ IDEA Ultimate and CE. |
| ee/maintained-apps/inputs/winget/scripts/phpstorm_uninstall.ps1 | Enhances uninstall-string parsing to support unquoted .exe paths with spaces. |
| ee/maintained-apps/inputs/winget/scripts/intellij_idea_uninstall.ps1 | Adds Windows uninstall automation for IntelliJ IDEA Ultimate. |
| ee/maintained-apps/inputs/winget/scripts/intellij_idea_install.ps1 | Adds Windows silent install automation for IntelliJ IDEA Ultimate. |
| ee/maintained-apps/inputs/winget/scripts/intellij_idea_ce_uninstall.ps1 | Adds Windows uninstall automation for IntelliJ IDEA Community Edition. |
| ee/maintained-apps/inputs/winget/scripts/intellij_idea_ce_install.ps1 | Adds Windows silent install automation for IntelliJ IDEA Community Edition. |
| ee/maintained-apps/inputs/winget/intellij-idea.json | Adds Winget input metadata for IntelliJ IDEA Ultimate (Windows). |
| ee/maintained-apps/inputs/winget/intellij-idea-ce.json | Adds Winget input metadata for IntelliJ IDEA CE (Windows). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| $selected = $null | ||
| foreach ($key in $uninstallKeys) { | ||
| if ($key.DisplayName -and ` | ||
| $key.DisplayName -like "IntelliJ IDEA *" -and ` | ||
| $key.DisplayName -notlike "*Community*" -and ` | ||
| $key.DisplayName -notlike "*Educational*" -and ` | ||
| $key.Publisher -like $publisherLike) { | ||
| $selected = $key | ||
| break | ||
| } | ||
| } |
| $uninstallCommand = $selected.UninstallString | ||
|
|
||
| # Split the uninstall string into exe + args. Handle both quoted and unquoted | ||
| # exe paths. | ||
| $exePath = "" | ||
| $existingArgs = "" | ||
| if ($uninstallCommand -match '^\s*"([^"]+)"\s*(.*)$') { | ||
| # Quoted path: "C:\Path With Spaces\uninst.exe" [args] | ||
| $exePath = $matches[1] | ||
| $existingArgs = $matches[2].Trim() | ||
| } elseif ($uninstallCommand -match '(?i)^\s*(.+?\.exe)\s*(.*)$') { | ||
| # Unquoted path that may contain spaces: capture through the .exe. | ||
| # JetBrains stores e.g. | ||
| # C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2025.2.6.2\bin\Uninstall.exe | ||
| $exePath = $matches[1] | ||
| $existingArgs = $matches[2].Trim() | ||
| } elseif ($uninstallCommand -match '^\s*(\S+)\s*(.*)$') { | ||
| # Fallback: no .exe found, split on first whitespace. | ||
| $exePath = $matches[1] | ||
| $existingArgs = $matches[2].Trim() | ||
| } else { | ||
| Throw "Could not parse uninstall string: $uninstallCommand" | ||
| } |
| @@ -0,0 +1,27 @@ | |||
| # Learn more about .exe install scripts: | |||
| # http://fleetdm.com/learn-more-about/exe-install-scripts | |||
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (11)
WalkthroughThis PR extends Windows support for JetBrains IDEs by adding IntelliJ IDEA Community Edition and Ultimate to the managed application catalog. It introduces Winget input definitions, PowerShell installation and uninstallation scripts that handle NSIS-based installers and Windows registry operations, and corresponding output manifests with embedded script implementations. The PR also improves the existing PhpStorm uninstall script with more robust registry UninstallString parsing to handle quoted and unquoted executable paths. All scripts implement silent installation modes and proper exit code propagation. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Add Windows winget inputs and PowerShell scripts for IntelliJ IDEA Community Edition and Ultimate. New files include input manifests (ee/maintained-apps/inputs/winget/*.json), installer scripts that run the NSIS installers silently (using /S), and uninstall scripts that locate the uninstall string in the registry, stop running IDEA processes, ensure the /S silent flag, and execute the uninstaller. Update outputs by adding app entries in ee/maintained-apps/outputs/apps.json and new per-app outputs with version metadata, installer URLs, sha256 hashes and embedded script refs: CE version 2025.2.6.2 and Ultimate version 2025.2.5.
Summary by CodeRabbit
New Features
Bug Fixes