feat: status updates during issuance process - #1264
Open
joostdebruijn wants to merge 1 commit into
Open
joostdebruijn wants to merge 1 commit into
joostdebruijn wants to merge 1 commit into
Conversation
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Cleanup and webhook statuses are misleading, and successful status deserialization needs test coverage.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Adds live certificate issuance and renewal progress updates across the orchestration API and UI.
Changes:
- Reports issuance stages through Durable Task custom status.
- Returns progress and failure-stage details from the operation endpoint.
- Updates frontend polling, overlays, mocks, and tests.
File summaries
| File | Description |
|---|---|
tests/Acmebot.App.Tests/GetOperationTests.cs |
Tests operation helpers, but lacks successful custom-status deserialization coverage. |
src/Acmebot.App/Models/CertificateIssuanceStatus.cs |
Defines the progress-status DTO. |
src/Acmebot.App/Functions/Orchestration/CertificateIssuanceOrchestrator.cs |
Publishes issuance progress; cleanup and webhook stages need accurate statuses. |
src/Acmebot.App/Functions/Http/GetOperation.cs |
Returns progress and enhanced failure details. |
src/Acmebot.App/ClientApp/src/App.vue |
Displays live progress in the operation overlay. |
src/Acmebot.App/ClientApp/src/api/types.ts |
Defines the client progress type. |
src/Acmebot.App/ClientApp/src/api/mockData.ts |
Simulates issuance progress. |
src/Acmebot.App/ClientApp/src/api/acmebotApi.ts |
Propagates polling updates through callbacks. |
Review details
- Files reviewed: 8/8 changed files
- Comments generated: 3
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
joostdebruijn
force-pushed
the
feat/status-update-for-issuance
branch
from
September 5, 2026 16:25
90de99b to
2a605e7
Compare
This branch has not been deployed
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
GET /api/operations/{instanceId}) previously returned a bare202 Acceptedwith no body, so the UI showed a static "Issuing certificate..." spinner for the whole duration with no indication of which step (order creation, DNS record setup, propagation wait, challenge verification, finalization, Key Vault merge, etc.) was running.CertificateIssuanceOrchestratornow reports its current step viacontext.SetCustomStatus(...)at each stage — the same mechanismCertificateRenewalSchedulerOrchestratoralready uses for the background renewal scheduler — andGetOperationsurfaces that status in the202response body while running, and folds the last known step into the error detail if the orchestration ends inFailed(e.g."...error... (failed during: Saving certificate to Key Vault...)").pollOperation) now takes an optional progress callback, wired up inApp.vueto update the operation overlay's message live instead of showing a fixed string for the whole operation.Changes
Models/CertificateIssuanceStatus.cs(new): DTO carryingcertificateName,step,message,updatedAt.CertificateIssuanceOrchestrator.cs: sets a custom status before each of the ~9 pipeline steps.GetOperation.cs: reads the custom status back and includes it in the202body; extractedBuildFailureDetail/ReadIssuanceStatusasinternal statichelpers so the new logic is unit-testable.api/types.ts,api/acmebotApi.ts,App.vue,api/mockData.ts: thread an optionalonProgresscallback throughissueCertificate/renewCertificate→pollOperation→ theOperationOverlaymessage, plus a matching simulation in the dev mocks.Test plan
dotnet build -c Release ./Acmebot.slnxdotnet format --verify-no-changes --no-restore ./Acmebot.slnxdotnet test ./Acmebot.slnx— 133/133 passing (4 new:GetOperationTests)bicep build ./deploy/azuredeploy.bicep(no infra changes in this PR, ran as part of validation)vue-tsc --noEmitandeslint .on the ClientApp