Add Mozilla VPN as a macOS and Windows FMA - #49284
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #49284 +/- ##
==========================================
- Coverage 67.97% 67.97% -0.01%
==========================================
Files 3801 3802 +1
Lines 239970 239972 +2
Branches 12809 12657 -152
==========================================
+ Hits 163128 163129 +1
- Misses 62058 62059 +1
Partials 14784 14784
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds Mozilla VPN to the maintained apps catalog and UI icon set so it can be detected/managed on macOS and Windows and displayed with the correct icon.
Changes:
- Added a new
MozillaVpnicon component and wired it into the software-name-to-icon map. - Added maintained-app definitions for Mozilla VPN (darwin/windows) including install/uninstall scripts and version detection queries.
- Registered Mozilla VPN entries in the aggregated
apps.jsonoutput and added source input descriptors (Homebrew/Winget).
Reviewed changes
Copilot reviewed 7 out of 8 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| frontend/pages/SoftwarePage/components/icons/index.ts | Registers the Mozilla VPN icon and maps the software name to the new icon component |
| frontend/pages/SoftwarePage/components/icons/MozillaVpn.tsx | Adds the Mozilla VPN icon component |
| ee/maintained-apps/outputs/mozilla-vpn/windows.json | Defines Windows detection queries, installer metadata, and scripts for Mozilla VPN |
| ee/maintained-apps/outputs/mozilla-vpn/darwin.json | Defines macOS detection queries, installer metadata, and scripts for Mozilla VPN |
| ee/maintained-apps/outputs/apps.json | Adds Mozilla VPN entries to the generated maintained apps catalog |
| ee/maintained-apps/inputs/winget/mozilla-vpn.json | Adds Winget input metadata for Mozilla VPN on Windows |
| ee/maintained-apps/inputs/homebrew/mozilla-vpn.json | Adds Homebrew input metadata for Mozilla VPN on macOS |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| <svg xmlns="http://www.w3.org/2000/svg" width={32} height={32} {...props}> | ||
| <image | ||
| width={32} | ||
| height={32} | ||
| href="data:image/png;base64,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" |
| const MozillaVpn = (props: SVGProps<SVGSVGElement>) => ( | ||
| <svg xmlns="http://www.w3.org/2000/svg" width={32} height={32} {...props}> | ||
| <image |
| ], | ||
| "refs": { | ||
| "500bade7": "# Fleet uninstalls app by finding all related product codes for the specified upgrade code\n$inst = New-Object -ComObject \"WindowsInstaller.Installer\"\n$timeoutSeconds = 300 # 5 minute timeout per product\n\n# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,\n# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.\n$successCodes = @(0, 3010, 1641)\n\nforeach ($product_code in $inst.RelatedProducts('{ABD1AA2B-11D7-4C4D-85EE-CC987D82A443}')) {\n $process = Start-Process msiexec -ArgumentList @(\"/quiet\", \"/x\", $product_code, \"/norestart\") -PassThru\n\n # Wait for process with timeout\n $completed = $process.WaitForExit($timeoutSeconds * 1000)\n\n if (-not $completed) {\n Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue\n Exit 1603 # ERROR_UNINSTALL_FAILURE\n }\n\n # If the uninstall failed, bail\n if ($successCodes -notcontains $process.ExitCode) {\n Write-Output \"Uninstall for $($product_code) exited $($process.ExitCode)\"\n Exit $process.ExitCode\n }\n}\n\n# All uninstalls succeeded; exit success\nExit 0\n", | ||
| "8959087b": "$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv ${logFile} /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n" |
| "exists": "SELECT 1 FROM programs WHERE name = 'Mozilla VPN' AND publisher = 'Mozilla Corporation';", | ||
| "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Mozilla VPN' AND publisher = 'Mozilla Corporation' AND version_compare(version, '2.38.0') < 0);" | ||
| }, |
| "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.mozilla.macos.FirefoxVPN';", | ||
| "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.mozilla.macos.FirefoxVPN' AND version_compare(bundle_short_version, '2.38.0') < 0);" | ||
| }, |
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (7)
WalkthroughAdded Mozilla VPN as a maintained macOS and Windows application with Homebrew and Winget metadata, version 2.38.0 platform manifests, detection rules, installer details, and install/uninstall scripts. Added a Mozilla VPN icon component and registered it in the Software page icon map. Possibly related PRs
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Related issue: Resolves #49149
Adds Mozilla VPN as a Fleet-maintained app for both macOS (Homebrew cask
mozilla-vpn) and Windows (wingetMozilla.VPN), version 2.38.0.Identity fields verified against the real installers (not catalog metadata):
unique_identifierorg.mozilla.macos.FirefoxVPN(CFBundleIdentifier from pkg PackageInfo)Mozilla VPN(MSIProductName)Mozilla Corporation(MSIManufacturer= winget locale, no override needed)pkgmsi(wingetwix, machine scope,ALLUSERS=1)2803d4b4…, Windows11a270b3…).ARPSYSTEMCOMPONENTabsent); pinned installer URLs; no risk flags.programs.versionas2.38.0.0vs the FMA's2.38.0;version_comparetreats a fresh install as ≥ target, so the patch policy reports patched correctly.MozillaVpn.tsx, website PNG,index.tsmap key"mozilla vpn"shared by both platforms).Checklist for submitter
Summary by CodeRabbit