documentation/release-checklist.md
{{PREVIOUS_RELEASE_VERSION}} with the previous release version, for example 17.9{{THIS_RELEASE_VERSION}} with the current release version, for example 17.10{{NEXT_VERSION}} with the next release version, for example 17.11vs{{THIS_RELEASE_VERSION}} branchVS {{NEXT_VERSION}} if it doesn't already exist darc add-channel --name "VS {{NEXT_VERSION}}"Before starting the process:
vs{{THIS_RELEASE_VERSION}} and VS TargetBranch main.
ORvs{{THIS_RELEASE_VERSION}} to VS main. Keep scheduled daily insertions to simplify your workflow and exclude vs{{THIS_RELEASE_VERSION}} from triggering insertion on each commit.darc get-default-channels --channel "VS {{THIS_RELEASE_VERSION}}" --branch vs{{THIS_RELEASE_VERSION}} --source-repo https://github.com/dotnet/msbuild
(5997) https://github.com/dotnet/msbuild @ vs17.13 -> VS 17.13No matching channels were found.
vs{{THIS_RELEASE_VERSION}} branch with the next VS {{THIS_RELEASE_VERSION}} release channel darc add-default-channel --channel "VS {{THIS_RELEASE_VERSION}}" --branch vs{{THIS_RELEASE_VERSION}} --repo https://github.com/dotnet/msbuildvs{{THIS_RELEASE_VERSION}} branch git push upstream 2e6f2ff7ea311214255b6b2ca5cc0554fba1b345:refs/heads/vs17.10 main in a clean state, just branch off and you are done. The branch should point to a good, recent spot, so the final-branding PR goes in on top of the right set of commits.).config/git-merge-flow-config.jsonc file to have the currently-in-servicing branches.eng/Versions.props Update the VersionPrefix to {{NEXT_VERSION}} and PackageValidationBaselineVersion set to a latest internally available {{THIS_RELEASE_VERSION}} preview version in the internal dnceng dotnet-tools feed. It might be needed to update CompatibilitySuppressions.xml files. See this documentation for more details. You can update CompatibilitySuppressions.xml files by running
dotnet pack MSBuild.Dev.slnf /p:ApiCompatGenerateSuppressionFile=true.vs{{THIS_RELEASE_VERSION}} to the corresponding VS branch rel/d{{THIS_RELEASE_VERSION}}.
vs{{NEXT_VERSION}} -> rel/d{{NEXT_VERSION}} (preparation if we need to branch early and backport to previews)rel/d{{THIS_RELEASE_VERSION}} case to TargetBranch parameter in Experimental insertionvs{{THIS_RELEASE_VERSION}} triggering on each commit if added earlier.main to old release channel ({{THIS_RELEASE_VERSION}}) default channel darc delete-default-channel --repo https://github.com/dotnet/msbuild --branch main --channel "VS {{THIS_RELEASE_VERSION}}"main branch with the next release channel darc add-default-channel --channel "VS {{NEXT_VERSION}}" --branch main --repo https://github.com/dotnet/msbuilddarc add-default-channel --channel "VS {{NEXT_VERSION}}" --branch vs{{NEXT_VERSION}} --repo https://github.com/dotnet/msbuildVS {{NEXT_VERSION}} and update as necessary (for instance, SDK's main branch should usually be updated, whereas release branches often should not be darc get-subscriptions --exact --source-repo https://github.com/dotnet/msbuild --channel "VS {{THIS_RELEASE_VERSION}}"
darc update-subscription --id <subscription_id_of_msbuild_main_to_sdk_main> --channel "VS {{NEXT_VERSION}}"VS {{THIS_RELEASE_VERSION}} is associated with the correct release branchdarc get-default-channels --source-repo https://github.com/dotnet/msbuild --branch vs{{THIS_RELEASE_VERSION}} darc add-default-channel --channel "VS {{THIS_RELEASE_VERSION}}" --branch vs{{THIS_RELEASE_VERSION}} --repo https://github.com/dotnet/msbuilddarc get-subscriptions --target-repo dotnet/msbuild and update subscriptions to VS{{THIS_RELEASE_VERSION}} branch according to supported versions of VS and SDK:
darc get-subscriptions --exact --target-repo https://github.com/dotnet/msbuild --source-repo https://github.com/dotnet/arcadedarc get-subscriptions --target-repo dotnet/msbuild and update subscriptions to main branch according to supported versions of VS and SDK:
darc get-subscriptions --exact --target-repo https://github.com/dotnet/msbuild --source-repo https://github.com/nuget/nuget.clientdarc get-subscriptions --exact --target-repo https://github.com/dotnet/msbuild --source-repo https://github.com/dotnet/roslyndarc get-subscriptions --exact --target-repo https://github.com/dotnet/msbuild --source-repo https://github.com/dotnet/arcade - Enabled: False in the darc get-subscriptions output) - we do not want to automatically bump them. The version updates should be explicitly driven by SDK or VS.darc add-subscription command, any misconfigured subscription needs to be edit via darc update-subscription command (for additional required and optional parameters run with --help)SkipApplyOptimizationData variable in 'Advanced options' section of the 'Run pipeline' menu to true) or alternatively with the latest Opt-Prof collected for the main branch (set Optional OptProfDrop Override to the drop path of the collected data, which could be found in the logs of the pipeline: Windows_NT -> Build -> search for OptimizationData).EnableReleaseOneLocBuild to trueEnableReleaseOneLocBuild to false. Update the comment on the same line.EnableReleaseOneLocBuild to set up the merge conflict when this line will be updated in the release branch.vs{{THIS_RELEASE_VERSION}}: {{URL_OF_FINAL_BRANDING_PR}} scripts/Stabilize-Release.ps1 to update eng/Versions.props (adds <DotNetFinalVersionKind>release</DotNetFinalVersionKind> on same line as VersionPrefix and changes PreReleaseVersionLabel to servicing). Use -DryRun to preview changes. vs{{THIS_RELEASE_VERSION}} branchBootstrapSdkVersion property in Versions.props) if a fresh sdk was released (released runtimes and associated sdk versions can be checked here - https://dotnet.microsoft.com/download/visual-studio-sdks - make sure to always check the details of the appropriate targeted version of .NET for the matching latest version of SDK).VisualStudio.ChannelName (and VisualStudio.MajorVersion if applicable) of Windows_NT build step for our build pipeline in a newly created branch - it should point to the matching VS release branch and make sure the change is not automatically mergable with the interbranch flow (example: #11246): {{URL_OF_PR}}Timing based on the (Microsoft-internal) release schedule.
Push packages to nuget.org (not currently automated, contact dnceng - search "Publish MSBuild 17.6 to NuGet.org" email subject for template).
Following packages should be published (THIS_RELEASE_EXACT_VERSION is equal to VersionPrefix that comes form the eng\Version.props, that were part of the build we are trying to get published, it is as well part of the VS insertion PR noted above):
Note: Microsoft.Build.Conversion.Core and Microsoft.Build.Engine are not part of the list. Microsoft.Build.Templates is part of the list. Those 3 packages are a difference to the historic publishing list.
Publish docs: submit reference request at https://aka.ms/publishondocs
Remove the temporarily added build feed from nuget.config if it was added in the Update the PackageValidationBaselineVersion step
Update main subscriptions to the new channel (this can be done before or after release - depending on when the source repos from our previous - VS {{THIS_RELEASE_VERSION}} - channle start to publish in the next - VS {{NEXT_VERSION}} - channel)
darc get-subscriptions --exact --target-repo https://github.com/dotnet/msbuild --target-branch main
Create the {{THIS_RELEASE_VERSION}} release
git checkout <commit noted above>
git tag v{{THIS_RELEASE_VERSION}}.3
git push upstream v{{THIS_RELEASE_VERSION}}.3
Create Release from Tag GH option (https://github.com/dotnet/msbuild/releases/new?tag=v17.9.3) - the release notes can be prepopulated (Generate Release Notes) Extend the expiration date of the latest Opt-Prof data for vs{{THIS_RELEASE_VERSION}} branch.
OptimizationData/DotNet-msbuild-Trusted/vs{{THIS_RELEASE_VERSION}}/.... It can be found in the MSBuild CI logs of the "Build" task or alternatively, in the Opt-Prof pipeline logs under the "Publish OptimizationInputs drop" task.If v{{NEXT_VERSION}} is a new major version