Repository navigation
Support update-all and update-manager in headless sessions - #5609
Merged
Marc-André Moreau (mamoreau-devolutions) merged 2 commits intoOct 27, 2026
Merged
Marc-André Moreau (mamoreau-devolutions) merged 2 commits into
Marc-André Moreau (mamoreau-devolutions) merged 2 commits into
Conversation
Only the desktop window handled these commands, so a --headless session rejected them. The server now asks the host for the operations it queued and, without a window, queues the updates itself from the update list (so ignored updates, skipped minor updates and the minimum update age still apply). Both modes return the queued operation ids. The CLI gains --manager on update-all, plus --wait, --timeout and --delay, which poll the queued operations and exit with 1 if any did not succeed or the wait timed out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The E2E still expected both commands to fail headless. Run them with --wait true, scoped to the manifest's update-manager and update-all fixture managers, since an unscoped update-all would update whatever the runner image has installed. Also check that an unknown manager is rejected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Marc-André Moreau (mamoreau-devolutions)
merged commit Oct 27, 2026
1badf37
into
main
5 checks passed
Marc-André Moreau (mamoreau-devolutions)
deleted the
claude/headless-update-all-cli-71403d
branch
October 27, 2026 15:10
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
package update-allandpackage update-manageronly worked when the desktop window was open: the IPC server relied on the window'sOnUpgradeAll/OnUpgradeAllForManagerevents, so a--headlesssession answered "The current UniGetUI session cannot update all packages."IpcServer.UpdateAllHandler, which returns the operations it queued. The desktop app still queues updates through its window, so they show in its operations list.IpcPackageApi.QueueAllUpdatesAsync. It reads only the update loader's list, never the managers' raw lists, so ignored updates, skipped minor updates and the minimum update age still apply. Packages that already have an update queued or running are skipped.IpcPackageBulkOperationResultlisting the queued operation ids, whichoperation waitcan follow.update-allaccepts--manager, and both commands accept--wait true,--timeout(default 3600) and--delay. The wait runs in the CLI, which polls the operations list, so it isn't bound by the 5-minute request timeout. It exits with1if any update fails or the wait times out. Note that a failed singlepackage updatestill exits0; the non-zero exit is new and limited to--wait.--manageris now rejected with HTTP 400 instead of silently queueing nothing.docs/CLI.mdanddocs/IPC.mdare updated, including a new "Updating everything" section.Testing
dotnet teston the IPC tests: 56 passed, including 7 new ones inIpcBulkUpdateTests(CLI parsing, JSON source-gen round trip, queued result shape, wait result mapping).--headlessdaemon over TCP and ranpackage update-manager --manager bun(disabled there, so nothing could be installed) with and without--wait true:queuedCount: 0, exit code 0. An unknown manager returned a clear error with exit code 2. A realupdate-allwas not run, to avoid updating software on the test machine.dotnet format whitespace --verify-no-changespasses.dotnet format style --verify-no-changesreports only an existing IDE0060 inCargoManagedOperationRoutingTests.cs, which this PR doesn't touch.IpcJsonContext, and no reflection is added.🤖 Generated with Claude Code