Skip to content

feat(now-policy-api): add package operation cancelation support - #88

Merged
Vladyslav Nikonov (vnikonov-devolutions) merged 4 commits into
masterfrom
broker-operation-cancel
Aug 5, 2026
Merged

feat(now-policy-api): add package operation cancelation support#88
Vladyslav Nikonov (vnikonov-devolutions) merged 4 commits into
masterfrom
broker-operation-cancel

Conversation

@vnikonov-devolutions

@vnikonov-devolutions Vladyslav Nikonov (vnikonov-devolutions) commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Adds a POST /v1/package-operations/cancel endpoint to the package broker API so clients can cancel in-flight package operations.

Changes

  • OpenAPI / Rust (now-policy-api): new cancel endpoint with CancelRequest/CancelResponse models, plus new Canceling and Canceled operation statuses.
  • .NET (Devolutions.Now.Policy.Api / .Client): mirrored CancelRequest/CancelResponse models and statuses; BrokerClient gains a Cancel method, and ExecuteAndWait now treats Canceled as terminal and best-effort cancels the broker operation when its own cancellation token fires.
  • now-policy-server-template: mock server handles cancel requests; sample request/response documents added and round-trip tested.

Protocol/API/crate versions are intentionally left unchanged; they will be bumped as part of the release phase.

Counterpart of the Devolutions Agent broker change: Devolutions/devolutions-gateway#1905.

Copilot AI balanced review requested due to automatic review settings August 4, 2026 14:44

Copilot AI 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.

Pull request overview

Adds API v1.1 support for canceling in-flight package broker operations across Rust and .NET implementations.

Changes:

  • Adds cancel request/response models, endpoint routing, and operation statuses.
  • Adds .NET client cancellation and cancellation-aware polling.
  • Updates package versions, fixtures, OpenAPI, and tests.

Reviewed changes

Copilot reviewed 64 out of 65 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
policies/rust/now-policy-server-template/tests/sample_documents.rs Tests cancel fixtures and routing.
policies/rust/now-policy-server-template/src/server.rs Adds cancel endpoint and trait method.
policies/rust/now-policy-server-template/src/mock.rs Adds mock cancel responses.
policies/rust/now-policy-server-template/Cargo.toml Bumps crate and API dependency.
policies/rust/now-policy-server-template/assets/samples/responses/winget-vscode-skiphash.denied.response.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/responses/winget-vscode-install.allowed.response.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/responses/status-timeout.response.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/responses/status-starting.response.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/responses/status-running.response.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/responses/status-failed.response.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/responses/status-completed.response.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/responses/status-canceled.response.json Adds canceled-status fixture.
policies/rust/now-policy-server-template/assets/samples/responses/health-ready.response.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/responses/execution-winget-vscode-install.response.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/responses/capabilities.response.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/responses/cancel-accepted.response.json Adds cancel-response fixture.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-x86.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-winget-fonts.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-version-out-of-range.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-version-in-range.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-update-in-range.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-skiphash.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-prerelease.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-prepost.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-msstore.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-kill-before.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-interactive.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-install.request.yaml Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-install.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-vscode-custom-param.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-unknown-install.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-powertoys-install.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-git-uninstall.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-git-custom-param-denied.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-git-custom-param-allowed.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-git-custom-location-denied.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/winget-git-custom-location-allowed.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/status-query-completed.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/powershell-pester-version-out-of-range.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/powershell-pester-version-allowed.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/powershell-pester-update-currentuser.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/powershell-pester-skipcheck.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/powershell-pester-prerelease.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/powershell-pester-poshtestgallery.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/powershell-pester-currentuser.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/powershell-pester-allusers.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/missing-package-id.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/chocolatey-git-install.request.json Updates API version.
policies/rust/now-policy-server-template/assets/samples/requests/cancel-running.request.json Adds cancel-request fixture.
policies/rust/now-policy-api/src/lib.rs Exports cancellation API and v1.1 constants.
policies/rust/now-policy-api/src/enums.rs Adds cancellation statuses.
policies/rust/now-policy-api/src/cancel.rs Defines Rust cancellation models.
policies/rust/now-policy-api/openapi/now-policy-api.yaml Documents the cancellation contract.
policies/rust/now-policy-api/Cargo.toml Bumps API crate version.
policies/dotnet/Devolutions.Now.Policy.Client/README.md Documents client cancellation.
policies/dotnet/Devolutions.Now.Policy.Client/OperationCancelQuery.cs Adds client-facing cancel query.
policies/dotnet/Devolutions.Now.Policy.Client/BrokerClient.cs Implements cancel requests and cleanup.
policies/dotnet/Devolutions.Now.Policy.Client.Tests/TestData.cs Categorizes cancel fixtures.
policies/dotnet/Devolutions.Now.Policy.Client.Tests/DtoRoundTripTests.cs Tests cancel DTO round trips.
policies/dotnet/Devolutions.Now.Policy.Client.Tests/BrokerClientTests.cs Tests client cancellation behavior.
policies/dotnet/Devolutions.Now.Policy.Api/Enums.cs Adds cancellation statuses.
policies/dotnet/Devolutions.Now.Policy.Api/CancelModels.cs Defines .NET cancellation models.
policies/dotnet/Devolutions.Now.Policy.Api/BrokerJson.cs Registers cancel DTO serialization.
policies/dotnet/Devolutions.Now.Policy.Api/BrokerApi.cs Adds v1.1 cancellation constants.
Cargo.lock Records Rust crate version bumps.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread policies/dotnet/Devolutions.Now.Policy.Client/BrokerClient.cs Outdated
Adds a new POST /v1/package-operations/cancel endpoint to the package
broker API, with CancelRequest/CancelResponse models and new Canceling
and Canceled operation statuses (Rust and .NET). The .NET client gains
a Cancel method, and ExecuteAndWait treats Canceled as terminal and
best-effort cancels the broker operation when its own token fires.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…ling

TryCancelOperation now catches all exceptions, since a user-provided
IBrokerTransport can throw arbitrary exception types and cleanup must
never mask the caller's original OperationCanceledException.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@vnikonov-devolutions Vladyslav Nikonov (vnikonov-devolutions) changed the title feat(policies): add package operation cancelation support feat(pnow-policy-api): add package operation cancelation support Aug 4, 2026
@vnikonov-devolutions Vladyslav Nikonov (vnikonov-devolutions) changed the title feat(pnow-policy-api): add package operation cancelation support feat(now-policy-api): add package operation cancelation support Aug 5, 2026
@vnikonov-devolutions
Vladyslav Nikonov (vnikonov-devolutions) merged commit d8ba0f8 into master Aug 5, 2026
9 checks passed
@vnikonov-devolutions
Vladyslav Nikonov (vnikonov-devolutions) deleted the broker-operation-cancel branch August 5, 2026 15:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants