Skip to content

Update Fleet-maintained apps - #46389

Closed
fleet-release wants to merge 1 commit into
mainfrom
fma-2605282059
Closed

Update Fleet-maintained apps#46389
fleet-release wants to merge 1 commit into
mainfrom
fma-2605282059

Conversation

@fleet-release

@fleet-release fleet-release commented May 28, 2026

Copy link
Copy Markdown
Contributor

Automated ingestion of latest Fleet-maintained app data.

Summary by CodeRabbit

  • Chores
    • Updated application metadata for 11 software packages with latest versions: Arc (1.149.0), Brave Browser (148.1.90.128), Camtasia (2026.1.2), Claude (1.9659.1), Dialpad (2605.1.0), Grammarly Desktop (1.167.1), Granola (7.277.1), Notepad++ (8.9.6), Parallels (26.3.3), Power BI (2.154.956.0), and Canva Windows enhancements.

Review Change Stack

Generated automatically with cmd/maintained-apps.

@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.

@github-actions

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/outputs/arc/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/brave-browser/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/camtasia/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/canva/windows.json

=== Install Script (no changes) ===
=== Uninstall // 58022dd8 -> f683286d ===

--- /tmp/old.Y0NIsC	2026-05-28 21:03:38.789449830 +0000
+++ /tmp/new.j867gX	2026-05-28 21:03:38.790449827 +0000
@@ -32,7 +32,7 @@
 # Parse the uninstall string. Handle both quoted and unquoted exe paths.
 if ($uninstallString -match '^"([^"]+)"(.*)') {
     $exePath = $matches[1]
-} elseif ($uninstallString -match '^([^\s]+)(.*)') {
+} elseif ($uninstallString -match '^(.+?\.exe)(.*)$') {
     $exePath = $matches[1]
 } else {
     Write-Host "Error: Could not parse uninstall string: $uninstallString"

ee/maintained-apps/outputs/claude/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/dialpad/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/grammarly-desktop/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/granola/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/granola/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/notepad++/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/parallels/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/power-bi/windows.json

=== Install // ee068356 -> 4be62464 ===

--- /tmp/old.zqfkjX	2026-05-28 21:03:39.059448957 +0000
+++ /tmp/new.aDPG4i	2026-05-28 21:03:39.059448957 +0000
@@ -1,12 +1,8 @@
-# Learn more about .exe install scripts:
-# http://fleetdm.com/learn-more-about/exe-install-scripts
-
 $exeFilePath = "${env:INSTALLER_PATH}"
 
 try {
 
 # Add argument to install silently
-# Asana uses --silent for silent installation
 $processOptions = @{
   FilePath = "$exeFilePath"
   ArgumentList = "/silent", "/norestart", "ACCEPT_EULA=1"

=== Uninstall // fa3b8ea6 -> 201475bb ===

--- /tmp/old.ZQWU8D	2026-05-28 21:03:39.079448893 +0000
+++ /tmp/new.moFoxI	2026-05-28 21:03:39.080448889 +0000
@@ -8,13 +8,16 @@
 # Removing the MSI directly orphans the bundle: its uninstall then no-ops
 # (returns 0) and leaves the "Microsoft PowerBI Desktop (x64)" registration
 # behind, which is what Fleet's osquery-based validator keeps detecting.
-# Correct approach: uninstall via the BUNDLE first; it removes the MSI and its
-# own registration. Burn relaunches a cached copy of itself + spawns msiexec
-# asynchronously, so wait for those to finish.
+#
+# Correct approach: uninstall via the BUNDLE first. It removes both the MSI and
+# its own registration. Burn relaunches a cached copy of itself and spawns
+# msiexec asynchronously, so wait for those to finish.
 
 $ExpectedExitCodes = @(0, 1605, 1641, 3010)
 $exitCode = 0
 
+# Power BI's default install folder; used as a safety check before deleting any
+# stale registration that survives a successful uninstall.
 $installDirs = @(
     (Join-Path $env:ProgramFiles 'Microsoft Power BI Desktop'),
     (Join-Path ${env:ProgramFiles(x86)} 'Microsoft Power BI Desktop')
@@ -58,6 +61,8 @@
 }
 
 try {
+
+    # Uninstall roots across all hives (matches osquery's "programs" table).
     $roots = [System.Collections.Generic.List[string]]::new()
     $roots.Add('HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall')
     $roots.Add('HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall')
@@ -77,20 +82,23 @@
         Stop-Process -Name $proc -Force -ErrorAction SilentlyContinue
     }
 
-    # Phase 1: uninstall via the Burn bundle bootstrapper(s) FIRST.
+    # --- Phase 1: uninstall via the Burn bundle bootstrapper(s) FIRST. ---
     foreach ($e in ($entries | Where-Object { $_.Command -match "(?i)PBIDesktopSetup.*\.exe" })) {
         $exe = Get-ExePath $e.Command
         if (-not $exe) { Write-Host "Could not parse bundle exe from: $($e.Command)"; continue }
         if (-not (Test-Path -LiteralPath $exe)) { Write-Host "Bundle exe missing: $exe"; continue }
 
         Write-Host "Uninstalling bundle: '$($e.DisplayName)'"
+        Write-Host "  Command: $exe"
+        Write-Host "  Args: /uninstall /quiet /norestart"
         $p = Start-Process -FilePath $exe -ArgumentList "/uninstall /quiet /norestart" -PassThru -Wait
         Write-Host "  Exit code: $($p.ExitCode)"
         if (($ExpectedExitCodes -notcontains $p.ExitCode) -and ($exitCode -eq 0)) { $exitCode = $p.ExitCode }
+
         Wait-ForProcessExit -Names @("PBIDesktopSetup_x64", "PBIDesktopSetup", "msiexec") -TimeoutSeconds 240
     }
 
-    # Phase 2: remove any MSI entries the bundle didn't clean up.
+    # --- Phase 2: remove any MSI entries the bundle didn't clean up. ---
     foreach ($e in (Get-PowerBIEntries -Roots $roots)) {
         $msiCode = $null
         if ($e.Command -match "(?i)MsiExec\.exe\s+/[IX]\s*(\{[A-F0-9-]+\})") { $msiCode = $Matches[1] }
@@ -104,16 +112,22 @@
         if (($ExpectedExitCodes -notcontains $p.ExitCode) -and ($exitCode -eq 0)) { $exitCode = $p.ExitCode }
     }
 
-    # Phase 3: safety net for stale registration when product files are gone.
+    # --- Phase 3: safety net. If the product files are gone but a stale ARP
+    # registration lingers, remove the orphaned key so detection clears. Gated
+    # on the install folder being absent so we never hide a real install. ---
     $productGone = -not ($installDirs | Where-Object { $_ -and (Test-Path -LiteralPath $_) })
     foreach ($e in (Get-PowerBIEntries -Roots $roots)) {
-        if ($productGone) {
+        $isMachineKey = $e.KeyPath -like 'Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\*'
+        if ($productGone -and $isMachineKey) {
             Write-Host "Removing orphaned registration: '$($e.DisplayName)' ($($e.KeyPath))"
             Remove-Item -Path $e.KeyPath -Recurse -Force -ErrorAction SilentlyContinue
         } else {
             Write-Host "WARNING: entry still present and product files remain: '$($e.DisplayName)'"
             if ($exitCode -eq 0) { $exitCode = 1 }
         }
+            Write-Host "WARNING: entry still present and product files remain: '$($e.DisplayName)'"
+            if ($exitCode -eq 0) { $exitCode = 1 }
+        }
     }
 
 } catch {

@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

Walkthrough

This PR updates 10 maintained application definitions across macOS and Windows platforms within the Fleet ecosystem. Most updates follow a consistent pattern: version number bumps synchronized with SQL patch-detection thresholds, new installer URLs, and updated SHA256 checksums. Arc, Brave Browser, Camtasia, Claude, Dialpad, Grammarly Desktop, Parallels, and Granola all receive macOS version increments, while Granola and Notepad++ are updated on Windows. Two applications receive more extensive changes: Canva's Windows uninstall logic is refined to improve registry path parsing, and Power BI's Windows release is bumped alongside updated PowerShell install and uninstall scripts that enhance logging and maintain the existing multi-phase uninstall orchestration.

Possibly related PRs

  • fleetdm/fleet#46037: Updates Arc (arc/darwin.json) version metadata, synchronizing the patched version-compare threshold, installer URL, and SHA256 checksum.
  • fleetdm/fleet#45972: Updates Brave Browser macOS version metadata with new installer URL and SHA256 checksum.
  • fleetdm/fleet#46307: Updates Granola across macOS and Windows maintained-app definitions with synchronized version metadata and installer references.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive The PR description is minimal but appropriate for an automated process. However, it lacks detailed information about what changed and does not follow the repository's description template which includes checklists for testing, database migrations, and other quality checks. Consider whether automated app version updates require the full template checklist, or if a lighter template is appropriate for automated PRs. If required, add details about testing performed and any validation of the updated metadata.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Update Fleet-maintained apps' is concise and directly related to the changeset, which updates version metadata for multiple Fleet-maintained applications across multiple platforms.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fma-2605282059

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.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ee/maintained-apps/outputs/power-bi/windows.json`:
- Line 19: Phase 3 of the uninstall (the block using $productGone and iterating
Get-PowerBIEntries) contains a duplicated WARNING output and an extra closing
brace that breaks the try/catch structure; edit the block in the
Get-PowerBIEntries -> Phase 3 section to remove the duplicated lines "Write-Host
\"WARNING: entry still present and product files remain: '$($e.DisplayName)'\""
and the redundant "if ($exitCode -eq 0) { $exitCode = 1 }" duplicate, then
remove the surplus "}" so the foreach and try/catch close correctly (ensure the
foreach that tests $productGone, the Remove-Item call, and the corresponding
else branch are balanced and the catch block remains intact).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: e93862a5-6200-4d47-a595-ca69ec4d62a3

📥 Commits

Reviewing files that changed from the base of the PR and between b74f526 and defb7d7.

📒 Files selected for processing (12)
  • ee/maintained-apps/outputs/arc/darwin.json
  • ee/maintained-apps/outputs/brave-browser/darwin.json
  • ee/maintained-apps/outputs/camtasia/darwin.json
  • ee/maintained-apps/outputs/canva/windows.json
  • ee/maintained-apps/outputs/claude/darwin.json
  • ee/maintained-apps/outputs/dialpad/darwin.json
  • ee/maintained-apps/outputs/grammarly-desktop/darwin.json
  • ee/maintained-apps/outputs/granola/darwin.json
  • ee/maintained-apps/outputs/granola/windows.json
  • ee/maintained-apps/outputs/notepad++/windows.json
  • ee/maintained-apps/outputs/parallels/darwin.json
  • ee/maintained-apps/outputs/power-bi/windows.json

"refs": {
"ee068356": "# Learn more about .exe install scripts:\n# http://fleetdm.com/learn-more-about/exe-install-scripts\n\n$exeFilePath = \"${env:INSTALLER_PATH}\"\n\ntry {\n\n# Add argument to install silently\n# Asana uses --silent for silent installation\n$processOptions = @{\n FilePath = \"$exeFilePath\"\n ArgumentList = \"/silent\", \"/norestart\", \"ACCEPT_EULA=1\"\n PassThru = $true\n Wait = $true\n}\n\n# Start process and track exit code\n$process = Start-Process @processOptions\n$exitCode = $process.ExitCode\n\n# Prints the exit code\nWrite-Host \"Install exit code: $exitCode\"\nExit $exitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",
"fa3b8ea6": "# Power BI Desktop's EXE installer is a WiX \"Burn\" bundle. It registers TWO\n# uninstall entries:\n# * \"Microsoft PowerBI Desktop (x64)\" -> the bundle bootstrapper\n# (...\\Package Cache\\{afa18d15-...}\\PBIDesktopSetup_x64.exe)\n# * \"Microsoft Power BI Desktop (x64)\" -> the MSI the bundle installed\n# (MsiExec.exe /X{c7d2053f-...})\n#\n# Removing the MSI directly orphans the bundle: its uninstall then no-ops\n# (returns 0) and leaves the \"Microsoft PowerBI Desktop (x64)\" registration\n# behind, which is what Fleet's osquery-based validator keeps detecting.\n# Correct approach: uninstall via the BUNDLE first; it removes the MSI and its\n# own registration. Burn relaunches a cached copy of itself + spawns msiexec\n# asynchronously, so wait for those to finish.\n\n$ExpectedExitCodes = @(0, 1605, 1641, 3010)\n$exitCode = 0\n\n$installDirs = @(\n (Join-Path $env:ProgramFiles 'Microsoft Power BI Desktop'),\n (Join-Path ${env:ProgramFiles(x86)} 'Microsoft Power BI Desktop')\n)\n\nfunction Wait-ForProcessExit {\n param([string[]]$Names, [int]$TimeoutSeconds = 240)\n $elapsed = 0\n while ($elapsed -lt $TimeoutSeconds) {\n $running = $Names | Where-Object { Get-Process -Name $_ -ErrorAction SilentlyContinue }\n if (-not $running) { break }\n Start-Sleep -Seconds 3\n $elapsed += 3\n }\n}\n\nfunction Get-PowerBIEntries {\n param([string[]]$Roots)\n $list = @()\n foreach ($root in $Roots) {\n foreach ($sub in (Get-ChildItem -Path $root -ErrorAction SilentlyContinue)) {\n $key = Get-ItemProperty $sub.PSPath -ErrorAction SilentlyContinue\n if (-not $key.DisplayName) { continue }\n if (-not (($key.DisplayName -replace '\\s', '').ToLower().Contains(\"powerbidesktop\"))) { continue }\n $list += [PSCustomObject]@{\n DisplayName = $key.DisplayName\n KeyPath = $sub.PSPath\n KeyName = $sub.PSChildName\n Command = if ($key.QuietUninstallString) { $key.QuietUninstallString } else { $key.UninstallString }\n }\n }\n }\n return $list\n}\n\nfunction Get-ExePath {\n param([string]$Command)\n if ($Command -match '\"([^\"]+\\.exe)\"') { return $Matches[1] }\n if ($Command -match '(?i)([A-Z]:\\\\[^\"]+?\\.exe)') { return $Matches[1] }\n return $null\n}\n\ntry {\n $roots = [System.Collections.Generic.List[string]]::new()\n $roots.Add('HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall')\n $roots.Add('HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall')\n foreach ($hive in (Get-ChildItem 'Registry::HKEY_USERS' -ErrorAction SilentlyContinue)) {\n if ($hive.Name -match '_Classes$') { continue }\n $roots.Add(\"Registry::$($hive.Name)\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\")\n $roots.Add(\"Registry::$($hive.Name)\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\")\n }\n\n $entries = Get-PowerBIEntries -Roots $roots\n if ($entries.Count -eq 0) {\n Write-Host \"No Power BI Desktop entries found (already removed).\"\n Exit 0\n }\n\n foreach ($proc in @(\"PBIDesktop\", \"msmdsrv\", \"Microsoft.Mashup.Container\")) {\n Stop-Process -Name $proc -Force -ErrorAction SilentlyContinue\n }\n\n # Phase 1: uninstall via the Burn bundle bootstrapper(s) FIRST.\n foreach ($e in ($entries | Where-Object { $_.Command -match \"(?i)PBIDesktopSetup.*\\.exe\" })) {\n $exe = Get-ExePath $e.Command\n if (-not $exe) { Write-Host \"Could not parse bundle exe from: $($e.Command)\"; continue }\n if (-not (Test-Path -LiteralPath $exe)) { Write-Host \"Bundle exe missing: $exe\"; continue }\n\n Write-Host \"Uninstalling bundle: '$($e.DisplayName)'\"\n $p = Start-Process -FilePath $exe -ArgumentList \"/uninstall /quiet /norestart\" -PassThru -Wait\n Write-Host \" Exit code: $($p.ExitCode)\"\n if (($ExpectedExitCodes -notcontains $p.ExitCode) -and ($exitCode -eq 0)) { $exitCode = $p.ExitCode }\n Wait-ForProcessExit -Names @(\"PBIDesktopSetup_x64\", \"PBIDesktopSetup\", \"msiexec\") -TimeoutSeconds 240\n }\n\n # Phase 2: remove any MSI entries the bundle didn't clean up.\n foreach ($e in (Get-PowerBIEntries -Roots $roots)) {\n $msiCode = $null\n if ($e.Command -match \"(?i)MsiExec\\.exe\\s+/[IX]\\s*(\\{[A-F0-9-]+\\})\") { $msiCode = $Matches[1] }\n elseif ($e.KeyName -match \"(?i)^\\{[A-F0-9-]+\\}$\") { $msiCode = $e.KeyName }\n if (-not $msiCode) { continue }\n\n Write-Host \"Removing leftover MSI: '$($e.DisplayName)' ($msiCode)\"\n $p = Start-Process -FilePath \"MsiExec.exe\" -ArgumentList \"/X $msiCode /qn /norestart\" -PassThru -Wait\n Write-Host \" Exit code: $($p.ExitCode)\"\n Wait-ForProcessExit -Names @(\"msiexec\") -TimeoutSeconds 180\n if (($ExpectedExitCodes -notcontains $p.ExitCode) -and ($exitCode -eq 0)) { $exitCode = $p.ExitCode }\n }\n\n # Phase 3: safety net for stale registration when product files are gone.\n $productGone = -not ($installDirs | Where-Object { $_ -and (Test-Path -LiteralPath $_) })\n foreach ($e in (Get-PowerBIEntries -Roots $roots)) {\n if ($productGone) {\n Write-Host \"Removing orphaned registration: '$($e.DisplayName)' ($($e.KeyPath))\"\n Remove-Item -Path $e.KeyPath -Recurse -Force -ErrorAction SilentlyContinue\n } else {\n Write-Host \"WARNING: entry still present and product files remain: '$($e.DisplayName)'\"\n if ($exitCode -eq 0) { $exitCode = 1 }\n }\n }\n\n} catch {\n Write-Host \"Error: $_\"\n $exitCode = 1\n}\n\nif ($ExpectedExitCodes -contains $exitCode) { Exit 0 } else { Exit $exitCode }\n"
"201475bb": "# Power BI Desktop's EXE installer is a WiX \"Burn\" bundle. It registers TWO\n# uninstall entries:\n# * \"Microsoft PowerBI Desktop (x64)\" -> the bundle bootstrapper\n# (...\\Package Cache\\{afa18d15-...}\\PBIDesktopSetup_x64.exe)\n# * \"Microsoft Power BI Desktop (x64)\" -> the MSI the bundle installed\n# (MsiExec.exe /X{c7d2053f-...})\n#\n# Removing the MSI directly orphans the bundle: its uninstall then no-ops\n# (returns 0) and leaves the \"Microsoft PowerBI Desktop (x64)\" registration\n# behind, which is what Fleet's osquery-based validator keeps detecting.\n#\n# Correct approach: uninstall via the BUNDLE first. It removes both the MSI and\n# its own registration. Burn relaunches a cached copy of itself and spawns\n# msiexec asynchronously, so wait for those to finish.\n\n$ExpectedExitCodes = @(0, 1605, 1641, 3010)\n$exitCode = 0\n\n# Power BI's default install folder; used as a safety check before deleting any\n# stale registration that survives a successful uninstall.\n$installDirs = @(\n (Join-Path $env:ProgramFiles 'Microsoft Power BI Desktop'),\n (Join-Path ${env:ProgramFiles(x86)} 'Microsoft Power BI Desktop')\n)\n\nfunction Wait-ForProcessExit {\n param([string[]]$Names, [int]$TimeoutSeconds = 240)\n $elapsed = 0\n while ($elapsed -lt $TimeoutSeconds) {\n $running = $Names | Where-Object { Get-Process -Name $_ -ErrorAction SilentlyContinue }\n if (-not $running) { break }\n Start-Sleep -Seconds 3\n $elapsed += 3\n }\n}\n\nfunction Get-PowerBIEntries {\n param([string[]]$Roots)\n $list = @()\n foreach ($root in $Roots) {\n foreach ($sub in (Get-ChildItem -Path $root -ErrorAction SilentlyContinue)) {\n $key = Get-ItemProperty $sub.PSPath -ErrorAction SilentlyContinue\n if (-not $key.DisplayName) { continue }\n if (-not (($key.DisplayName -replace '\\s', '').ToLower().Contains(\"powerbidesktop\"))) { continue }\n $list += [PSCustomObject]@{\n DisplayName = $key.DisplayName\n KeyPath = $sub.PSPath\n KeyName = $sub.PSChildName\n Command = if ($key.QuietUninstallString) { $key.QuietUninstallString } else { $key.UninstallString }\n }\n }\n }\n return $list\n}\n\nfunction Get-ExePath {\n param([string]$Command)\n if ($Command -match '\"([^\"]+\\.exe)\"') { return $Matches[1] }\n if ($Command -match '(?i)([A-Z]:\\\\[^\"]+?\\.exe)') { return $Matches[1] }\n return $null\n}\n\ntry {\n\n # Uninstall roots across all hives (matches osquery's \"programs\" table).\n $roots = [System.Collections.Generic.List[string]]::new()\n $roots.Add('HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall')\n $roots.Add('HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall')\n foreach ($hive in (Get-ChildItem 'Registry::HKEY_USERS' -ErrorAction SilentlyContinue)) {\n if ($hive.Name -match '_Classes$') { continue }\n $roots.Add(\"Registry::$($hive.Name)\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\")\n $roots.Add(\"Registry::$($hive.Name)\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\")\n }\n\n $entries = Get-PowerBIEntries -Roots $roots\n if ($entries.Count -eq 0) {\n Write-Host \"No Power BI Desktop entries found (already removed).\"\n Exit 0\n }\n\n foreach ($proc in @(\"PBIDesktop\", \"msmdsrv\", \"Microsoft.Mashup.Container\")) {\n Stop-Process -Name $proc -Force -ErrorAction SilentlyContinue\n }\n\n # --- Phase 1: uninstall via the Burn bundle bootstrapper(s) FIRST. ---\n foreach ($e in ($entries | Where-Object { $_.Command -match \"(?i)PBIDesktopSetup.*\\.exe\" })) {\n $exe = Get-ExePath $e.Command\n if (-not $exe) { Write-Host \"Could not parse bundle exe from: $($e.Command)\"; continue }\n if (-not (Test-Path -LiteralPath $exe)) { Write-Host \"Bundle exe missing: $exe\"; continue }\n\n Write-Host \"Uninstalling bundle: '$($e.DisplayName)'\"\n Write-Host \" Command: $exe\"\n Write-Host \" Args: /uninstall /quiet /norestart\"\n $p = Start-Process -FilePath $exe -ArgumentList \"/uninstall /quiet /norestart\" -PassThru -Wait\n Write-Host \" Exit code: $($p.ExitCode)\"\n if (($ExpectedExitCodes -notcontains $p.ExitCode) -and ($exitCode -eq 0)) { $exitCode = $p.ExitCode }\n\n Wait-ForProcessExit -Names @(\"PBIDesktopSetup_x64\", \"PBIDesktopSetup\", \"msiexec\") -TimeoutSeconds 240\n }\n\n # --- Phase 2: remove any MSI entries the bundle didn't clean up. ---\n foreach ($e in (Get-PowerBIEntries -Roots $roots)) {\n $msiCode = $null\n if ($e.Command -match \"(?i)MsiExec\\.exe\\s+/[IX]\\s*(\\{[A-F0-9-]+\\})\") { $msiCode = $Matches[1] }\n elseif ($e.KeyName -match \"(?i)^\\{[A-F0-9-]+\\}$\") { $msiCode = $e.KeyName }\n if (-not $msiCode) { continue }\n\n Write-Host \"Removing leftover MSI: '$($e.DisplayName)' ($msiCode)\"\n $p = Start-Process -FilePath \"MsiExec.exe\" -ArgumentList \"/X $msiCode /qn /norestart\" -PassThru -Wait\n Write-Host \" Exit code: $($p.ExitCode)\"\n Wait-ForProcessExit -Names @(\"msiexec\") -TimeoutSeconds 180\n if (($ExpectedExitCodes -notcontains $p.ExitCode) -and ($exitCode -eq 0)) { $exitCode = $p.ExitCode }\n }\n\n # --- Phase 3: safety net. If the product files are gone but a stale ARP\n # registration lingers, remove the orphaned key so detection clears. Gated\n # on the install folder being absent so we never hide a real install. ---\n $productGone = -not ($installDirs | Where-Object { $_ -and (Test-Path -LiteralPath $_) })\n foreach ($e in (Get-PowerBIEntries -Roots $roots)) {\n $isMachineKey = $e.KeyPath -like 'Microsoft.PowerShell.Core\\Registry::HKEY_LOCAL_MACHINE\\*'\n if ($productGone -and $isMachineKey) {\n Write-Host \"Removing orphaned registration: '$($e.DisplayName)' ($($e.KeyPath))\"\n Remove-Item -Path $e.KeyPath -Recurse -Force -ErrorAction SilentlyContinue\n } else {\n Write-Host \"WARNING: entry still present and product files remain: '$($e.DisplayName)'\"\n if ($exitCode -eq 0) { $exitCode = 1 }\n }\n Write-Host \"WARNING: entry still present and product files remain: '$($e.DisplayName)'\"\n if ($exitCode -eq 0) { $exitCode = 1 }\n }\n }\n\n} catch {\n Write-Host \"Error: $_\"\n $exitCode = 1\n}\n\nif ($ExpectedExitCodes -contains $exitCode) { Exit 0 } else { Exit $exitCode }\n",

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.

⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
python3 - <<'EOF'
import json
with open('ee/maintained-apps/outputs/power-bi/windows.json') as f:
    data = json.load(f)
s = data['refs']['201475bb']
print("open  { :", s.count('{'))
print("close } :", s.count('}'))
print("balanced :", s.count('{') == s.count('}'))
EOF

Repository: fleetdm/fleet

Length of output: 100


🏁 Script executed:

#!/bin/bash
python3 - <<'PY'
import json, re
path='ee/maintained-apps/outputs/power-bi/windows.json'
with open(path) as f:
    data=json.load(f)
s=data['refs']['201475bb']

# Get line-numbered excerpt around Phase 3
lines=s.splitlines()
# Find "Phase 3" line index
i=None
for idx,l in enumerate(lines):
    if 'Phase 3' in l:
        i=idx
        break
if i is None:
    raise SystemExit('Phase 3 marker not found')
start=max(0,i-10)
end=min(len(lines), i+80)

for ln in range(start,end):
    print(f"{ln+1:04d}: {lines[ln]}")
print("\nWARNING count:", sum(1 for l in lines if 'WARNING: entry still present' in l))
PY

Repository: fleetdm/fleet

Length of output: 2018


🏁 Script executed:

#!/bin/bash
set -euo pipefail
rg -n "ValidateSoftwareInstallerScript|fleet\.ValidateSoftwareInstallerScript|maintained_apps\.go" -S .

Repository: fleetdm/fleet

Length of output: 1514


🏁 Script executed:

#!/bin/bash
set -euo pipefail
python3 - <<'PY'
import itertools,sys,os
def show(path, start, end):
    print(f"\n--- {path}:{start}-{end} ---")
    with open(path,'r',encoding='utf-8') as f:
        for i,line in enumerate(f, start=1):
            if i<start: continue
            if i>end: break
            sys.stdout.write(f"{i:5d}: {line}")
show('server/fleet/scripts.go', 520, 700)
show('server/fleet/scripts_test.go', 180, 450)
show('ee/server/service/maintained_apps.go', 80, 160)
PY

Repository: fleetdm/fleet

Length of output: 20280


🏁 Script executed:

#!/bin/bash
set -euo pipefail
command -v pwsh >/dev/null 2>&1 && echo "pwsh: $(pwsh -NoProfile -Command '$PSVersionTable.PSVersion.ToString()')" || echo "pwsh not found"
command -v powershell >/dev/null 2>&1 && echo "powershell: $(powershell -NoProfile -Command '$PSVersionTable.PSVersion.ToString()')" || echo "powershell not found"

Repository: fleetdm/fleet

Length of output: 90


🏁 Script executed:

#!/bin/bash
set -euo pipefail
python3 - <<'PY'
import json
path='ee/maintained-apps/outputs/power-bi/windows.json'
with open(path) as f:
    data=json.load(f)
s=data['refs']['201475bb']
# Print to a temp file for pwsh parsing
open('/tmp/powerbi_uninstall.ps1','w',encoding='utf-8').write(s)
PY

pwsh -NoProfile -Command '
$script = Get-Content /tmp/powerbi_uninstall.ps1 -Raw
$errors = $null
$tokens = $null
$null = [System.Management.Automation.Language.Parser]::ParseInput($script, [ref]$tokens, [ref]$errors)
"ParseErrorCount=$($errors.Count)"
$errors | ForEach-Object { $_.Message } | Select-Object -First 20
'

Repository: fleetdm/fleet

Length of output: 181


Fix Power BI uninstall script Phase 3 syntax (extra } + duplicated WARNING block)

The server-side validator for Windows scripts only checks empty/size/UTF-8 (shebang/interpreter is skipped for windows), so this malformed PowerShell passes validation but fails to parse on hosts. Phase 3 has a duplicated WARNING: ... block and an extra closing brace that breaks the try/catch structure (Try missing Catch/Finally, plus Unexpected token '}').

Proposed fix (remove duplicate WARNING/exit lines and surplus brace in the 201475bb uninstall ref string)
         } else {
             Write-Host "WARNING: entry still present and product files remain: '$($e.DisplayName)'"
             if ($exitCode -eq 0) { $exitCode = 1 }
         }
-            Write-Host "WARNING: entry still present and product files remain: '$($e.DisplayName)'"
-            if ($exitCode -eq 0) { $exitCode = 1 }
-        }
     }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ee/maintained-apps/outputs/power-bi/windows.json` at line 19, Phase 3 of the
uninstall (the block using $productGone and iterating Get-PowerBIEntries)
contains a duplicated WARNING output and an extra closing brace that breaks the
try/catch structure; edit the block in the Get-PowerBIEntries -> Phase 3 section
to remove the duplicated lines "Write-Host \"WARNING: entry still present and
product files remain: '$($e.DisplayName)'\"" and the redundant "if ($exitCode
-eq 0) { $exitCode = 1 }" duplicate, then remove the surplus "}" so the foreach
and try/catch close correctly (ensure the foreach that tests $productGone, the
Remove-Item call, and the corresponding else branch are balanced and the catch
block remains intact).

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: test-fma-pr-only

Failed stage: Filter apps.json and verify changed apps [❌]

Failed test name: ""

Failure summary:

The action failed during the Windows maintained-apps validation step because two app install
validations errored and the validator exited non-zero:
- Granola (granola/windows) failed while
executing its install script with exit status 0xc0000005 (Install exit code: -1073741819, an
access-violation/crash on Windows).
- Power BI (power-bi/windows) failed while executing its install
script with exit status 1.
- Cleanup also reported Access is denied when trying to delete
PBIDesktopSetup_x64.exe from the temp directory, but the job failure is driven by the validator
reporting Apps with errors: [Granola Power BI] and exiting status 1 (Process completed with exit
code 1).

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

118:  * [new branch]            11938-loadtesting-branch    -> origin/11938-loadtesting-branch
119:  * [new branch]            12007-ui-idp-metadata       -> origin/12007-ui-idp-metadata
120:  * [new branch]            12351-try-fix-for-fleet-desktop -> origin/12351-try-fix-for-fleet-desktop
121:  * [new branch]            12356-puppet-callback       -> origin/12356-puppet-callback
122:  * [new branch]            12375-query-bulk-action     -> origin/12375-query-bulk-action
123:  * [new branch]            12474-documentation         -> origin/12474-documentation
124:  * [new branch]            12614-federated-auth-support -> origin/12614-federated-auth-support
125:  * [new branch]            12687-host-issues-query     -> origin/12687-host-issues-query
126:  * [new branch]            12696-loadtest-cis-changes  -> origin/12696-loadtest-cis-changes
127:  * [new branch]            12842-fleetd-bitlocker-management -> origin/12842-fleetd-bitlocker-management
128:  * [new branch]            12842-fleetd-bitlocker-table -> origin/12842-fleetd-bitlocker-table
129:  * [new branch]            12889-faster-software       -> origin/12889-faster-software
130:  * [new branch]            13287-loadtest-changes      -> origin/13287-loadtest-changes
131:  * [new branch]            13288-poc-fleet-fips        -> origin/13288-poc-fleet-fips
132:  * [new branch]            13485-query-reports-migration -> origin/13485-query-reports-migration
133:  * [new branch]            13574-cache-failed-policy-counts -> origin/13574-cache-failed-policy-counts
134:  * [new branch]            13657-docs                  -> origin/13657-docs
...

146:  * [new branch]            146orch                     -> origin/146orch
147:  * [new branch]            14753-windows-ps1-api       -> origin/14753-windows-ps1-api
148:  * [new branch]            14957-test-dep-screen       -> origin/14957-test-dep-screen
149:  * [new branch]            14957-test-dep-screen-patch -> origin/14957-test-dep-screen-patch
150:  * [new branch]            15068-disk-encryption-ii    -> origin/15068-disk-encryption-ii
151:  * [new branch]            15082-download-api-docs     -> origin/15082-download-api-docs
152:  * [new branch]            15082-make-endpoints-consistent -> origin/15082-make-endpoints-consistent
153:  * [new branch]            15082-update-download-endpoints -> origin/15082-update-download-endpoints
154:  * [new branch]            15380-hosts-api-doc         -> origin/15380-hosts-api-doc
155:  * [new branch]            15461-ui-dep-assign-profile-responses -> origin/15461-ui-dep-assign-profile-responses
156:  * [new branch]            15463-msi-fix               -> origin/15463-msi-fix
157:  * [new branch]            15559-move-scep             -> origin/15559-move-scep
158:  * [new branch]            15633                       -> origin/15633
159:  * [new branch]            15770-mac-os-vuln           -> origin/15770-mac-os-vuln
160:  * [new branch]            15801-migration             -> origin/15801-migration
161:  * [new branch]            15912-password-reset-error-code -> origin/15912-password-reset-error-code
162:  * [new branch]            16182-log-root              -> origin/16182-log-root
...

594:  * [new branch]            7765-frontend               -> origin/7765-frontend
595:  * [new branch]            7766-backend-final-main-merge -> origin/7766-backend-final-main-merge
596:  * [new branch]            7766-backend-test           -> origin/7766-backend-test
597:  * [new branch]            7766-frontend               -> origin/7766-frontend
598:  * [new branch]            7993-figure-out-the-limits-of-our-current-search-approach -> origin/7993-figure-out-the-limits-of-our-current-search-approach
599:  * [new branch]            8021-orbit-use-specified-identifier -> origin/8021-orbit-use-specified-identifier
600:  * [new branch]            8186-vulnerable-software-false-positive-docker -> origin/8186-vulnerable-software-false-positive-docker
601:  * [new branch]            8593-gitops                 -> origin/8593-gitops
602:  * [new branch]            8708-docs                   -> origin/8708-docs
603:  * [new branch]            8708-encryption-key-api     -> origin/8708-encryption-key-api
604:  * [new branch]            8708-ingest-file-vault      -> origin/8708-ingest-file-vault
605:  * [new branch]            8708-ingest-macos-encription-key -> origin/8708-ingest-macos-encription-key
606:  * [new branch]            8708-ingest-macos-encription-key-ii -> origin/8708-ingest-macos-encription-key-ii
607:  * [new branch]            8974-native-smbios-uuid-support -> origin/8974-native-smbios-uuid-support
608:  * [new branch]            9260-cis-checks-5.10.x      -> origin/9260-cis-checks-5.10.x
609:  * [new branch]            9394-failed-to-create-device-auth-token-due-to-duplicate-key-errors -> origin/9394-failed-to-create-device-auth-token-due-to-duplicate-key-errors
610:  * [new branch]            9590-schema                 -> origin/9590-schema
...

840:  * [new branch]            allenhouchins-update-dmg-install-script -> origin/allenhouchins-update-dmg-install-script
841:  * [new branch]            allenhouchins-update-patch-policy-generation -> origin/allenhouchins-update-patch-policy-generation
842:  * [new branch]            allenhouchins-warp          -> origin/allenhouchins-warp
843:  * [new branch]            allenhouchins-windows-net-runtime-6 -> origin/allenhouchins-windows-net-runtime-6
844:  * [new branch]            allenhouchins-zoom-fma      -> origin/allenhouchins-zoom-fma
845:  * [new branch]            allenhouchins-zoom-logo-mac -> origin/allenhouchins-zoom-logo-mac
846:  * [new branch]            allenhouchins-zoom-policy-fix -> origin/allenhouchins-zoom-policy-fix
847:  * [new branch]            allenhouchins/fix-security-review-must-fixes -> origin/allenhouchins/fix-security-review-must-fixes
848:  * [new branch]            always-create-event-next-thu -> origin/always-create-event-next-thu
849:  * [new branch]            amazon-workspaces-client-windows-fma -> origin/amazon-workspaces-client-windows-fma
850:  * [new branch]            and_osq_proj                -> origin/and_osq_proj
851:  * [new branch]            andrey/loadtest-oval-vulns  -> origin/andrey/loadtest-oval-vulns
852:  * [new branch]            android-app-install-activity -> origin/android-app-install-activity
853:  * [new branch]            android-cofniguration-profiles-research -> origin/android-cofniguration-profiles-research
854:  * [new branch]            android-enroll-note         -> origin/android-enroll-note
855:  * [new branch]            android-enrollment-error    -> origin/android-enrollment-error
856:  * [new branch]            android-manual-enrollment-button -> origin/android-manual-enrollment-button
...

904:  * [new branch]            await-configuration-docs    -> origin/await-configuration-docs
905:  * [new branch]            aws-licensing-integration-proposal -> origin/aws-licensing-integration-proposal
906:  * [new branch]            backport-a41fb63            -> origin/backport-a41fb63
907:  * [new branch]            backport-c02af              -> origin/backport-c02af
908:  * [new branch]            backport-e65d6cf            -> origin/backport-e65d6cf
909:  * [new branch]            backport-ef07a406cc8dbccb4914bbd27631df74e5b13b49 -> origin/backport-ef07a406cc8dbccb4914bbd27631df74e5b13b49
910:  * [new branch]            backport-vpp-fix            -> origin/backport-vpp-fix
911:  * [new branch]            base-software-titles-loadtest -> origin/base-software-titles-loadtest
912:  * [new branch]            base-software-titles-loadtest-2 -> origin/base-software-titles-loadtest-2
913:  * [new branch]            beekeeper-fma-initial       -> origin/beekeeper-fma-initial
914:  * [new branch]            bettapizza                  -> origin/bettapizza
915:  * [new branch]            bettapizza--ghost-testimonial-update -> origin/bettapizza--ghost-testimonial-update
916:  * [new branch]            bettapizza-patch-1          -> origin/bettapizza-patch-1
917:  * [new branch]            bettapizza-patch-2          -> origin/bettapizza-patch-2
918:  * [new branch]            bettapizza-patch-3          -> origin/bettapizza-patch-3
919:  * [new branch]            better-byod-error           -> origin/better-byod-error
920:  * [new branch]            blog/canary-fleet-for-fleed-updates -> origin/blog/canary-fleet-for-fleed-updates
...

954:  * [new branch]            cherry-pick-41914-to-rc-v4.83.0 -> origin/cherry-pick-41914-to-rc-v4.83.0
955:  * [new branch]            cherry-pick-42773-vitals-constants -> origin/cherry-pick-42773-vitals-constants
956:  * [new branch]            cherry-pick-8750-into-rc-minor-fleet-v4.60.0 -> origin/cherry-pick-8750-into-rc-minor-fleet-v4.60.0
957:  * [new branch]            cherry-pick-dogfood-change  -> origin/cherry-pick-dogfood-change
958:  * [new branch]            cherry-pick-dogfood-env-vars -> origin/cherry-pick-dogfood-env-vars
959:  * [new branch]            cherry-pick-fleetctl-changes-to-allow-testing -> origin/cherry-pick-fleetctl-changes-to-allow-testing
960:  * [new branch]            cherry-pick-mac-address-vital -> origin/cherry-pick-mac-address-vital
961:  * [new branch]            cherry-pick-patches         -> origin/cherry-pick-patches
962:  * [new branch]            cherry-pick-remove-overrides-in-dev-mode -> origin/cherry-pick-remove-overrides-in-dev-mode
963:  * [new branch]            cherry-pick-util            -> origin/cherry-pick-util
964:  * [new branch]            cherry-pick-webhooks        -> origin/cherry-pick-webhooks
965:  * [new branch]            cherrypick-v4.85.0-version-bump-into-main -> origin/cherrypick-v4.85.0-version-bump-into-main
966:  * [new branch]            chore-UI-update-for-CSP     -> origin/chore-UI-update-for-CSP
967:  * [new branch]            chore-add-specific-yarn-version -> origin/chore-add-specific-yarn-version
968:  * [new branch]            chore-backend-api-patterns  -> origin/chore-backend-api-patterns
969:  * [new branch]            chore-change-error-message-custom-profile -> origin/chore-change-error-message-custom-profile
970:  * [new branch]            chore-cp-chage-status-code-turn-off-mdm -> origin/chore-cp-chage-status-code-turn-off-mdm
...

1010:  * [new branch]            claude/serene-borg          -> origin/claude/serene-borg
1011:  * [new branch]            claude/slack-add-fma-foxit-pdf-9UpRv -> origin/claude/slack-add-fma-foxit-pdf-9UpRv
1012:  * [new branch]            claude/slack-session-Yw6M0  -> origin/claude/slack-session-Yw6M0
1013:  * [new branch]            claude/sub-pr-42006         -> origin/claude/sub-pr-42006
1014:  * [new branch]            claude/update-mock-fixtures-for-ipolicy -> origin/claude/update-mock-fixtures-for-ipolicy
1015:  * [new branch]            claude/update-mock-fixtures-policy-interface -> origin/claude/update-mock-fixtures-policy-interface
1016:  * [new branch]            cli-update-fleetd-naming    -> origin/cli-update-fleetd-naming
1017:  * [new branch]            clone-423                   -> origin/clone-423
1018:  * [new branch]            close-product-designer-position -> origin/close-product-designer-position
1019:  * [new branch]            codeowner-test              -> origin/codeowner-test
1020:  * [new branch]            codeql-icon-fe-fix          -> origin/codeql-icon-fe-fix
1021:  * [new branch]            coderabbit-skip-paths       -> origin/coderabbit-skip-paths
1022:  * [new branch]            collect-abm-apns-expiration-usage-statistics -> origin/collect-abm-apns-expiration-usage-statistics
1023:  * [new branch]            components-in-same-file-instead-of-closures -> origin/components-in-same-file-instead-of-closures
1024:  * [new branch]            conf-2644-branch-from-main  -> origin/conf-2644-branch-from-main
1025:  * [new branch]            consistent-error            -> origin/consistent-error
1026:  * [new branch]            consistent-rest-api-language-part-ii -> origin/consistent-rest-api-language-part-ii
...

1157:  * [new branch]            edwardsb-vuln-processing-fix-sandcastle -> origin/edwardsb-vuln-processing-fix-sandcastle
1158:  * [new branch]            edwardsb-vuln-processing-volume-fix -> origin/edwardsb-vuln-processing-volume-fix
1159:  * [new branch]            edwardsb/deployment-guide-updates -> origin/edwardsb/deployment-guide-updates
1160:  * [new branch]            edwardsb/restrict_console_access -> origin/edwardsb/restrict_console_access
1161:  * [new branch]            elastic_rum                 -> origin/elastic_rum
1162:  * [new branch]            enable-jit-by-default       -> origin/enable-jit-by-default
1163:  * [new branch]            enable-test-go-automation-macos -> origin/enable-test-go-automation-macos
1164:  * [new branch]            enforce-firefox-doh         -> origin/enforce-firefox-doh
1165:  * [new branch]            enforce-firefox-windows     -> origin/enforce-firefox-windows
1166:  * [new branch]            enforce-ios-26.5-update-deadline-july-2026 -> origin/enforce-ios-26.5-update-deadline-july-2026
1167:  * [new branch]            enforce-iso27001-workstations -> origin/enforce-iso27001-workstations
1168:  * [new branch]            enforce-macos-15.5-update-deadline -> origin/enforce-macos-15.5-update-deadline
1169:  * [new branch]            enforce-macos-version-workstations -> origin/enforce-macos-version-workstations
1170:  * [new branch]            enroll-android-feature-guide -> origin/enroll-android-feature-guide
1171:  * [new branch]            ericswenson0-patch-1        -> origin/ericswenson0-patch-1
1172:  * [new branch]            error-counts                -> origin/error-counts
1173:  * [new branch]            errors-perf-testing         -> origin/errors-perf-testing
1174:  * [new branch]            es-reports                  -> origin/es-reports
...

1190:  * [new branch]            eugkuo-patch-6-slugs-FMA    -> origin/eugkuo-patch-6-slugs-FMA
1191:  * [new branch]            example-fleetctl-profiles   -> origin/example-fleetctl-profiles
1192:  * [new branch]            example-payloads-with-gitops -> origin/example-payloads-with-gitops
1193:  * [new branch]            exp-mdbook-docs             -> origin/exp-mdbook-docs
1194:  * [new branch]            experiment-disable-some-deletes -> origin/experiment-disable-some-deletes
1195:  * [new branch]            experiment-hardcode-counters-to-zero -> origin/experiment-hardcode-counters-to-zero
1196:  * [new branch]            experiment-no-txs           -> origin/experiment-no-txs
1197:  * [new branch]            experiment-status-tooltip   -> origin/experiment-status-tooltip
1198:  * [new branch]            experiment-with-two-branches -> origin/experiment-with-two-branches
1199:  * [new branch]            experimental_moveitem       -> origin/experimental_moveitem
1200:  * [new branch]            experimient-no-counts       -> origin/experimient-no-counts
1201:  * [new branch]            expiredcertstool            -> origin/expiredcertstool
1202:  * [new branch]            extra-dep-logs              -> origin/extra-dep-logs
1203:  * [new branch]            f84ee4c5f4                  -> origin/f84ee4c5f4
1204:  * [new branch]            faf-doc-clarification       -> origin/faf-doc-clarification
1205:  * [new branch]            failing-test                -> origin/failing-test
1206:  * [new branch]            faster-ci-checks            -> origin/faster-ci-checks
...

1244:  * [new branch]            feature-gkarr-testing2      -> origin/feature-gkarr-testing2
1245:  * [new branch]            feature-hydrant-ca          -> origin/feature-hydrant-ca
1246:  * [new branch]            feature-idp-byod            -> origin/feature-idp-byod
1247:  * [new branch]            feature-orbit-find          -> origin/feature-orbit-find
1248:  * [new branch]            feature-prioritization      -> origin/feature-prioritization
1249:  * [new branch]            feature-v4.44.1-live-queries -> origin/feature-v4.44.1-live-queries
1250:  * [new branch]            feature-windows-mdm-policy-extraction -> origin/feature-windows-mdm-policy-extraction
1251:  * [new branch]            feature/add-blank-to-osquer-link -> origin/feature/add-blank-to-osquer-link
1252:  * [new branch]            feature_14722-activity-feed-webhooks -> origin/feature_14722-activity-feed-webhooks
1253:  * [new branch]            feature_18115-crit-vuln-issues -> origin/feature_18115-crit-vuln-issues
1254:  * [new branch]            feature_19010-ipad-ios-lock-wipe-backend-changes -> origin/feature_19010-ipad-ios-lock-wipe-backend-changes
1255:  * [new branch]            feature_22078               -> origin/feature_22078
1256:  * [new branch]            fix                         -> origin/fix
1257:  * [new branch]            fix-35118-cis-win10-v4      -> origin/fix-35118-cis-win10-v4
1258:  * [new branch]            fix-4.84.4-k8s              -> origin/fix-4.84.4-k8s
1259:  * [new branch]            fix-40083-failed-install-retries -> origin/fix-40083-failed-install-retries
1260:  * [new branch]            fix-41290-vpp-added-status  -> origin/fix-41290-vpp-added-status
1261:  * [new branch]            fix-41337-save-env-secrets-dry-run -> origin/fix-41337-save-env-secrets-dry-run
1262:  * [new branch]            fix-43623-fma-patch-policy-gitops -> origin/fix-43623-fma-patch-policy-gitops
1263:  * [new branch]            fix-43673-my-device-sort    -> origin/fix-43673-my-device-sort
1264:  * [new branch]            fix-44199-embedded-app-bundles -> origin/fix-44199-embedded-app-bundles
1265:  * [new branch]            fix-45843-vuln-cursor-pagination-ambiguous-columns -> origin/fix-45843-vuln-cursor-pagination-ambiguous-columns
1266:  * [new branch]            fix-android-unenroll-activities -> origin/fix-android-unenroll-activities
1267:  * [new branch]            fix-blockquotes-google-groups -> origin/fix-blockquotes-google-groups
1268:  * [new branch]            fix-case-in-deploy-config-docs -> origin/fix-case-in-deploy-config-docs
1269:  * [new branch]            fix-cert-details-modal      -> origin/fix-cert-details-modal
1270:  * [new branch]            fix-checkerboard-scroll-to-right -> origin/fix-checkerboard-scroll-to-right
1271:  * [new branch]            fix-checkerboard-tooltip-nowrap -> origin/fix-checkerboard-tooltip-nowrap
1272:  * [new branch]            fix-cloudflare-warp-fma-output-json -> origin/fix-cloudflare-warp-fma-output-json
1273:  * [new branch]            fix-codeql-ci-error         -> origin/fix-codeql-ci-error
1274:  * [new branch]            fix-colima                  -> origin/fix-colima
1275:  * [new branch]            fix-color-for-mobile-sticky-nav -> origin/fix-color-for-mobile-sticky-nav
1276:  * [new branch]            fix-conflict-in-feature_19010-ipad-ios-lock-wipe -> origin/fix-conflict-in-feature_19010-ipad-ios-lock-wipe
1277:  * [new branch]            fix-contrib-docs            -> origin/fix-contrib-docs
1278:  * [new branch]            fix-cve-2026-2792-firefox-esr -> origin/fix-cve-2026-2792-firefox-esr
1279:  * [new branch]            fix-cve-validate-enrichment-canary -> origin/fix-cve-validate-enrichment-canary
1280:  * [new branch]            fix-dashboard-host-count-card-breakpoint -> origin/fix-dashboard-host-count-card-breakpoint
1281:  * [new branch]            fix-docker-publish          -> origin/fix-docker-publish
1282:  * [new branch]            fix-dogfood-workstation     -> origin/fix-dogfood-workstation
1283:  * [new branch]            fix-firefox-cve-2026-2792   -> origin/fix-firefox-cve-2026-2792
1284:  * [new branch]            fix-firefox-fma-conflict-error-msg -> origin/fix-firefox-fma-conflict-error-msg
1285:  * [new branch]            fix-flakey-orbit-test       -> origin/fix-flakey-orbit-test
...

1291:  * [new branch]            fix-host-counts-vpp-software -> origin/fix-host-counts-vpp-software
1292:  * [new branch]            fix-instability-ubuntu-latest -> origin/fix-instability-ubuntu-latest
1293:  * [new branch]            fix-ios-ipados-enrollment-label-42721 -> origin/fix-ios-ipados-enrollment-label-42721
1294:  * [new branch]            fix-list-sw-permissions     -> origin/fix-list-sw-permissions
1295:  * [new branch]            fix-mdm-enrolled-webhook    -> origin/fix-mdm-enrolled-webhook
1296:  * [new branch]            fix-mdm-redirect            -> origin/fix-mdm-redirect
1297:  * [new branch]            fix-mdm-url-truncation      -> origin/fix-mdm-url-truncation
1298:  * [new branch]            fix-missing-test-schema-update -> origin/fix-missing-test-schema-update
1299:  * [new branch]            fix-modernize               -> origin/fix-modernize
1300:  * [new branch]            fix-no-space-left-on-device-failure -> origin/fix-no-space-left-on-device-failure
1301:  * [new branch]            fix-notarization            -> origin/fix-notarization
1302:  * [new branch]            fix-orbit-notarization      -> origin/fix-orbit-notarization
1303:  * [new branch]            fix-os-settings-name-col-truncation -> origin/fix-os-settings-name-col-truncation
1304:  * [new branch]            fix-os-settings-underline-descender-clip -> origin/fix-os-settings-underline-descender-clip
1305:  * [new branch]            fix-pricing-more-info-icon-documentationurl -> origin/fix-pricing-more-info-icon-documentationurl
1306:  * [new branch]            fix-receive-from-github-error -> origin/fix-receive-from-github-error
1307:  * [new branch]            fix-sandbox-local           -> origin/fix-sandbox-local
...

1320:  * [new branch]            fix-ui-turn-on-mdm-external -> origin/fix-ui-turn-on-mdm-external
1321:  * [new branch]            fix-ui-typo-fleet-maintained-empty -> origin/fix-ui-typo-fleet-maintained-empty
1322:  * [new branch]            fix-vpp-edit-fleet-desktop-message -> origin/fix-vpp-edit-fleet-desktop-message
1323:  * [new branch]            fix-win-os-version          -> origin/fix-win-os-version
1324:  * [new branch]            fix_14825                   -> origin/fix_14825
1325:  * [new branch]            fixes-on-minor-fleet-v4.54.0 -> origin/fixes-on-minor-fleet-v4.54.0
1326:  * [new branch]            fixes-plus-4.35.1           -> origin/fixes-plus-4.35.1
1327:  * [new branch]            flaky-tests-nov-6           -> origin/flaky-tests-nov-6
1328:  * [new branch]            fleet-desktop-linux-browser -> origin/fleet-desktop-linux-browser
1329:  * [new branch]            fleet-desktop-version       -> origin/fleet-desktop-version
1330:  * [new branch]            fleet-mdm-server-url        -> origin/fleet-mdm-server-url
1331:  * [new branch]            fleet-multiple-abm-vpp-proposal -> origin/fleet-multiple-abm-vpp-proposal
1332:  * [new branch]            fleet-premium-users-usage-statistics -> origin/fleet-premium-users-usage-statistics
1333:  * [new branch]            fleet-release-infra         -> origin/fleet-release-infra
1334:  * [new branch]            fleet-server-config-1817    -> origin/fleet-server-config-1817
1335:  * [new branch]            fleet-server-log-request-errors -> origin/fleet-server-log-request-errors
1336:  * [new branch]            fleet-ship-rebuild          -> origin/fleet-ship-rebuild
...

2137:  * [new branch]            hotfix-disable-fv-rc        -> origin/hotfix-disable-fv-rc
2138:  * [new branch]            hotfix-failing-tests        -> origin/hotfix-failing-tests
2139:  * [new branch]            hotfix-query-update         -> origin/hotfix-query-update
2140:  * [new branch]            hotfix-revert-sofa-tables   -> origin/hotfix-revert-sofa-tables
2141:  * [new branch]            hotfix-v4.67.2-migration    -> origin/hotfix-v4.67.2-migration
2142:  * [new branch]            hotfix-v4.76.1              -> origin/hotfix-v4.76.1
2143:  * [new branch]            hover-gravatar              -> origin/hover-gravatar
2144:  * [new branch]            hughestaylor-patch-1        -> origin/hughestaylor-patch-1
2145:  * [new branch]            hughestaylor-patch-1-1      -> origin/hughestaylor-patch-1-1
2146:  * [new branch]            ignore-fleetctl-vulnerabilities -> origin/ignore-fleetctl-vulnerabilities
2147:  * [new branch]            improve-flakey-test         -> origin/improve-flakey-test
2148:  * [new branch]            improve-prometheus-metrics  -> origin/improve-prometheus-metrics
2149:  * [new branch]            include-mnt-in-gads-metric  -> origin/include-mnt-in-gads-metric
2150:  * [new branch]            increase-goreleaser-timeout-to-60m -> origin/increase-goreleaser-timeout-to-60m
2151:  * [new branch]            ingress-gateway-support     -> origin/ingress-gateway-support
2152:  * [new branch]            insert-software-installers-retry-error -> origin/insert-software-installers-retry-error
2153:  * [new branch]            integration-ci-debug        -> origin/integration-ci-debug
...

2164:  * [new branch]            irenareedy-patch-10         -> origin/irenareedy-patch-10
2165:  * [new branch]            irenareedy-patch-2          -> origin/irenareedy-patch-2
2166:  * [new branch]            irenareedy-patch-3          -> origin/irenareedy-patch-3
2167:  * [new branch]            irenareedy-patch-4          -> origin/irenareedy-patch-4
2168:  * [new branch]            irenareedy-patch-5          -> origin/irenareedy-patch-5
2169:  * [new branch]            irenareedy-patch-6          -> origin/irenareedy-patch-6
2170:  * [new branch]            irenareedy-patch-7          -> origin/irenareedy-patch-7
2171:  * [new branch]            irenareedy-patch-8          -> origin/irenareedy-patch-8
2172:  * [new branch]            irenareedy-patch-9          -> origin/irenareedy-patch-9
2173:  * [new branch]            irenareedy-thumbtack-case-study -> origin/irenareedy-thumbtack-case-study
2174:  * [new branch]            iso-27001-compliance        -> origin/iso-27001-compliance
2175:  * [new branch]            iso42001-ai-discovery-inventory -> origin/iso42001-ai-discovery-inventory
2176:  * [new branch]            issue-11545-my-device-dep-modal -> origin/issue-11545-my-device-dep-modal
2177:  * [new branch]            issue-2716-specify-query-platforms -> origin/issue-2716-specify-query-platforms
2178:  * [new branch]            issue-3271-rate-limit-distributed-writes -> origin/issue-3271-rate-limit-distributed-writes
2179:  * [new branch]            issue-4361-mail-change-should-error -> origin/issue-4361-mail-change-should-error
2180:  * [new branch]            issue-conf-1968-delete-uninstalled-software-from-main -> origin/issue-conf-1968-delete-uninstalled-software-from-main
...

2375:  * [new branch]            melpike-activity-lock-wipe-41683 -> origin/melpike-activity-lock-wipe-41683
2376:  * [new branch]            melpike-activity-rotate-managed-local-account-password-37142 -> origin/melpike-activity-rotate-managed-local-account-password-37142
2377:  * [new branch]            melpike-add-public-endpoints-44742 -> origin/melpike-add-public-endpoints-44742
2378:  * [new branch]            melpike-api-device-url-43895 -> origin/melpike-api-device-url-43895
2379:  * [new branch]            melpike-api-minimum-version-39085 -> origin/melpike-api-minimum-version-39085
2380:  * [new branch]            melpike-api-py-script-41470 -> origin/melpike-api-py-script-41470
2381:  * [new branch]            melpike-audit-log-mdm-cmd-45021 -> origin/melpike-audit-log-mdm-cmd-45021
2382:  * [new branch]            melpike-audit-recovery-lock-password-rotate -> origin/melpike-audit-recovery-lock-password-rotate
2383:  * [new branch]            melpike-byod-wipe-lock-23242 -> origin/melpike-byod-wipe-lock-23242
2384:  * [new branch]            melpike-byod-wipe-lock-23242-1 -> origin/melpike-byod-wipe-lock-23242-1
2385:  * [new branch]            melpike-byod-wipe-lock-api-23242 -> origin/melpike-byod-wipe-lock-api-23242
2386:  * [new branch]            melpike-byod-wipe-lock-better-23242 -> origin/melpike-byod-wipe-lock-better-23242
2387:  * [new branch]            melpike-byod-wipe-lock-yaml-23242 -> origin/melpike-byod-wipe-lock-yaml-23242
2388:  * [new branch]            melpike-combine-guides-30674 -> origin/melpike-combine-guides-30674
2389:  * [new branch]            melpike-create-managed-local-account-guide-37141 -> origin/melpike-create-managed-local-account-guide-37141
2390:  * [new branch]            melpike-dep-error-messaging-43916 -> origin/melpike-dep-error-messaging-43916
2391:  * [new branch]            melpike-doc-deploy-sw-41470 -> origin/melpike-doc-deploy-sw-41470
...

2528:  * [new branch]            mna-doc-change-api-structure -> origin/mna-doc-change-api-structure
2529:  * [new branch]            mna-experiment-macos-profiles-uuid -> origin/mna-experiment-macos-profiles-uuid
2530:  * [new branch]            mna-fix-22558-windows-installer-stuck-pending -> origin/mna-fix-22558-windows-installer-stuck-pending
2531:  * [new branch]            mna-fix-duplicate-lock-unlock-activity -> origin/mna-fix-duplicate-lock-unlock-activity
2532:  * [new branch]            mna-fix-failing-tests       -> origin/mna-fix-failing-tests
2533:  * [new branch]            mna-fix-flaky-integration-test -> origin/mna-fix-flaky-integration-test
2534:  * [new branch]            mna-fix-oom-fleetctl-test   -> origin/mna-fix-oom-fleetctl-test
2535:  * [new branch]            mna-loadtest-enroll-host-limit -> origin/mna-loadtest-enroll-host-limit
2536:  * [new branch]            mna-orbit-node-key          -> origin/mna-orbit-node-key
2537:  * [new branch]            mna-revert-change-to-autogenerated-activities-doc -> origin/mna-revert-change-to-autogenerated-activities-doc
2538:  * [new branch]            mna-temp-osquery-perf-loadtest -> origin/mna-temp-osquery-perf-loadtest
2539:  * [new branch]            mna11997                    -> origin/mna11997
2540:  * [new branch]            mock-associate-assets-endpoint -> origin/mock-associate-assets-endpoint
2541:  * [new branch]            monitoring-test             -> origin/monitoring-test
2542:  * [new branch]            more-conditional-access-api-updates -> origin/more-conditional-access-api-updates
2543:  * [new branch]            more-fd-errors              -> origin/more-fd-errors
2544:  * [new branch]            move-conditional-access-script-to-testing-qa -> origin/move-conditional-access-script-to-testing-qa
...

3071:  * [new branch]            sgress454/34259-end-user-auth-setup-backend -> origin/sgress454/34259-end-user-auth-setup-backend
3072:  * [new branch]            sgress454/34528-end-user-auth-setup-agent -> origin/sgress454/34528-end-user-auth-setup-agent
3073:  * [new branch]            sgress454/35376             -> origin/sgress454/35376
3074:  * [new branch]            sgress454/35452             -> origin/sgress454/35452
3075:  * [new branch]            sgress454/37127-open-macos-end-user-auth-window -> origin/sgress454/37127-open-macos-end-user-auth-window
3076:  * [new branch]            sgress454/38063-skeleton-server -> origin/sgress454/38063-skeleton-server
3077:  * [new branch]            sgress454/39344-rename-teams-to-fleet-all-changes -> origin/sgress454/39344-rename-teams-to-fleet-all-changes
3078:  * [new branch]            sgress454/39344-rename-teams-to-fleet-api-changes -> origin/sgress454/39344-rename-teams-to-fleet-api-changes
3079:  * [new branch]            sgress454/40642-update-jit-saml-prefix -> origin/sgress454/40642-update-jit-saml-prefix
3080:  * [new branch]            sgress454/43482-re-pin      -> origin/sgress454/43482-re-pin
3081:  * [new branch]            sgress454/44077-disable-datasets-backend -> origin/sgress454/44077-disable-datasets-backend
3082:  * [new branch]            sgress454/44077-disable-datasets-docs -> origin/sgress454/44077-disable-datasets-docs
3083:  * [new branch]            sgress454/44077-disable-datasets-frontend -> origin/sgress454/44077-disable-datasets-frontend
3084:  * [new branch]            sgress454/45290-drop-mobile-from-charting -> origin/sgress454/45290-drop-mobile-from-charting
3085:  * [new branch]            sgress454/add-vex-for-cve-2026-23517 -> origin/sgress454/add-vex-for-cve-2026-23517
3086:  * [new branch]            sgress454/adr-for-error-codes -> origin/sgress454/adr-for-error-codes
3087:  * [new branch]            sgress454/adr-refactor-list-hosts -> origin/sgress454/adr-refactor-list-hosts
...

3139:  * [new branch]            software-titles-loadtest-2  -> origin/software-titles-loadtest-2
3140:  * [new branch]            solutions-folder            -> origin/solutions-folder
3141:  * [new branch]            sort-seen-hosts-before-inserting -> origin/sort-seen-hosts-before-inserting
3142:  * [new branch]            spalmesano0-patch-2         -> origin/spalmesano0-patch-2
3143:  * [new branch]            sperad-props-documentation  -> origin/sperad-props-documentation
3144:  * [new branch]            spike-fleet-lint-plugin     -> origin/spike-fleet-lint-plugin
3145:  * [new branch]            spike-ui-permissions-pattern -> origin/spike-ui-permissions-pattern
3146:  * [new branch]            spokanemac-add-passcode-ddm-profile -> origin/spokanemac-add-passcode-ddm-profile
3147:  * [new branch]            spokanemac-dogfood-additional-apps -> origin/spokanemac-dogfood-additional-apps
3148:  * [new branch]            spokanemac-handbook-release-article -> origin/spokanemac-handbook-release-article
3149:  * [new branch]            spokanemac-macdevops-conference-post -> origin/spokanemac-macdevops-conference-post
3150:  * [new branch]            spokanemac-meetup-template  -> origin/spokanemac-meetup-template
3151:  * [new branch]            spokanemac-migrating-fleetdm-from-dogfood-to-terraform-on-aws -> origin/spokanemac-migrating-fleetdm-from-dogfood-to-terraform-on-aws
3152:  * [new branch]            spokanemac-release-article-issue-template -> origin/spokanemac-release-article-issue-template
3153:  * [new branch]            step4-improvements          -> origin/step4-improvements
3154:  * [new branch]            store-query-execution-and-ingestion-errors -> origin/store-query-execution-and-ingestion-errors
3155:  * [new branch]            support-breaking-osquery-downgrades -> origin/support-breaking-osquery-downgrades
...

3223:  * [new branch]            uniform-brex-spending-limit -> origin/uniform-brex-spending-limit
3224:  * [new branch]            untx-software               -> origin/untx-software
3225:  * [new branch]            upcoming-activities-mdm-commands -> origin/upcoming-activities-mdm-commands
3226:  * [new branch]            upcoming-commands           -> origin/upcoming-commands
3227:  * [new branch]            update-1password-and-safari-policy-versions-2601200025 -> origin/update-1password-and-safari-policy-versions-2601200025
3228:  * [new branch]            update-1password-and-safari-policy-versions-2601200610 -> origin/update-1password-and-safari-policy-versions-2601200610
3229:  * [new branch]            update-1password-and-safari-policy-versions-2602261818 -> origin/update-1password-and-safari-policy-versions-2602261818
3230:  * [new branch]            update-1password-and-safari-policy-versions-2603101819 -> origin/update-1password-and-safari-policy-versions-2603101819
3231:  * [new branch]            update-1password-and-safari-policy-versions-2604080037 -> origin/update-1password-and-safari-policy-versions-2604080037
3232:  * [new branch]            update-1password-and-safari-policy-versions-2604080637 -> origin/update-1password-and-safari-policy-versions-2604080637
3233:  * [new branch]            update-Cloudflare-WARP-FMA-with-UpgradeCode -> origin/update-Cloudflare-WARP-FMA-with-UpgradeCode
3234:  * [new branch]            update-android-mdm-doc      -> origin/update-android-mdm-doc
3235:  * [new branch]            update-article-format       -> origin/update-article-format
3236:  * [new branch]            update-bug-report-template  -> origin/update-bug-report-template
3237:  * [new branch]            update-build-instructions   -> origin/update-build-instructions
3238:  * [new branch]            update-build-script-error-message -> origin/update-build-script-error-message
3239:  * [new branch]            update-cancel-and-done-links -> origin/update-cancel-and-done-links
...

3315:  * [new branch]            update-santa-rules-chrome   -> origin/update-santa-rules-chrome
3316:  * [new branch]            update-solutions-folder     -> origin/update-solutions-folder
3317:  * [new branch]            update-testing-qa-apps-2511191525 -> origin/update-testing-qa-apps-2511191525
3318:  * [new branch]            update-tuf-keys             -> origin/update-tuf-keys
3319:  * [new branch]            update-tuf-md               -> origin/update-tuf-md
3320:  * [new branch]            update-usage-statistics-mobile-devices -> origin/update-usage-statistics-mobile-devices
3321:  * [new branch]            update-user-password-length-validation-test -> origin/update-user-password-length-validation-test
3322:  * [new branch]            update-vex-statements       -> origin/update-vex-statements
3323:  * [new branch]            update-why-this-way         -> origin/update-why-this-way
3324:  * [new branch]            upgrade-eslint              -> origin/upgrade-eslint
3325:  * [new branch]            upgrade-go                  -> origin/upgrade-go
3326:  * [new branch]            upgrade-typescript          -> origin/upgrade-typescript
3327:  * [new branch]            upload-msiexec-install-log  -> origin/upload-msiexec-install-log
3328:  * [new branch]            usage-stats-mobile-devices-count -> origin/usage-stats-mobile-devices-count
3329:  * [new branch]            use-dockerhub-creds         -> origin/use-dockerhub-creds
3330:  * [new branch]            user-channel-error          -> origin/user-channel-error
3331:  * [new branch]            users-table-experiment      -> origin/users-table-experiment
...

3471:  * [new branch]            website-update-vulnerability-dashboard-dri -> origin/website-update-vulnerability-dashboard-dri
3472:  * [new branch]            website-upgrade-mermaid     -> origin/website-upgrade-mermaid
3473:  * [new branch]            website-usage-statistics-patch -> origin/website-usage-statistics-patch
3474:  * [new branch]            website-validate-fleet-versions -> origin/website-validate-fleet-versions
3475:  * [new branch]            wesite-fix-sales-rituals    -> origin/wesite-fix-sales-rituals
3476:  * [new branch]            willmayhone88-patch-1       -> origin/willmayhone88-patch-1
3477:  * [new branch]            win-fma-goland              -> origin/win-fma-goland
3478:  * [new branch]            win-fma-testing             -> origin/win-fma-testing
3479:  * [new branch]            win-mdm-loadtest            -> origin/win-mdm-loadtest
3480:  * [new branch]            windows-baseline            -> origin/windows-baseline
3481:  * [new branch]            windows-firefox-doh-script  -> origin/windows-firefox-doh-script
3482:  * [new branch]            windows-mdm-autopilot       -> origin/windows-mdm-autopilot
3483:  * [new branch]            windows-mdm-c-poc           -> origin/windows-mdm-c-poc
3484:  * [new branch]            windows-mdm-docs-auto-enroll -> origin/windows-mdm-docs-auto-enroll
3485:  * [new branch]            windows-mdm-load-test       -> origin/windows-mdm-load-test
3486:  * [new branch]            windows_enable_and_configure-error-message -> origin/windows_enable_and_configure-error-message
3487:  * [new branch]            workstations-to-use-edge-channels -> origin/workstations-to-use-edge-channels
...

3497:  * [new branch]            zayhanlon-patch-1           -> origin/zayhanlon-patch-1
3498:  * [new branch]            zenity-execuser             -> origin/zenity-execuser
3499:  * [new branch]            zhumo-patch-1               -> origin/zhumo-patch-1
3500:  * [new branch]            zhumo-patch-2               -> origin/zhumo-patch-2
3501:  * [new branch]            zhumo-patch-3               -> origin/zhumo-patch-3
3502:  * [new branch]            zhumo-patch-4               -> origin/zhumo-patch-4
3503:  * [new branch]            zhumo-patch-5               -> origin/zhumo-patch-5
3504:  * [new branch]            zhumo-patch-6               -> origin/zhumo-patch-6
3505:  * [new branch]            zhumo-patch-7               -> origin/zhumo-patch-7
3506:  * [new branch]            zwass-actions-reminders     -> origin/zwass-actions-reminders
3507:  * [new branch]            zwass-improve-macos-cpe     -> origin/zwass-improve-macos-cpe
3508:  * [new branch]            zwass-patch-1               -> origin/zwass-patch-1
3509:  * [new branch]            zwass-patch-2               -> origin/zwass-patch-2
3510:  * [new branch]            zwinnerman-fixup            -> origin/zwinnerman-fixup
3511:  * [new branch]            zwinnerman-livequery-tracing -> origin/zwinnerman-livequery-tracing
3512:  * [new branch]            zwinnerman-redis-error-handling -> origin/zwinnerman-redis-error-handling
3513:  * [new branch]            zwinnerman-test             -> origin/zwinnerman-test
...

4211:  ##[group]Run actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417
4212:  with:
4213:  go-version-file: fleet/go.mod
4214:  check-latest: false
4215:  token: ***
4216:  cache: true
4217:  env:
4218:  GH_TOKEN: ***
4219:  LOG_LEVEL: info
4220:  ##[endgroup]
4221:  Setup go version spec 1.26.3
4222:  Attempting to download 1.26.3...
4223:  matching 1.26.3...
4224:  Acquiring 1.26.3 from https://github.com/actions/go-versions/releases/download/1.26.3-25533533231/go-1.26.3-win32-x64.zip
4225:  Extracting Go...
4226:  [command]"C:\Program Files\PowerShell\7\pwsh.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command "$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ; try { [System.IO.Compression.ZipFile]::ExtractToDirectory('D:\a\_temp\go-1.26.3-win32-x64.zip', 'D:\a\_temp\688ae697-70e5-4aa3-90b7-f1db00a757f3', $true) } catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath 'D:\a\_temp\go-1.26.3-win32-x64.zip' -DestinationPath 'D:\a\_temp\688ae697-70e5-4aa3-90b7-f1db00a757f3' -Force } else { throw $_ } } ;"
4227:  Successfully extracted go to D:\a\_temp\688ae697-70e5-4aa3-90b7-f1db00a757f3
4228:  Adding to the cache ...
4229:  Created link C:\hostedtoolcache\windows\go\1.26.3\x64 => D:\hostedtoolcache\windows\go\1.26.3\x64
4230:  Created link C:\hostedtoolcache\windows\go\1.26.3\x64.complete => D:\hostedtoolcache\windows\go\1.26.3\x64.complete
4231:  Successfully cached go to C:\hostedtoolcache\windows\go\1.26.3\x64
4232:  Added go to the path
4233:  Successfully set up Go version 1.26.3
4234:  [command]C:\hostedtoolcache\windows\go\1.26.3\x64\bin\go.exe env GOCACHE
4235:  [command]C:\hostedtoolcache\windows\go\1.26.3\x64\bin\go.exe env GOMODCACHE
4236:  C:\Users\runneradmin\AppData\Local\go-build
4237:  C:\Users\runneradmin\go\pkg\mod
4238:  ##[warning]Restore cache failed: Dependencies file is not found in D:\a\fleet\fleet. Supported file pattern: go.mod
4239:  go version go1.26.3 windows/amd64
...

4323:  Comparing HEAD with origin/main...
4324:  Fetching base branch apps.json from b74f526c75d975b800e3bea18a1dbc188cf2def5...
4325:  Detected changed apps:
4326:  - arc/darwin
4327:  - brave-browser/darwin
4328:  - camtasia/darwin
4329:  - canva/windows
4330:  - claude/darwin
4331:  - dialpad/darwin
4332:  - grammarly-desktop/darwin
4333:  - granola/darwin
4334:  - granola/windows
4335:  - notepad++/windows
4336:  - parallels/darwin
4337:  - power-bi/windows
4338:  ##[group]Run # Default to no changes if detection step failed or didn't set output
4339:  �[36;1m# Default to no changes if detection step failed or didn't set output�[0m
4340:  �[36;1m$hasChanges = "true"�[0m
...

4451:  �[36;1m$changedAppsJson = '["arc/darwin","brave-browser/darwin","camtasia/darwin","canva/windows","claude/darwin","dialpad/darwin","grammarly-desktop/darwin","granola/darwin","granola/windows","notepad++/windows","parallels/darwin","power-bi/windows"]'�[0m
4452:  �[36;1m$windowsSlugs = ($changedAppsJson | ConvertFrom-Json | Where-Object { $_ -like "*/windows" })�[0m
4453:  �[36;1m$windowsSlugsJson = ($windowsSlugs | ConvertTo-Json -Compress)�[0m
4454:  �[36;1mWrite-Host "Filtering apps.json for slugs: $windowsSlugsJson"�[0m
4455:  �[36;1m�[0m
4456:  �[36;1m# Backup original apps.json�[0m
4457:  �[36;1mCopy-Item -Path "ee\maintained-apps\outputs\apps.json" -Destination "ee\maintained-apps\outputs\apps.json.backup"�[0m
4458:  �[36;1m�[0m
4459:  �[36;1m# Create filtered apps.json�[0m
4460:  �[36;1m# Use a fixed path for the temp file to avoid issues with bash�[0m
4461:  �[36;1m$filteredAppsJson = Join-Path $env:TEMP "filtered-apps-$(New-Guid).json"�[0m
4462:  �[36;1mbash .github/scripts/filter-apps-json.sh "$windowsSlugsJson" "$filteredAppsJson"�[0m
4463:  �[36;1m�[0m
4464:  �[36;1m# Verify the filtered file was created�[0m
4465:  �[36;1mif (-not (Test-Path $filteredAppsJson)) {�[0m
4466:  �[36;1m  Write-Host "Error: Filtered apps.json was not created at $filteredAppsJson"�[0m
4467:  �[36;1m  exit 1�[0m
...

4565:  go: downloading github.com/getsentry/sentry-go v0.18.0
4566:  go: downloading go.elastic.co/apm/v2 v2.7.0
4567:  go: downloading go.opentelemetry.io/otel v1.43.0
4568:  go: downloading go.opentelemetry.io/otel/metric v1.43.0
4569:  go: downloading go.opentelemetry.io/otel/trace v1.43.0
4570:  go: downloading github.com/mattn/go-colorable v0.1.13
4571:  go: downloading github.com/edsrzf/mmap-go v1.1.0
4572:  go: downloading github.com/secDre4mer/pkcs7 v0.0.0-20240322103146-665324a4461d
4573:  go: downloading github.com/aws/aws-sdk-go-v2/config v1.32.12
4574:  go: downloading github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.8
4575:  go: downloading github.com/aws/aws-sdk-go-v2 v1.41.5
4576:  go: downloading github.com/spf13/cobra v1.9.1
4577:  go: downloading github.com/spf13/viper v1.20.1
4578:  go: downloading github.com/go-kit/kit v0.12.0
4579:  go: downloading github.com/smallstep/pkcs7 v0.0.0-20240723090913-5e2c6a136dfa
4580:  go: downloading github.com/hashicorp/go-multierror v1.1.1
4581:  go: downloading github.com/micromdm/plist v0.2.3-0.20260123201933-667adaf87d87
4582:  go: downloading github.com/MicahParks/jwkset v0.11.0
4583:  go: downloading github.com/golang-jwt/jwt/v4 v4.5.2
4584:  go: downloading github.com/WatchBeam/clock v0.0.0-20170901150240-b08e6b4da7ea
4585:  go: downloading github.com/mattn/go-isatty v0.0.20
4586:  go: downloading github.com/andygrunwald/go-jira v1.16.0
4587:  go: downloading github.com/cenkalti/backoff/v4 v4.3.0
4588:  go: downloading github.com/nukosuke/go-zendesk v0.13.1
4589:  go: downloading github.com/cenkalti/backoff v2.2.1+incompatible
4590:  go: downloading github.com/igm/sockjs-go/v3 v3.0.2
4591:  go: downloading gopkg.in/yaml.v2 v2.4.0
4592:  go: downloading github.com/oschwald/maxminddb-golang v1.10.0
4593:  go: downloading github.com/felixge/httpsnoop v1.0.4
4594:  go: downloading github.com/elastic/go-sysinfo v1.11.2
4595:  go: downloading github.com/pkg/errors v0.9.1
4596:  go: downloading go.elastic.co/fastjson v1.1.0
...

4648:  go: downloading github.com/subosito/gotenv v1.6.0
4649:  go: downloading github.com/pelletier/go-toml/v2 v2.2.3
4650:  go: downloading gopkg.in/yaml.v3 v3.0.1
4651:  go: downloading github.com/groob/finalizer v0.0.0-20170707115354-4c2ed49aabda
4652:  go: downloading github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8
4653:  go: downloading cloud.google.com/go/iam v1.5.3
4654:  go: downloading go.opencensus.io v0.24.0
4655:  go: downloading golang.org/x/sync v0.20.0
4656:  go: downloading google.golang.org/grpc v1.79.3
4657:  go: downloading google.golang.org/protobuf v1.36.11
4658:  go: downloading github.com/micromdm/nanolib v0.2.0
4659:  go: downloading github.com/nats-io/nkeys v0.4.15
4660:  go: downloading github.com/nats-io/nuid v1.0.1
4661:  go: downloading github.com/go-logfmt/logfmt v0.5.1
4662:  go: downloading go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352
4663:  go: downloading github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901
4664:  go: downloading github.com/elastic/go-windows v1.0.1
...

4674:  go: downloading go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0
4675:  time=level=INFO msg="GOOS environment variable is not set. Using system detected: 'windows'"
4676:  time=level=INFO msg="INSTALLATION_SEARCH_DIRECTORY environment variable is not set. Using default: 'C:\\Program Files'"
4677:  time=level=INFO msg="Validating app: Canva (canva/windows)"
4678:  time=level=INFO msg=Downloading...
4679:  time=level=INFO msg="Executing install script..." app=Canva
4680:  time=level=WARN msg="no changes detected in C:\\Program Files directory after running application script." app=Canva
4681:  time=level=INFO msg="Looking for app: Canva, version: 1.122.0" app=Canva
4682:  time=level=INFO msg="Found app: 'Canva' at , Version: 1.122.0" app=Canva
4683:  time=level=INFO msg="Executing uninstall script for app..." app=Canva
4684:  time=level=INFO msg="Looking for app: Canva, version: 1.122.0" app=Canva
4685:  time=level=INFO msg="All checks passed for app: Canva (canva/windows)"
4686:  time=level=INFO msg="Validating app: Granola (granola/windows)"
4687:  time=level=INFO msg=Downloading...
4688:  time=level=INFO msg="Executing install script..." app=Granola
4689:  time=level=ERROR msg="Error executing install script: exit status 0xc0000005" app=Granola
4690:  time=level=ERROR msg="Output: \n--------------------\nInstall exit code: -1073741819\n\n--------------------" app=Granola
4691:  time=level=WARN msg="no changes detected in C:\\Program Files directory after running application script." app=Granola
4692:  time=level=INFO msg="Validating app: Notepad++ (notepad++/windows)"
4693:  time=level=INFO msg=Downloading...
4694:  time=level=INFO msg="Executing install script..." app=Notepad++
4695:  time=level=INFO msg="New application detected at: C:\\Program Files\\Notepad++" app=Notepad++
4696:  time=level=INFO msg="Looking for app: Notepad++, version: 8.9.6" app=Notepad++
4697:  time=level=INFO msg="Found app: 'Notepad++ (64-bit x64)' at , Version: 8.9.6" app=Notepad++
4698:  time=level=INFO msg="Executing uninstall script for app..." app=Notepad++
4699:  time=level=INFO msg="Looking for app: Notepad++, version: 8.9.6" app=Notepad++
4700:  time=level=INFO msg="All checks passed for app: Notepad++ (notepad++/windows)"
4701:  time=level=INFO msg="Validating app: Power BI (power-bi/windows)"
4702:  time=level=INFO msg=Downloading...
4703:  time=level=INFO msg="Executing install script..." app="Power BI"
4704:  time=level=ERROR msg="Error executing install script: exit status 1" app="Power BI"
4705:  time=level=ERROR msg="Output: \n--------------------\n\n--------------------" app="Power BI"
4706:  time=level=INFO msg="New application detected at: C:\\Program Files\\Microsoft Power BI Desktop" app="Power BI"
4707:  time=level=WARN msg="failed to remove PBIDesktopSetup_x64.exe: unlinkat C:\\Users\\runneradmin\\AppData\\Local\\Temp\\fma-validate-2812197881\\PBIDesktopSetup_x64.exe: Access is denied."
4708:  time=level=WARN msg="Some apps were validated with warnings: [Canva]"
4709:  time=level=INFO msg="Validated 2 out of 4 apps successfully."
4710:  time=level=INFO msg="Apps with errors: [Granola Power BI]"
4711:  time=level=ERROR msg="warning failed to remove temporary directory: unlinkat C:\\Users\\runneradmin\\AppData\\Local\\Temp\\fma-validate-2812197881\\PBIDesktopSetup_x64.exe: Access is denied."
4712:  exit status 1
4713:  ##[error]Process completed with exit code 1.
4714:  Post job cleanup.

@github-actions

Copy link
Copy Markdown
Contributor

Closing in favor of #46394.

@github-actions github-actions Bot closed this May 28, 2026
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.

2 participants