Unfreeze NVIDIA GeForce NOW (macOS) - #50392
Conversation
Remove "frozen": true and regenerate the output manifest so the FMA validation workflow can check nvidia-geforce-now/darwin at its current upstream version. Version: 2.0.85.133 -> 2.0.87.131
Script Diff Resultsee/maintained-apps/outputs/nvidia-geforce-now/darwin.json=== Install Script (no changes) ===
=== Uninstall // 289b999e -> 45470022 ===
--- /tmp/old.UKMDVY 2026-08-01 17:18:35.833735270 +0000
+++ /tmp/new.AjCWNl 2026-08-01 17:18:35.833735270 +0000
@@ -5,6 +5,45 @@
LOGGED_IN_USER=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
# functions
+send_signal() {
+ local signal="$1"
+ local bundle_id="$2"
+ local logged_in_user="$3"
+ local logged_in_uid pids
+
+ if [ -z "$signal" ] || [ -z "$bundle_id" ] || [ -z "$logged_in_user" ]; then
+ echo "Usage: uninstall_signal <signal> <bundle_id> <logged_in_user>"
+ return 1
+ fi
+
+ logged_in_uid=$(id -u "$logged_in_user")
+ if [ -z "$logged_in_uid" ]; then
+ echo "Could not find UID for user '$logged_in_user'."
+ return 1
+ fi
+
+ echo "Signalling '$signal' to application ID '$bundle_id' for user '$logged_in_user'"
+
+ pids=$(/bin/launchctl asuser "$logged_in_uid" sudo -iu "$logged_in_user" /bin/launchctl list | awk -v bundle_id="$bundle_id" '
+ $3 ~ bundle_id { print $1 }')
+
+ if [ -z "$pids" ]; then
+ echo "No processes found for bundle ID '$bundle_id'."
+ return 0
+ fi
+
+ echo "Unix PIDs are $pids for processes with bundle identifier $bundle_id"
+ for pid in $pids; do
+ if kill -s "$signal" "$pid" 2>/dev/null; then
+ echo "Successfully signaled PID $pid with signal $signal."
+ else
+ echo "Failed to kill PID $pid with signal $signal. Check permissions."
+ fi
+ done
+
+ sleep 3
+}
+
trash() {
local logged_in_user="$1"
local target_file="$2"
@@ -52,14 +91,20 @@
fi
}
+send_signal 'QUIT' 'com.nvidia.nvcontainer' "$LOGGED_IN_USER"
sudo rm -rf "$APPDIR/GeForceNOW.app"
+sudo rmdir '~/Library/Application Support/NVIDIA'
+sudo rmdir '~/Library/Caches/NVIDIA'
sudo rmdir '~/Movies/NVIDIA'
+trash $LOGGED_IN_USER '~/Library/Application Support/CrashReporter/GeForceNOWContainer_*.plist'
trash $LOGGED_IN_USER '~/Library/Application Support/NVIDIA Corporation/MessageBus_GFN_session*.conf'
trash $LOGGED_IN_USER '~/Library/Application Support/NVIDIA/GeForceNOW'
trash $LOGGED_IN_USER '~/Library/Caches/com.apple.nsurlsessiond/Downloads/com.nvidia.gfnpc.mall'
trash $LOGGED_IN_USER '~/Library/Caches/com.nvidia.nvcontainer'
trash $LOGGED_IN_USER '~/Library/Caches/NVIDIA/GeForceNOW'
trash $LOGGED_IN_USER '~/Library/HTTPStorages/com.nvidia.gfnpc.mall'
+trash $LOGGED_IN_USER '~/Library/Logs/DiagnosticReports/GeForceNOWContainer*.crash'
trash $LOGGED_IN_USER '~/Library/Preferences/com.nvidia.gfnpc.mall.helper.plist'
trash $LOGGED_IN_USER '~/Library/Preferences/com.nvidia.gfnpc.mall.helper.renderer.plist'
+trash $LOGGED_IN_USER '~/Library/Preferences/com.nvidia.nvcontainer.plist'
trash $LOGGED_IN_USER '~/Library/Saved Application State/com.nvidia.gfnpc.mall.savedState' |
There was a problem hiding this comment.
Pull request overview
Unfreezes the Fleet-maintained app entry for NVIDIA GeForce NOW on macOS by removing the input "frozen": true flag and updating the generated output manifest to the current upstream Homebrew cask version, so test-fma-darwin-pr-only can validate the slug again.
Changes:
- Removed the
"frozen": trueflag from the Homebrew input definition. - Bumped the output manifest version from
2.0.85.133to2.0.87.131(including thepatchedquery threshold). - Regenerated output manifest refs, updating
uninstall_script_refto a newer script template revision.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| ee/maintained-apps/outputs/nvidia-geforce-now/darwin.json | Updates the exported FMA manifest to the latest version and refreshes embedded install/uninstall script refs. |
| ee/maintained-apps/inputs/homebrew/nvidia-geforce-now.json | Removes the freeze flag to re-enable automated validation/updates for this slug. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| ], | ||
| "refs": { | ||
| "289b999e": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/GeForceNOW.app\"\nsudo rmdir '~/Movies/NVIDIA'\ntrash $LOGGED_IN_USER '~/Library/Application Support/NVIDIA Corporation/MessageBus_GFN_session*.conf'\ntrash $LOGGED_IN_USER '~/Library/Application Support/NVIDIA/GeForceNOW'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.nsurlsessiond/Downloads/com.nvidia.gfnpc.mall'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.nvidia.nvcontainer'\ntrash $LOGGED_IN_USER '~/Library/Caches/NVIDIA/GeForceNOW'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.nvidia.gfnpc.mall'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.nvidia.gfnpc.mall.helper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.nvidia.gfnpc.mall.helper.renderer.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.nvidia.gfnpc.mall.savedState'\n", | ||
| "45470022": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nsend_signal() {\n local signal=\"$1\"\n local bundle_id=\"$2\"\n local logged_in_user=\"$3\"\n local logged_in_uid pids\n\n if [ -z \"$signal\" ] || [ -z \"$bundle_id\" ] || [ -z \"$logged_in_user\" ]; then\n echo \"Usage: uninstall_signal <signal> <bundle_id> <logged_in_user>\"\n return 1\n fi\n\n logged_in_uid=$(id -u \"$logged_in_user\")\n if [ -z \"$logged_in_uid\" ]; then\n echo \"Could not find UID for user '$logged_in_user'.\"\n return 1\n fi\n\n echo \"Signalling '$signal' to application ID '$bundle_id' for user '$logged_in_user'\"\n\n pids=$(/bin/launchctl asuser \"$logged_in_uid\" sudo -iu \"$logged_in_user\" /bin/launchctl list | awk -v bundle_id=\"$bundle_id\" '\n $3 ~ bundle_id { print $1 }')\n\n if [ -z \"$pids\" ]; then\n echo \"No processes found for bundle ID '$bundle_id'.\"\n return 0\n fi\n\n echo \"Unix PIDs are $pids for processes with bundle identifier $bundle_id\"\n for pid in $pids; do\n if kill -s \"$signal\" \"$pid\" 2>/dev/null; then\n echo \"Successfully signaled PID $pid with signal $signal.\"\n else\n echo \"Failed to kill PID $pid with signal $signal. Check permissions.\"\n fi\n done\n\n sleep 3\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsend_signal 'QUIT' 'com.nvidia.nvcontainer' \"$LOGGED_IN_USER\"\nsudo rm -rf \"$APPDIR/GeForceNOW.app\"\nsudo rmdir '~/Library/Application Support/NVIDIA'\nsudo rmdir '~/Library/Caches/NVIDIA'\nsudo rmdir '~/Movies/NVIDIA'\ntrash $LOGGED_IN_USER '~/Library/Application Support/CrashReporter/GeForceNOWContainer_*.plist'\ntrash $LOGGED_IN_USER '~/Library/Application Support/NVIDIA Corporation/MessageBus_GFN_session*.conf'\ntrash $LOGGED_IN_USER '~/Library/Application Support/NVIDIA/GeForceNOW'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.nsurlsessiond/Downloads/com.nvidia.gfnpc.mall'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.nvidia.nvcontainer'\ntrash $LOGGED_IN_USER '~/Library/Caches/NVIDIA/GeForceNOW'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.nvidia.gfnpc.mall'\ntrash $LOGGED_IN_USER '~/Library/Logs/DiagnosticReports/GeForceNOWContainer*.crash'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.nvidia.gfnpc.mall.helper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.nvidia.gfnpc.mall.helper.renderer.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.nvidia.nvcontainer.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.nvidia.gfnpc.mall.savedState'\n", |
| ], | ||
| "refs": { | ||
| "289b999e": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/GeForceNOW.app\"\nsudo rmdir '~/Movies/NVIDIA'\ntrash $LOGGED_IN_USER '~/Library/Application Support/NVIDIA Corporation/MessageBus_GFN_session*.conf'\ntrash $LOGGED_IN_USER '~/Library/Application Support/NVIDIA/GeForceNOW'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.nsurlsessiond/Downloads/com.nvidia.gfnpc.mall'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.nvidia.nvcontainer'\ntrash $LOGGED_IN_USER '~/Library/Caches/NVIDIA/GeForceNOW'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.nvidia.gfnpc.mall'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.nvidia.gfnpc.mall.helper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.nvidia.gfnpc.mall.helper.renderer.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.nvidia.gfnpc.mall.savedState'\n", | ||
| "45470022": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nsend_signal() {\n local signal=\"$1\"\n local bundle_id=\"$2\"\n local logged_in_user=\"$3\"\n local logged_in_uid pids\n\n if [ -z \"$signal\" ] || [ -z \"$bundle_id\" ] || [ -z \"$logged_in_user\" ]; then\n echo \"Usage: uninstall_signal <signal> <bundle_id> <logged_in_user>\"\n return 1\n fi\n\n logged_in_uid=$(id -u \"$logged_in_user\")\n if [ -z \"$logged_in_uid\" ]; then\n echo \"Could not find UID for user '$logged_in_user'.\"\n return 1\n fi\n\n echo \"Signalling '$signal' to application ID '$bundle_id' for user '$logged_in_user'\"\n\n pids=$(/bin/launchctl asuser \"$logged_in_uid\" sudo -iu \"$logged_in_user\" /bin/launchctl list | awk -v bundle_id=\"$bundle_id\" '\n $3 ~ bundle_id { print $1 }')\n\n if [ -z \"$pids\" ]; then\n echo \"No processes found for bundle ID '$bundle_id'.\"\n return 0\n fi\n\n echo \"Unix PIDs are $pids for processes with bundle identifier $bundle_id\"\n for pid in $pids; do\n if kill -s \"$signal\" \"$pid\" 2>/dev/null; then\n echo \"Successfully signaled PID $pid with signal $signal.\"\n else\n echo \"Failed to kill PID $pid with signal $signal. Check permissions.\"\n fi\n done\n\n sleep 3\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsend_signal 'QUIT' 'com.nvidia.nvcontainer' \"$LOGGED_IN_USER\"\nsudo rm -rf \"$APPDIR/GeForceNOW.app\"\nsudo rmdir '~/Library/Application Support/NVIDIA'\nsudo rmdir '~/Library/Caches/NVIDIA'\nsudo rmdir '~/Movies/NVIDIA'\ntrash $LOGGED_IN_USER '~/Library/Application Support/CrashReporter/GeForceNOWContainer_*.plist'\ntrash $LOGGED_IN_USER '~/Library/Application Support/NVIDIA Corporation/MessageBus_GFN_session*.conf'\ntrash $LOGGED_IN_USER '~/Library/Application Support/NVIDIA/GeForceNOW'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.nsurlsessiond/Downloads/com.nvidia.gfnpc.mall'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.nvidia.nvcontainer'\ntrash $LOGGED_IN_USER '~/Library/Caches/NVIDIA/GeForceNOW'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.nvidia.gfnpc.mall'\ntrash $LOGGED_IN_USER '~/Library/Logs/DiagnosticReports/GeForceNOWContainer*.crash'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.nvidia.gfnpc.mall.helper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.nvidia.gfnpc.mall.helper.renderer.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.nvidia.nvcontainer.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.nvidia.gfnpc.mall.savedState'\n", |
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
WalkthroughThe NVIDIA GeForce NOW Homebrew definition no longer includes the Possibly related PRs
✨ 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 |
Automated unfreeze probe. Removes
"frozen": trueand regenerates the output manifest sotest-fma-darwin-pr-onlycan validatenvidia-geforce-now/darwinat its current upstream version.Frozen since: 2026-06-15 (#47645, automated FMA update run)
Version: 2.0.85.133 -> 2.0.87.131
Upstream Homebrew cask reports 2.0.87.131, which is newer than the pinned 2.0.85.133, so this is
a genuine forward bump rather than a regression.
Note: the regenerated manifest also picks up a newer
uninstall_script_ref, because the frozenoutput missed the script-template updates that landed on main while it was pinned.
Draft until validation reports. Merge only if the FMA checks are green and the validate shard
actually ran for this slug.
Related issue: NA
Checklist for submitter
Generated by Claude Code
Summary by CodeRabbit