Azure / Azure/azure-sdk-tools

Decouple release completion from symbol upload failures

Open
#16,786 0 comments 0 reactions 0 assignees View on GitHub
needs-triage
Dominant language
C#
Stars
135
Forks
260
Avg merge
3d 1h
Merged PRs (30d)
143

Description

## Background
In the azure-sdk-for-net release template `eng/pipelines/templates/stages/archetype-net-release.yml`, the `UploadSymbols` job runs after `PublishPackage`. The same job performs symbol upload first and then invokes `create-apireview.yml` with `MarkPackageAsShipped: true`, followed by `mark-release-completion.yml`.

## Problem
Symbol upload can time out or fail after the NuGet package has already been successfully published. Because API review shipping and release-plan completion are later steps in the same job, they never run. The package is publicly released while release tracking remains incomplete and requires manual repair/retry. This is an example failure run:
https://dev.azure.com/azure-sdk/internal/_build/results?buildId=6659241&view=logs&s=26d9c524-b70f-5d62-3bc4-23fffd3dd47b&j=8e387adc-a38e-55fa-3203-6fe8248ec245

## Proposal
Add a separate normal agent job after `PublishPackage` for release finalization, before `UploadSymbols`. Move `create-apireview.yml` and `mark-release-completion.yml` into it. The job should sparse-checkout repository scripts and download the unsigned package artifact containing `PackageInfo`. Have `UploadSymbols` run separately after finalization, or make finalization and symbols parallel dependencies of `PublishPackage` if symbol upload must not be blocked by finalization failures. State preferred sequence: PublishPackage -> FinalizeRelease -> UploadSymbols.

## Expected behavior
Once package publication succeeds, API review is marked shipped and release-plan completion is attempted independently of symbol upload reliability. Symbol failures remain visible and retryable but cannot leave an already-published package unmarked.

## Implementation considerations
Preserve existing skip variables/conditions; ensure FinalizeRelease only starts after successful PublishPackage; ensure source paths and PackageInfo artifact are available; remove moved steps and no-longer-needed unsigned artifact download from UploadSymbols if symbols do not use it.

Contributor guide

Open the contributing guide

Research direction

Start in eng/pipelines/templates/stages/archetype-net-release.yml and trace the existing PublishPackage, UploadSymbols, create-apireview.yml, and mark-release-completion.yml steps. Verify how the unsigned package and PackageInfo artifact are obtained, then confirm the pipeline preserves skip conditions and runs PublishPackage, FinalizeRelease, and UploadSymbols in the requested sequence; validate with a release pipeline run or its checks.

Written by the indexing model from the issue text.

Assessment

Tech stack
azure
Domain
build-system, devops, release
Issue type
Refactor
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
70/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.