Repository navigation
Use ESRP14 for gated NuGet package distribution - #823
wangbill (YunchuWang) wants to merge 6 commits into
Conversation
Stage one exact public nuspec ID per ESRP submission, preserve internal feed staging and the manual/dependency gates, and require an explicit onboarded NuGet organization. Add run-scoped package exclusions and focused staging checks without changing SDK package payloads. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: c12fa023-523f-4bee-8664-769050035626
There was a problem hiding this comment.
🔵 Needs a closer look
Production publishing requires human validation of server-side template compatibility, service-connection authorization, and ESRP/NuGet onboarding.
1 open issue
What changed in this PR
Migrates the Durable Task SDK’s public NuGet publishing path to ESRP14 while retaining signed artifacts, internal feed staging, and manual approval.
Changes:
- Replaces 17 direct public push tasks with a shared template that stages packages by exact nuspec ID.
- Adds an explicit NuGet organization input and run-scoped package exclusions.
- Adds local staging tests and documents onboarding prerequisites and controlled-trial procedures.
| File | Description |
|---|---|
eng/publish/publish.yml |
Integrates ESRP submissions and exclusions; makes approval wait for internal staging. |
eng/publish/publish.Tests.ps1 |
Tests pipeline structure, package selection, unchanged copies, and staging failures. |
eng/publish/nuget-release-steps.yml |
Adds exact-ID staging and shared ESRP14 distribution settings. |
doc/release_process.md |
Documents release selection, prerequisites, trial exclusions, and local validation. |
Review effort: Balanced
Display the selected organization at the manual gate and require onboarding, publisher allowlisting and Trusted Publishing confirmation before public submission. Clarify automatic mirror filters versus separately authorized manual mirroring without changing mirror policy or invoking a workflow. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: c12fa023-523f-4bee-8664-769050035626
Use /eng/publish/nuget-release-steps.yml@self for all 17 public-package jobs so the nested steps resolve in the original repository when expanded by external 1ES templates. Add a regression demonstrated failing on the former relative references. Leave staging logic, gates, profile inputs and package bytes unchanged. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: c12fa023-523f-4bee-8664-769050035626
Clarify the verified REST string-map serialization for skipPackages and the narrow Edit queue build configuration action required for nondefault pinned inputs. Record actual-source compilation at261b and the pre-run TF215106 authorization blocker without changing runtime publisher defaults, helpers, tests or permissions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: c12fa023-523f-4bee-8664-769050035626
|
Varshitha Bachu (@bachuv) Queue-configuration permission unblock for the gated ESRP trial Could you route the narrow Azure DevOps authorization request in this PR's Notes for reviewers to an authorized The publisher source and explicit trial inputs server-compile; final public NuGet approval remains with Bill. No public submission has been approved or executed. Connection authorization and NuGet onboarding remain separate checks. The PR also documents the two hosted-CI failures in unchanged C# tests for maintainer triage; no assertions or timeouts have been weakened. |
Add alreadyPublishedPackages confirmations that emit only a logged successful no-op, without staging or ESRP submission. Keep skipPackages as intentional holds with precedence over confirmations so existing success, approval, failure and cancellation gates remain fail-closed. Preserve the 19-job graph, root-qualified templates and unchanged publishing branch. Add functional partial-recovery tests and update trial/operator guidance. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: c12fa023-523f-4bee-8664-769050035626
Remove the unneeded intentional-hold input and restore the original job success conditions. Keep confirmed-public no-ops, exact signed-package staging and the manual approval safeguard. Replace the local scheduler simulation with direct script tests and migration invariants, and remove trial history from the release guide. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: c12fa023-523f-4bee-8664-769050035626
| - name: alreadyPublishedPackages | ||
| displayName: Public package IDs whose selected versions are confirmed on NuGet.org (successful no-op) | ||
| type: object | ||
| default: [] |

Summary
What changed?
@self-qualified template. Preserve internal feed staging, the manual approval, per-package submissions and dependency order.nuGetOrganizationexplicit andalreadyPublishedPackagesempty by default. Confirmed-public versions complete a logged successful no-op without staging or ESRP submission; other packages are selected by exact nuspec ID and copied unchanged.Why is this change needed?
Issues / work items
Project checklist
release_notes.mdAI-assisted code disclosure (required)
Was an AI tool used? (select one)
If AI was used:
eng/publish/publish.yml,eng/publish/nuget-release-steps.yml,eng/publish/publish.Tests.ps1,doc/release_process.md.AI verification (required if AI was used):
Testing
Automated tests
Invoke-Pester -Path .\eng\publish\publish.Tests.ps1 -CI. Tests execute the actual staging/no-op scripts and check migration wiring; they do not simulate Azure's scheduler.git -c core.whitespace=trailing-space,space-before-tab,cr-at-eol diff --cached --check— passed.Manual validation (only if runtime/behavior changed)
Notes for reviewers