Skip to content

Add IntelliJ IDEA CE & Ultimate Windows apps - #46257

Merged
allenhouchins merged 2 commits into
mainfrom
allenhouchins-intellij-windows-fma
May 27, 2026
Merged

Add IntelliJ IDEA CE & Ultimate Windows apps#46257
allenhouchins merged 2 commits into
mainfrom
allenhouchins-intellij-windows-fma

Conversation

@allenhouchins

@allenhouchins allenhouchins commented May 27, 2026

Copy link
Copy Markdown
Member

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

    • Added Windows support for IntelliJ IDEA Community Edition management.
    • Added Windows support for IntelliJ IDEA Ultimate management.
  • Bug Fixes

    • Improved uninstall logic for PhpStorm on Windows to better handle executable path parsing.

Review Change Stack

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.
fleet-release
fleet-release previously approved these changes May 27, 2026
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.
@github-actions

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/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 {

@allenhouchins
allenhouchins marked this pull request as ready for review May 27, 2026 14:58
Copilot AI review requested due to automatic review settings May 27, 2026 14:58

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@allenhouchins
allenhouchins merged commit 2d2c93a into main May 27, 2026
14 checks passed
@allenhouchins
allenhouchins deleted the allenhouchins-intellij-windows-fma branch May 27, 2026 14:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +23 to +33
$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
}
}
Comment on lines +41 to +63
$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
@coderabbitai

coderabbitai Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: ff69f3dd-179c-41b0-8c16-8f51d8aef100

📥 Commits

Reviewing files that changed from the base of the PR and between 8f3e7d7 and 4f5f4a1.

📒 Files selected for processing (11)
  • ee/maintained-apps/inputs/winget/intellij-idea-ce.json
  • ee/maintained-apps/inputs/winget/intellij-idea.json
  • ee/maintained-apps/inputs/winget/scripts/intellij_idea_ce_install.ps1
  • ee/maintained-apps/inputs/winget/scripts/intellij_idea_ce_uninstall.ps1
  • ee/maintained-apps/inputs/winget/scripts/intellij_idea_install.ps1
  • ee/maintained-apps/inputs/winget/scripts/intellij_idea_uninstall.ps1
  • ee/maintained-apps/inputs/winget/scripts/phpstorm_uninstall.ps1
  • ee/maintained-apps/outputs/apps.json
  • ee/maintained-apps/outputs/intellij-idea-ce/windows.json
  • ee/maintained-apps/outputs/intellij-idea/windows.json
  • ee/maintained-apps/outputs/phpstorm/windows.json

Walkthrough

This 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)
  • Create PR with unit tests
  • Commit unit tests in branch allenhouchins-intellij-windows-fma

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants