Skip to content

Commit a4be482

Browse files
authored
[Rollout] Production rollout 2025-04-25 (#4742)
<!-- Link the GitHub or AzDO issue this pull request is associated with. Please copy and paste the full URL rather than using the dotnet/arcade-services# syntax --> #4741
2 parents 76c2632 + d81eea6 commit a4be482

File tree

4 files changed

+65
-19
lines changed

4 files changed

+65
-19
lines changed

Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
9595
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" />
9696
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
97+
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="8.0.0" />
9798
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.1" />
9899
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="8.0.0" />
99100
<PackageVersion Include="Microsoft.Extensions.Http" Version="8.0.1" />

src/Microsoft.DotNet.Darc/DarcLib/Microsoft.DotNet.DarcLib.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<PackageReference Include="Microsoft.DotNet.Internal.Logging" />
1717
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" />
1818
<PackageReference Include="Microsoft.Extensions.Http" />
19-
<PackageReference Include="Microsoft.Extensions.Logging" />
19+
<PackageReference Include="Microsoft.Extensions.FileSystemGlobbing" />
2020
<PackageReference Include="Microsoft.TeamFoundationServer.Client" />
2121
<PackageReference Include="Newtonsoft.Json" />
2222
<PackageReference Include="NuGet.Packaging" />

src/Microsoft.DotNet.Darc/DarcLib/VirtualMonoRepo/VersionFileCodeFlowUpdater.cs

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
using System;
55
using System.Collections.Generic;
66
using System.Linq;
7+
using System.Text.RegularExpressions;
78
using System.Threading;
89
using System.Threading.Tasks;
910
using Microsoft.DotNet.DarcLib.Helpers;
1011
using Microsoft.DotNet.DarcLib.Models;
1112
using Microsoft.DotNet.DarcLib.Models.Darc;
1213
using Microsoft.DotNet.DarcLib.Models.VirtualMonoRepo;
1314
using Microsoft.DotNet.ProductConstructionService.Client.Models;
15+
using Microsoft.Extensions.FileSystemGlobbing;
1416
using Microsoft.Extensions.Logging;
1517
using Microsoft.VisualStudio.Services.Common;
1618
using NuGet.Versioning;
@@ -90,6 +92,8 @@ public async Task<VersionFileUpdateResult> TryMergingBranchAndUpdateDependencies
9092
targetBranch,
9193
cancellationToken);
9294

95+
var excludedAssetsMatcher = GetExcludedAssetsMatcher(excludedAssets);
96+
9397
if (mergeSuccessful)
9498
{
9599
try
@@ -99,7 +103,7 @@ public async Task<VersionFileUpdateResult> TryMergingBranchAndUpdateDependencies
99103
targetRepo,
100104
targetBranch,
101105
build,
102-
excludedAssets,
106+
excludedAssetsMatcher,
103107
lastFlow,
104108
currentFlow,
105109
cancellationToken);
@@ -124,7 +128,7 @@ public async Task<VersionFileUpdateResult> TryMergingBranchAndUpdateDependencies
124128
build,
125129
headBranch,
126130
targetBranch,
127-
excludedAssets,
131+
excludedAssetsMatcher,
128132
headBranchExisted,
129133
cancellationToken);
130134
}
@@ -203,7 +207,7 @@ private async Task<VersionFileUpdateResult> ResolveVersionFileConflicts(
203207
Build build,
204208
string headBranch,
205209
string branchToMerge,
206-
IReadOnlyCollection<string>? excludedAssets,
210+
Matcher? excludedAssetsMatcher,
207211
bool headBranchExisted,
208212
CancellationToken cancellationToken)
209213
{
@@ -258,7 +262,7 @@ async Task AbortMerge()
258262
repo,
259263
branchToMerge,
260264
build,
261-
excludedAssets,
265+
excludedAssetsMatcher,
262266
lastFlow,
263267
(Backflow)currentFlow,
264268
cancellationToken);
@@ -290,7 +294,7 @@ private async Task<List<DependencyUpdate>> BackflowDependenciesAndToolset(
290294
ILocalGitRepo targetRepo,
291295
string targetBranch,
292296
Build build,
293-
IReadOnlyCollection<string>? excludedAssets,
297+
Matcher? excludedAssetsMatcher,
294298
Codeflow lastFlow,
295299
Backflow currentFlow,
296300
CancellationToken cancellationToken)
@@ -316,17 +320,17 @@ private async Task<List<DependencyUpdate>> BackflowDependenciesAndToolset(
316320
var currentVmrDependencies = await GetVmrDependencies(vmr, mappingName, currentFlow.VmrSha);
317321

318322
List<DependencyUpdate> repoChanges = ComputeChanges(
319-
excludedAssets,
323+
excludedAssetsMatcher,
320324
previousRepoDependencies,
321325
currentRepoDependencies);
322326

323327
List<DependencyUpdate> vmrChanges = ComputeChanges(
324-
excludedAssets,
328+
excludedAssetsMatcher,
325329
previousVmrDependencies,
326330
currentVmrDependencies);
327331

328332
List<AssetData> buildAssets = build.Assets
329-
.Where(a => excludedAssets is null || !excludedAssets.Contains(a.Name))
333+
.Where(a => !IsExcludedAsset(a.Name, excludedAssetsMatcher))
330334
.Select(a => new AssetData(a.NonShipping)
331335
{
332336
Name = a.Name,
@@ -341,7 +345,7 @@ private async Task<List<DependencyUpdate>> BackflowDependenciesAndToolset(
341345
.Concat(vmrChanges.Select(c => c.From?.Name ?? c.To.Name))
342346
.Concat(repoChanges.Select(c => c.From?.Name ?? c.To.Name))
343347
.Distinct()
344-
.Except(excludedAssets ?? [])
348+
.Where(dep => !IsExcludedAsset(dep, excludedAssetsMatcher))
345349
.ToHashSet();
346350

347351
var versionUpdates = new List<DependencyDetail>();
@@ -605,20 +609,39 @@ await targetRepo.CommitAsync(
605609
];
606610
}
607611

608-
private static List<DependencyUpdate> ComputeChanges(IReadOnlyCollection<string>? excludedAssets, VersionDetails before, VersionDetails after)
612+
private static Matcher? GetExcludedAssetsMatcher(IReadOnlyCollection<string>? excludedAssets)
613+
{
614+
if (excludedAssets == null || excludedAssets.Count == 0)
615+
{
616+
return null;
617+
}
618+
var matcher = new Matcher();
619+
matcher.AddIncludePatterns(excludedAssets);
620+
return matcher;
621+
}
622+
623+
private static bool IsExcludedAsset(string asset, Matcher? excludedAssetsMatcher)
609624
{
610-
bool IsExcluded(DependencyDetail dep) => excludedAssets?.Contains(dep.Name) ?? false;
625+
if (excludedAssetsMatcher == null)
626+
{
627+
return false;
628+
}
611629

630+
return excludedAssetsMatcher.Match(asset).HasMatches;
631+
}
632+
633+
private static List<DependencyUpdate> ComputeChanges(Matcher? excludedAssetsMatcher, VersionDetails before, VersionDetails after)
634+
{
612635
var dependencyChanges = before.Dependencies
613-
.Where(dep => !IsExcluded(dep))
636+
.Where(dep => !IsExcludedAsset(dep.Name, excludedAssetsMatcher))
614637
.Select(dep => new DependencyUpdate()
615638
{
616639
From = dep,
617640
})
618641
.ToList();
619642

620643
// Pair dependencies with the same name
621-
foreach (var dep in after.Dependencies.Where(dep => !IsExcluded(dep)))
644+
foreach (var dep in after.Dependencies.Where(dep => !IsExcludedAsset(dep.Name, excludedAssetsMatcher)))
622645
{
623646
var existing = dependencyChanges.FirstOrDefault(d => d.From?.Name == dep.Name);
624647
if (existing != null)

test/Microsoft.DotNet.DarcLib.Tests/VirtualMonoRepo/VersionFileCodeFlowUpdaterTests.cs

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ public async Task VersionsAreMergedInBackflowAfterForwardFlowTest()
164164
_versionDetails[$"repo/{lastFlow.RepoSha}"] = new VersionDetails(
165165
[
166166
CreateDependency("Package.From.Build", "1.0.0", LastVmrSha),
167+
CreateDependency("Package.Excluded.From.Backflow", "1.0.0", LastVmrSha),
168+
CreateDependency("Package.Also.Excluded.From.Backflow", "1.0.0", LastVmrSha),
167169
CreateDependency("Package.Removed.In.Repo", "1.0.0", LastVmrSha),
168170
CreateDependency("Package.Updated.In.Both", "1.0.0", LastVmrSha),
169171
CreateDependency("Package.Removed.In.VMR", "1.0.0", LastVmrSha), // Will be removed in VMR
@@ -174,6 +176,8 @@ public async Task VersionsAreMergedInBackflowAfterForwardFlowTest()
174176
_versionDetails[$"repo/{TargetBranch}"] = new VersionDetails(
175177
[
176178
CreateDependency("Package.From.Build", "1.0.1", LastVmrSha), // Updated
179+
CreateDependency("Package.Excluded.From.Backflow", "1.0.0", LastVmrSha),
180+
CreateDependency("Package.Also.Excluded.From.Backflow", "1.0.0", LastVmrSha),
177181
CreateDependency("Package.Updated.In.Both", "1.0.3", LastVmrSha), // Updated (vmr updated to 3.0.0)
178182
CreateDependency("Package.Added.In.Repo", "1.0.0", LastVmrSha), // Added
179183
CreateDependency("Package.Added.In.Both", "2.2.2", LastVmrSha), // Added in both
@@ -191,6 +195,8 @@ public async Task VersionsAreMergedInBackflowAfterForwardFlowTest()
191195
_versionDetails[$"vmr/{CurrentVmrSha}"] = new VersionDetails(
192196
[
193197
CreateDependency("Package.From.Build", "1.0.0", LastVmrSha),
198+
CreateDependency("Package.Excluded.From.Backflow", "1.0.0", LastVmrSha),
199+
CreateDependency("Package.Also.Excluded.From.Backflow", "1.0.0", LastVmrSha),
194200
CreateDependency("Package.Removed.In.Repo", "1.0.0", LastVmrSha),
195201
CreateDependency("Package.Updated.In.Both", "3.0.0", LastVmrSha), // Updated (repo updated to 1.0.3)
196202
CreateDependency("Package.Added.In.VMR", "2.0.0", LastVmrSha), // Added
@@ -202,6 +208,8 @@ public async Task VersionsAreMergedInBackflowAfterForwardFlowTest()
202208
var build = CreateNewBuild(CurrentVmrSha,
203209
[
204210
("Package.From.Build", "1.0.5"),
211+
("Package.Excluded.From.Backflow", "1.0.2"),
212+
("Package.Also.Excluded.From.Backflow", "1.0.2"),
205213
("Another.Package.From.Build", "1.0.5"),
206214
("Yet.Another.Package.From.Build", "1.0.5")
207215
]);
@@ -215,13 +223,17 @@ public async Task VersionsAreMergedInBackflowAfterForwardFlowTest()
215223
// - Package.Removed.In.VMR - removed in VMR (and thus in repo)
216224
// - Package.Added.In.Repo: 1.0.0 - added in repo, so already there
217225
// - Package.Added.In.VMR - added in VMR, so it was just added in the repo (not getting updated)
226+
// - Package.Excluded.From.Backflow - excluded from backflow
227+
// - Package.Also.Excluded.From.Backflow - excluded from backflow
218228
await TestConflictResolver(
219229
build,
220230
lastFlow,
221231
currentFlow,
222232
expectedDependencies:
223233
[
224234
("Package.From.Build", "1.0.5"),
235+
("Package.Excluded.From.Backflow", "1.0.0"),
236+
("Package.Also.Excluded.From.Backflow", "1.0.0"),
225237
("Package.Updated.In.Both", "3.0.0"),
226238
("Package.Added.In.Repo", "1.0.0"),
227239
("Package.Added.In.VMR", "2.0.0"),
@@ -233,7 +245,8 @@ await TestConflictResolver(
233245
new("Package.From.Build", "1.0.1", "1.0.5"),
234246
new("Package.Updated.In.Both", "1.0.3", "3.0.0"),
235247
],
236-
headBranchExisted: false);
248+
headBranchExisted: false,
249+
excludedAssets: ["Package.Excluded.From.Backflow", "Package.Also.*"]);
237250

238251
// Now we will add a new dependency to the PR branch
239252
// We will change a dependency in the repo too
@@ -260,6 +273,8 @@ await TestConflictResolver(
260273

261274
build = CreateNewBuild(newVmrSha, [..build.Assets.Select(a => (a.Name, "1.0.6"))]);
262275

276+
// This time, don't exclude the assets from an update.
277+
// We should see the updates.
263278
await TestConflictResolver(
264279
build,
265280
currentFlow,
@@ -268,6 +283,8 @@ await TestConflictResolver(
268283
[
269284
// Same as before
270285
("Package.From.Build", "1.0.6"),
286+
("Package.Excluded.From.Backflow", "1.0.6"),
287+
("Package.Also.Excluded.From.Backflow", "1.0.6"),
271288
("Package.Updated.In.Both", "3.0.0"),
272289
("Package.Added.In.Repo", "1.0.0"),
273290
("Package.Added.In.VMR", "2.0.0"),
@@ -281,9 +298,12 @@ await TestConflictResolver(
281298
[
282299
new("New.Package.In.Vmr", null, To: "4.0.0"),
283300
new("New.Package.In.Repo", null, To: "4.0.0"),
301+
new("Package.Excluded.From.Backflow", "1.0.0", To: "1.0.6"),
302+
new("Package.Also.Excluded.From.Backflow", "1.0.0", To: "1.0.6"),
284303
new("Package.From.Build", "1.0.5", To: "1.0.6"),
285304
],
286-
headBranchExisted: true);
305+
headBranchExisted: true,
306+
excludedAssets: []);
287307
}
288308

289309
// Tests a case when conflicting updates were made in the repo and VMR.
@@ -327,7 +347,8 @@ public async Task ConflictingChangesThrowTest()
327347
currentFlow,
328348
[],
329349
[],
330-
headBranchExisted: false);
350+
headBranchExisted: false,
351+
excludedAssets: []);
331352

332353
await action.Should().ThrowAsync<ConflictingDependencyUpdateException>();
333354
}
@@ -338,7 +359,8 @@ private async Task TestConflictResolver(
338359
Backflow currentFlow,
339360
(string Name, string Version)[] expectedDependencies,
340361
ExpectedUpdate[] expectedUpdates,
341-
bool headBranchExisted)
362+
bool headBranchExisted,
363+
string[] excludedAssets)
342364
{
343365
var gitFileChanges = new GitFileContentContainer();
344366
_dependencyFileManager
@@ -376,7 +398,7 @@ private async Task TestConflictResolver(
376398
build,
377399
PrBranch,
378400
TargetBranch,
379-
excludedAssets: [],
401+
excludedAssets: excludedAssets,
380402
headBranchExisted,
381403
cancellationToken);
382404

0 commit comments

Comments
 (0)