Add macOS Fleet-maintained apps (N) - #47537
Conversation
Adds 25 Fleet-maintained app(s) whose cask token starts with 'N': inputs, outputs, app icons (TSX + website PNG), and the matching index.ts and apps.json entries. Split out from #47121.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #47537 +/- ##
==========================================
- Coverage 67.18% 67.18% -0.01%
==========================================
Files 3548 3616 +68
Lines 228890 229077 +187
Branches 11909 11928 +19
==========================================
+ Hits 153782 153900 +118
- Misses 61263 61333 +70
+ Partials 13845 13844 -1
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:
|
Delete Native Access maintained-app metadata and UI icon. Removed ee/maintained-apps/inputs/homebrew/native-access.json and ee/maintained-apps/outputs/native-access/darwin.json (including installer/uninstaller script refs), removed the Native Access entry from ee/maintained-apps/outputs/apps.json, and removed the frontend NativeAccess.tsx icon component and its export from the icons index.
There was a problem hiding this comment.
Pull request overview
This PR expands Fleet’s Fleet-maintained apps catalog for macOS (Homebrew casks starting with “N”) by adding the corresponding maintained-app input metadata, generated output manifests (including install/uninstall scripts), and frontend Software page icons + icon mapping entries.
Changes:
- Added new macOS Fleet-maintained app input definitions under
ee/maintained-apps/inputs/homebrew/and generated output manifests underee/maintained-apps/outputs/. - Added new Software page icon components and wired them into
SOFTWARE_NAME_TO_ICON_MAP. - Appended the new apps to
ee/maintained-apps/outputs/apps.jsonfor catalog discovery.
Reviewed changes
Copilot reviewed 74 out of 99 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| frontend/pages/SoftwarePage/components/icons/Numi.tsx | Adds the Numi icon component (embedded base64 PNG in SVG). |
| frontend/pages/SoftwarePage/components/icons/NounProject.tsx | Adds the Noun Project icon component. |
| frontend/pages/SoftwarePage/components/icons/Notesollama.tsx | Adds the NotesOllama icon component. |
| frontend/pages/SoftwarePage/components/icons/Notesnook.tsx | Adds the Notesnook icon component. |
| frontend/pages/SoftwarePage/components/icons/Nordlayer.tsx | Adds the NordLayer icon component. |
| frontend/pages/SoftwarePage/components/icons/Netiquette.tsx | Adds the Netiquette icon component. |
| frontend/pages/SoftwarePage/components/icons/index.ts | Imports new icons and maps new software names to those icons. |
| ee/maintained-apps/outputs/nvidia-geforce-now/darwin.json | New generated manifest + scripts for NVIDIA GeForce NOW (macOS). |
| ee/maintained-apps/outputs/numi/darwin.json | New generated manifest + scripts for Numi (macOS). |
| ee/maintained-apps/outputs/nucleo/darwin.json | New generated manifest + scripts for Nucleo (macOS). |
| ee/maintained-apps/outputs/novabench/darwin.json | New generated manifest + scripts for Novabench (macOS). |
| ee/maintained-apps/outputs/noun-project/darwin.json | New generated manifest + scripts for Noun Project (macOS). |
| ee/maintained-apps/outputs/notesollama/darwin.json | New generated manifest + scripts for NotesOllama (macOS). |
| ee/maintained-apps/outputs/notesnook/darwin.json | New generated manifest + scripts for Notesnook (macOS). |
| ee/maintained-apps/outputs/notepadexe/darwin.json | New generated manifest + scripts for Notepad.exe (macOS). |
| ee/maintained-apps/outputs/notchnook/darwin.json | New generated manifest + scripts for NotchNook (macOS). |
| ee/maintained-apps/outputs/nosql-workbench/darwin.json | New generated manifest + scripts for NoSQL Workbench (macOS). |
| ee/maintained-apps/outputs/nordlayer/darwin.json | New generated manifest + scripts for NordLayer (macOS). |
| ee/maintained-apps/outputs/nocturnal/darwin.json | New generated manifest + scripts for Nocturnal (macOS). |
| ee/maintained-apps/outputs/nitro-pdf-pro/darwin.json | New generated manifest + scripts for Nitro PDF Pro (macOS). |
| ee/maintained-apps/outputs/nightfall/darwin.json | New generated manifest + scripts for Nightfall (macOS). |
| ee/maintained-apps/outputs/nextcloud-talk/darwin.json | New generated manifest + scripts for Nextcloud Talk Desktop (macOS). |
| ee/maintained-apps/outputs/netspot/darwin.json | New generated manifest + scripts for NetSpot (macOS). |
| ee/maintained-apps/outputs/netron/darwin.json | New generated manifest + scripts for Netron (macOS). |
| ee/maintained-apps/outputs/netnewswire/darwin.json | New generated manifest + scripts for NetNewsWire (macOS). |
| ee/maintained-apps/outputs/netiquette/darwin.json | New generated manifest + scripts for Netiquette (macOS). |
| ee/maintained-apps/outputs/neofinder/darwin.json | New generated manifest + scripts for NeoFinder (macOS). |
| ee/maintained-apps/outputs/ndi-tools/darwin.json | New generated manifest + scripts for NDI Tools (macOS). |
| ee/maintained-apps/outputs/naps2/darwin.json | New generated manifest + scripts for NAPS2 (macOS). |
| ee/maintained-apps/outputs/name-mangler/darwin.json | New generated manifest + scripts for Name Mangler (macOS). |
| ee/maintained-apps/outputs/nagstamon/darwin.json | New generated manifest + scripts for Nagstamon (macOS). |
| ee/maintained-apps/outputs/apps.json | Adds catalog entries for the new “N” macOS apps. |
| ee/maintained-apps/inputs/homebrew/nvidia-geforce-now.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/numi.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/nucleo.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/novabench.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/noun-project.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/notesollama.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/notesnook.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/notepadexe.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/notchnook.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/nosql-workbench.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/nordlayer.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/nocturnal.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/nitro-pdf-pro.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/nightfall.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/nextcloud-talk.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/netspot.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/netron.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/netnewswire.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/netiquette.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/neofinder.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/ndi-tools.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/naps2.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/name-mangler.json | New maintained-app input metadata. |
| ee/maintained-apps/inputs/homebrew/nagstamon.json | New maintained-app input metadata. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
WalkthroughThis PR adds 25 new macOS managed applications beginning with "N" to Fleet's maintained-apps catalog. It includes input metadata definitions for each app (name, unique identifier, token, installer format), generated macOS version manifests with embedded installation and uninstallation bash scripts, consolidated entries in the main apps registry, React icon components for the UI, and wiring of those components into the software page's icon registry mapping. Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 11
🤖 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/apps.json`:
- Around line 4373-4378: The description strings for two new app entries are
grammatically awkward; update the "NDI Tools" entry (name: "NDI Tools",
unique_identifier: "com.newtek.Application-Mac-NDI-ScanConverter", slug:
"ndi-tools/darwin") to a clearer user-facing sentence such as "NDI Tools is a
set of tools and plugins for NDI." and likewise find the second new app entry
around the other insertion (the app block at lines 4541-4546) and rewrite its
description to proper grammar/concise wording, replacing the current awkward
phrase with a corrected sentence.
In `@ee/maintained-apps/outputs/naps2/darwin.json`:
- Line 20: The remove_receipt_files function computes FULL_INSTALL_LOCATION but
the pkgutil --only-files pipeline still prefixes file paths with
"/${INSTALL_LOCATION}/" (and not ${FULL_INSTALL_LOCATION}), causing wrong paths;
update the two places inside remove_receipt_files where you run pkgutil
--only-files --files and pkgutil --only-dirs --files to prefix with
${FULL_INSTALL_LOCATION}/ (matching the echoed commands and the later use),
ensuring you use the same variable and normalize slashes the same way as
FULL_INSTALL_LOCATION was constructed (keep the sed replacement that collapses
// to /).
In `@ee/maintained-apps/outputs/ndi-tools/darwin.json`:
- Line 19: The script's remove_launchctl_service() always runs launchctl list
"${service}" unprivileged, so when should_sudo="true" the probe can miss system
daemons; change the probe to use the same privilege level as the removal attempt
— i.e. when should_sudo=="true" run sudo launchctl list "${service}" (and use
sudo launchctl remove for removal), and when should_sudo=="false" run the
unprivileged launchctl list/remove; update the logic in remove_launchctl_service
to perform the privileged probe before deciding to skip removal and to match
sudo usage for both list and remove operations.
In `@ee/maintained-apps/outputs/neofinder/darwin.json`:
- Line 19: The script currently renames the live app to a backup (sudo mv
\"$APPDIR/NeoFinder.app\" \"$TMPDIR/NeoFinder.app.bkp\") before attempting a
fallible staging/copy (unzip and sudo cp -R), which can leave the system without
a working app on failure; modify the install flow around the unzip/unpack and cp
steps so you stage the new bundle into TMPDIR first and only perform the mv swap
after the unzip/cp succeeds, or add guaranteed rollback on any failure by
restoring \"$TMPDIR/NeoFinder.app.bkp\" back to \"$APPDIR/NeoFinder.app\" in
every error path (ensure cleanup of the .bkp on success); update the logic
around unzip, the sudo cp -R command, and the swap step in the same script
(functions/variables involved: unzip, sudo cp -R, sudo mv, TMPDIR, APPDIR, and
the backup filename) to implement staging-first-or-restore-on-failure behavior.
In `@ee/maintained-apps/outputs/nextcloud-talk/darwin.json`:
- Line 20: The uninstall script assumes a GUI user exists; fix by
short-circuiting the trash logic when there is no non-root console user: check
the LOGGED_IN_USER value (from scutil) and if it's empty or equals "root" or
"loginwindow" then make trash a no-op (either return early inside the trash()
function or skip calling trash) so moves into /Users/$LOGGED_IN_USER/.Trash are
avoided; update the trash guard in the Nextcloud Talk darwin.json (trash
function / LOGGED_IN_USER usage) and apply the same console-user guard before
calling trash in the other listed darwin.json outputs (nightfall, nitro-pdf-pro,
nordlayer, nosql-workbench).
In `@ee/maintained-apps/outputs/nordlayer/darwin.json`:
- Around line 19-20: The quit helpers (quit_application and
quit_and_track_application) rely on pgrep -f "$bundle_id" which can misidentify
bundle identifiers; update both functions to poll osascript -e "application id
\"${bundle_id}\" is running" in the SECONDS loop and treat the app as exited
when that returns anything other than "true" (or when timeout occurs), replacing
the pgrep-based checks and preserving the existing timeout logic and messaging.
In `@ee/maintained-apps/outputs/notchnook/darwin.json`:
- Line 20: The installer lacks atomic update and fail-fast semantics: enable
strict error handling (e.g., set -euo pipefail) at the top of the script,
validate that the extracted bundle exists in $TMPDIR (check the NotchNook.app
path after unzip) before moving the current app, and change the install sequence
so you either copy the new bundle to a temporary location and only then move it
into place (or move the existing app to a .bkp only after a successful copy),
and on any copy failure restore the original backup; update the unzip/copy/move
logic around the unzip call and the sudo cp/mv steps and ensure error
propagation to avoid leaving the app removed (apply the same pattern to the
other installers that use this flow).
In `@ee/maintained-apps/outputs/notesollama/darwin.json`:
- Line 19: The quit_application call is using the app name instead of the bundle
identifier so osascript's "application id" check fails; update the invocation at
the end (quit_application 'NotesOllama') to pass the bundle identifier used
elsewhere (app.smallest.NotesOllama) so quit_application, its osascript checks
and pgrep-based running detection operate against the correct bundle id.
In `@ee/maintained-apps/outputs/noun-project/darwin.json`:
- Around line 9-13: The manifests for the noun-project and novabench outputs
currently disable integrity checks by setting the sha256 field to "no_check";
update each manifest entry by computing and pinning the actual SHA-256 digest of
the versioned installer referenced by installer_url (replace the "sha256":
"no_check" value with the computed hex SHA-256), ensure the checksum matches the
downloaded .dmg you will ship, and keep the installer_url and script refs
unchanged.
In `@ee/maintained-apps/outputs/nvidia-geforce-now/darwin.json`:
- Around line 9-13: The manifest currently disables installer integrity checks
by setting sha256: "no_check"; update the darwin.json for the NVIDIA GeForce Now
app to pin a concrete SHA-256 checksum for the installer located at
installer_url ("https://download.nvidia.com/gfnpc/GeForceNOW-release.dmg") —
download the referenced DMG (or obtain its immutable/versioned URL if
available), compute its SHA-256, replace "no_check" with that hash, and if
possible update installer_url to a versioned/immutable URL while keeping
install_script_ref and uninstall_script_ref unchanged.
- Line 19: The rmdir call uses single quotes so the tilde won't expand; change
the removal to use the resolved user home (use LOGGED_IN_USER or expand ~) so
the path becomes /Users/$LOGGED_IN_USER/Movies/NVIDIA (or otherwise expand the
tilde) — update the sudo rmdir '~/Movies/NVIDIA' line to construct the correct
path using LOGGED_IN_USER (or perform tilde expansion) to reliably remove the
intended directory; keep the surrounding sudo usage and error handling
consistent with other removal lines.
🪄 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: 9fea0075-1101-490e-8c79-1663e824550a
⛔ Files ignored due to path filters (25)
website/assets/images/app-icon-nagstamon-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-name-mangler-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-naps2-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-native-access-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-ndi-tools-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-neofinder-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-netiquette-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-netnewswire-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-netron-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-netspot-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-nextcloud-talk-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-nightfall-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-nitro-pdf-pro-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-nocturnal-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-nordlayer-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-nosql-workbench-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-notchnook-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-notepadexe-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-notesnook-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-notesollama-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-noun-project-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-novabench-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-nucleo-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-numi-60x60@2x.pngis excluded by!**/*.pngwebsite/assets/images/app-icon-nvidia-geforce-now-60x60@2x.pngis excluded by!**/*.png
📒 Files selected for processing (74)
ee/maintained-apps/inputs/homebrew/nagstamon.jsonee/maintained-apps/inputs/homebrew/name-mangler.jsonee/maintained-apps/inputs/homebrew/naps2.jsonee/maintained-apps/inputs/homebrew/ndi-tools.jsonee/maintained-apps/inputs/homebrew/neofinder.jsonee/maintained-apps/inputs/homebrew/netiquette.jsonee/maintained-apps/inputs/homebrew/netnewswire.jsonee/maintained-apps/inputs/homebrew/netron.jsonee/maintained-apps/inputs/homebrew/netspot.jsonee/maintained-apps/inputs/homebrew/nextcloud-talk.jsonee/maintained-apps/inputs/homebrew/nightfall.jsonee/maintained-apps/inputs/homebrew/nitro-pdf-pro.jsonee/maintained-apps/inputs/homebrew/nocturnal.jsonee/maintained-apps/inputs/homebrew/nordlayer.jsonee/maintained-apps/inputs/homebrew/nosql-workbench.jsonee/maintained-apps/inputs/homebrew/notchnook.jsonee/maintained-apps/inputs/homebrew/notepadexe.jsonee/maintained-apps/inputs/homebrew/notesnook.jsonee/maintained-apps/inputs/homebrew/notesollama.jsonee/maintained-apps/inputs/homebrew/noun-project.jsonee/maintained-apps/inputs/homebrew/novabench.jsonee/maintained-apps/inputs/homebrew/nucleo.jsonee/maintained-apps/inputs/homebrew/numi.jsonee/maintained-apps/inputs/homebrew/nvidia-geforce-now.jsonee/maintained-apps/outputs/apps.jsonee/maintained-apps/outputs/nagstamon/darwin.jsonee/maintained-apps/outputs/name-mangler/darwin.jsonee/maintained-apps/outputs/naps2/darwin.jsonee/maintained-apps/outputs/ndi-tools/darwin.jsonee/maintained-apps/outputs/neofinder/darwin.jsonee/maintained-apps/outputs/netiquette/darwin.jsonee/maintained-apps/outputs/netnewswire/darwin.jsonee/maintained-apps/outputs/netron/darwin.jsonee/maintained-apps/outputs/netspot/darwin.jsonee/maintained-apps/outputs/nextcloud-talk/darwin.jsonee/maintained-apps/outputs/nightfall/darwin.jsonee/maintained-apps/outputs/nitro-pdf-pro/darwin.jsonee/maintained-apps/outputs/nocturnal/darwin.jsonee/maintained-apps/outputs/nordlayer/darwin.jsonee/maintained-apps/outputs/nosql-workbench/darwin.jsonee/maintained-apps/outputs/notchnook/darwin.jsonee/maintained-apps/outputs/notepadexe/darwin.jsonee/maintained-apps/outputs/notesnook/darwin.jsonee/maintained-apps/outputs/notesollama/darwin.jsonee/maintained-apps/outputs/noun-project/darwin.jsonee/maintained-apps/outputs/novabench/darwin.jsonee/maintained-apps/outputs/nucleo/darwin.jsonee/maintained-apps/outputs/numi/darwin.jsonee/maintained-apps/outputs/nvidia-geforce-now/darwin.jsonfrontend/pages/SoftwarePage/components/icons/Nagstamon.tsxfrontend/pages/SoftwarePage/components/icons/NameMangler.tsxfrontend/pages/SoftwarePage/components/icons/Naps2.tsxfrontend/pages/SoftwarePage/components/icons/NdiTools.tsxfrontend/pages/SoftwarePage/components/icons/Neofinder.tsxfrontend/pages/SoftwarePage/components/icons/Netiquette.tsxfrontend/pages/SoftwarePage/components/icons/Netnewswire.tsxfrontend/pages/SoftwarePage/components/icons/Netron.tsxfrontend/pages/SoftwarePage/components/icons/Netspot.tsxfrontend/pages/SoftwarePage/components/icons/NextcloudTalk.tsxfrontend/pages/SoftwarePage/components/icons/Nightfall.tsxfrontend/pages/SoftwarePage/components/icons/NitroPdfPro.tsxfrontend/pages/SoftwarePage/components/icons/Nocturnal.tsxfrontend/pages/SoftwarePage/components/icons/Nordlayer.tsxfrontend/pages/SoftwarePage/components/icons/NosqlWorkbench.tsxfrontend/pages/SoftwarePage/components/icons/Notchnook.tsxfrontend/pages/SoftwarePage/components/icons/Notepadexe.tsxfrontend/pages/SoftwarePage/components/icons/Notesnook.tsxfrontend/pages/SoftwarePage/components/icons/Notesollama.tsxfrontend/pages/SoftwarePage/components/icons/NounProject.tsxfrontend/pages/SoftwarePage/components/icons/Novabench.tsxfrontend/pages/SoftwarePage/components/icons/Nucleo.tsxfrontend/pages/SoftwarePage/components/icons/Numi.tsxfrontend/pages/SoftwarePage/components/icons/NvidiaGeforceNow.tsxfrontend/pages/SoftwarePage/components/icons/index.ts
CI Feedback 🧐A test triggered by this PR failed. Here is an AI-generated analysis of the failure:
|
Adds 25 Fleet-maintained app(s) whose cask token starts with 'N': inputs, outputs, app icons (TSX + website PNG), and the matching index.ts and apps.json entries.
Summary by CodeRabbit