feat(now-policy-api): add package operation cancelation support - #88
Merged
Vladyslav Nikonov (vnikonov-devolutions) merged 4 commits intoAug 5, 2026
Merged
Conversation
Copilot started reviewing on behalf of
Vladyslav Nikonov (vnikonov-devolutions)
August 4, 2026 14:45
View session
There was a problem hiding this comment.
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.
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>
Vladyslav Nikonov (vnikonov-devolutions)
force-pushed
the
broker-operation-cancel
branch
from
August 4, 2026 20:13
04040f0 to
4ebaa22
Compare
…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>
Marc-André Moreau (mamoreau-devolutions)
approved these changes
Aug 4, 2026
Vladyslav Nikonov (vnikonov-devolutions)
merged commit Aug 5, 2026
d8ba0f8
into
master
9 checks passed
Vladyslav Nikonov (vnikonov-devolutions)
deleted the
broker-operation-cancel
branch
August 5, 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.
Adds a
POST /v1/package-operations/cancelendpoint to the package broker API so clients can cancel in-flight package operations.Changes
now-policy-api): newcancelendpoint withCancelRequest/CancelResponsemodels, plus newCancelingandCanceledoperation statuses.Devolutions.Now.Policy.Api/.Client): mirroredCancelRequest/CancelResponsemodels and statuses;BrokerClientgains aCancelmethod, andExecuteAndWaitnow treatsCanceledas 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.