This document outlines the process we go through during previews to prepare the branches for a workloads insertion.
When preparing for a new preview release of .NET, we need to ensure that the workload-versions repository is properly configured to receive and flow dependencies from the correct sources. This involves updating Maestro subscriptions to point to the appropriate channels for the preview period.
The workload-versions repository receives dependencies from the dotnet/dotnet repository (the VMR - Virtual Monolithic Repository) through Maestro subscriptions. During preview periods, we need to update these subscriptions to point to the correct preview channel.
-
Identify the target preview channel
- Preview channels typically follow the pattern:
.NET <version>.0.1xx SDK Preview <number> - Example:
.NET 10.0.1xx SDK Preview 1,.NET 10.0.1xx SDK Preview 2, etc. - For RC1, RC2, and servicing releases, the channel form is:
.NET <version>.0.1xx SDK Internal(for MSRC releases) - You can list available channels using:
darc get-channels
- Preview channels typically follow the pattern:
-
Find the current subscription
- List all subscriptions for the repository:
darc get-subscriptions --target-repo workload-versions --source-repo dotnet/dotnet --target-branch main
- Identify the subscription from
dotnet/dotnet(the VMR)
[!NOTE] For RC1, RC2, and servicing releases, the subscription source is from
dotnet-dotnet(the internal Azure DevOps URI:https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet). - List all subscriptions for the repository:
-
Update the subscription to the new preview channel
- Use the DARC tool to update the subscription:
darc update-subscription --id <subscription-id> --channel "<channel-name>"
- Example:
darc update-subscription --id 12345 --channel ".NET 10.0.1xx SDK Preview 2"
- Use the DARC tool to update the subscription:
-
Verify the subscription update
- Confirm the change was applied:
darc get-subscription --id <subscription-id>
- Check that the
Channelfield shows the new preview channel
- Confirm the change was applied:
-
Monitor dependency flow
- After updating the subscription, monitor for new pull requests from Maestro
- PRs will be automatically created when new builds are published to the preview channel
- These PRs will update the
eng/Version.Details.xmlfile with new dependency versions
For major version previews shipped from the main branch:
-
Work from the main branch
- Major version previews (e.g., .NET 10 RC 1, RC 2) are typically shipped from the main branch
- No separate preview branch is needed for these releases
-
Update Version.props
- Set the appropriate version features and patch levels for the preview
- Update
VersionFeatureto match the SDK release band - Ensure
VersionPatchis set correctly (typically 0 for a new preview)
-
Configure channel publishing
- Ensure builds from this branch publish to the correct workloads feed
- For .NET 10:
dotnet10-workloadsfeed - Feed URL:
https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10-workloads/nuget/v3/index.json
When transitioning to a new preview, you need to update the package ID suffixes for all MAUI-related packages in eng/Versions.props.
-
Locate the MauiWorkloads property group
- Open
eng/Versions.props - Find the
<PropertyGroup Label="MauiWorkloads">section
- Open
-
Update the MauiFeatureBand property
- Change to match the new preview version
- Example:
<MauiFeatureBand>10.0.100-rc.2</MauiFeatureBand>
-
Update all MAUI manifest package property names
- The property names encode the SDK band and preview in their suffix
- For example, when moving from RC 1 to RC 2:
MicrosoftNETSdkAndroidManifest100100rc1PackageVersion→MicrosoftNETSdkAndroidManifest100100rc2PackageVersionMicrosoftNETSdkiOSManifest100100rc1PackageVersion→MicrosoftNETSdkiOSManifest100100rc2PackageVersionMicrosoftNETSdktvOSManifest100100rc1PackageVersion→MicrosoftNETSdktvOSManifest100100rc2PackageVersionMicrosoftNETSdkMacCatalystManifest100100rc1PackageVersion→MicrosoftNETSdkMacCatalystManifest100100rc2PackageVersionMicrosoftNETSdkmacOSManifest100100rc1PackageVersion→MicrosoftNETSdkmacOSManifest100100rc2PackageVersionMicrosoftNETSdkMauiManifest100100rc1PackageVersion→MicrosoftNETSdkMauiManifest100100rc2PackageVersion
-
Update the references to these properties
- Update property references in the assignment statements:
<MauiWorkloadManifestVersion>$(MicrosoftNETSdkMauiManifest100100rc2PackageVersion)</MauiWorkloadManifestVersion> <XamarinAndroidWorkloadManifestVersion>$(MicrosoftNETSdkAndroidManifest100100rc2PackageVersion)</XamarinAndroidWorkloadManifestVersion> <!-- And so on for all workloads -->
- Update property references in the assignment statements:
-
Verify all package property names are updated consistently
- Ensure the suffix pattern matches across all MAUI workload packages
- The pattern should be:
{Major}{Minor}{Band}{PreviewLabel}{PreviewNumber} - Example:
100100rc2represents 10.0.100-rc.2
Visual Studio integration requires updating the VSMAN (Visual Studio Manifest) IDs and external.vsmanproj references for mono and emsdk workloads when preparing for a new preview.
-
Update VSMAN IDs in dotnet-workloads-components.json
- The VSMAN IDs need to be updated to match the new preview version
- These IDs are referenced in
dotnet-workloads-components.json - Update the VSMAN references for mono and emsdk workloads in this configuration file
-
Update VisualStudio.External.vsmanproj for mono workload
- Locate the
VisualStudio.External.vsmanprojfile for the mono workload - Update any version-specific identifiers to match the new preview
- Ensure the ComponentId reflects the correct preview version
- Locate the
-
Update VisualStudio.External.vsmanproj for emsdk workload
- Similarly, update the
VisualStudio.External.vsmanprojfile for the emsdk (Emscripten) workload - Update version identifiers and component references
- Verify the ComponentId aligns with the new preview numbering
- Similarly, update the
-
Coordinate with VS insertion process
- The VS insertion pipeline may need configuration updates for the new preview
- Ensure the VSMAN package generation is set up for the correct preview channel
- Test the insertion process with a test build before the official preview release
Note
The exact location and format of VSMAN configuration files may vary based on the repository structure and VS insertion setup.
- dotnet8-workloads: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet8-workloads/nuget/v3/index.json
- dotnet9-workloads: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet9-workloads/nuget/v3/index.json
- dotnet10-workloads: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10-workloads/nuget/v3/index.json
# List all channels
darc get-channels
# List subscriptions for this repository
darc get-subscriptions --target-repo workload-versions
# Get details of a specific subscription
darc get-subscription --id <subscription-id>
# Update a subscription's channel
darc update-subscription --id <subscription-id> --channel "<channel-name>"
# List available builds in a channel
darc get-builds --channel "<channel-name>"If dependency PRs are not being created after updating the subscription:
- Verify the subscription channel is correct
- Check that builds are being published to the target channel
- Ensure the subscription is enabled (not disabled)
- Check Maestro for any errors in the subscription processing
If you're receiving dependencies from the wrong builds:
- Verify the subscription is pointing to the correct channel
- Check the channel's build sources
- Ensure you updated the correct subscription (there may be multiple)
- Subscription channel updates should be made before the first preview build is published
- Allow time for the first dependency update PR to flow through and be merged
- Coordinate with the dotnet/dotnet (VMR) team on preview build schedules
- Plan for at least one full dependency flow cycle before declaring the branch ready for insertions