Skip to content

Add durable queued Windows packaging - #6338

Draft
Judah Gabriel Himango (JudahGabriel) wants to merge 2 commits into
mainfrom
user/judahgabriel/windows-caller-attribution
Draft

Judah Gabriel Himango (JudahGabriel) wants to merge 2 commits into
mainfrom
user/judahgabriel/windows-caller-attribution

Conversation

@JudahGabriel

Copy link
Copy Markdown
Contributor

Related issue: N/A.

PR Type

  • Feature
  • Build or CI related changes
  • Documentation content changes

Describe the current behavior?

Windows packaging holds HTTP requests open while native tools build packages. Increased partner traffic needs durable acceptance, crash recovery, and bounded background processing without breaking existing PWABuilder clients.

Describe the new behavior?

Adds an opt-in asynchronous API alongside the unchanged /msix/generateZip endpoint:

  • POST /msix/enqueuePackageJob durably accepts packaging options and returns a job ID and polling location.
  • GET /msix/getPackageJob exposes safe job status; GET /msix/downloadPackageZip streams the completed ZIP.
  • Private Blob Storage holds inputs/artifacts, Cosmos stores job state and pending dispatch, and Azure Queue Storage carries job IDs. The outbox recovers dispatch failures; completion is persisted before queue acknowledgement.
  • Bounded workers renew ownership and queue visibility, retry interrupted work, and poison exhausted jobs. Attempt-specific artifacts and conditional writes fence stale workers. Cancellation propagates to owned native process trees.

Existing platform/correlation headers remain supported and are persisted with queued jobs. The README documents resource isolation, managed-identity permissions, retention, configuration, and scaling; CI now runs the Windows test project.

PR Checklist

  • Test: run npm run test and ensure that all tests pass. N/A for this C# service; the Release .NET suite passed all 87 tests.
  • Target main branch (or an appropriate release branch if appropriate for a bug fix)
  • Ensure that your contribution follows standard accessibility guidelines. Use tools like https://webhint.io/ to validate your changes. N/A: no UI changes.

Additional Information

Disabled by default. Provision separate production/nonproduction queues, private Blob storage, a dedicated Cosmos job container, and managed-identity permissions before setting WindowsPackageJobs.Enabled=true. No live Azure resources were changed.

Delivery is at-least-once: duplicate delivery is handled per job, but each POST creates a new job. Job IDs are bearer capabilities; caller headers are attribution, not authentication. Partner authentication and quotas belong at the gateway. Legacy synchronous calls do not share the worker concurrency limit.

Coverage includes crash/retry recovery, renewal/completion races, SDK storage contracts, HTTP routes, cancellation, and legacy compatibility. Live Azure and actual Windows SDK end-to-end packaging have not been exercised.

Add opt-in enqueue, polling and download APIs backed by Azure Queue Storage, Cosmos job records and private Blob artifacts. Run bounded workers with renewable ownership, crash recovery, retries and cancellable native builds while preserving synchronous packaging. Document deployment prerequisites and cover lifecycle, storage and compatibility behavior.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8bee4436-4da8-4f4b-9fed-48bfcc060cda
@microsoft-github-policy-service

Copy link
Copy Markdown
Contributor

Thanks Judah Gabriel Himango (@JudahGabriel) for opening a Pull Request! The reviewers will test the PR and highlight if there is any conflict or changes required. If the PR is approved we will proceed to merge the pull request 🙌

Separate members with blank lines and expand XML summaries and remarks to multiline blocks throughout the new Windows packaging code and tests. Preserve code and documentation content.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8bee4436-4da8-4f4b-9fed-48bfcc060cda
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants