Skip to content

Commit c66800d

Browse files
dkurepapavel-purmapremunoleksandr-didyk
authored
Rollout 2024-12-03 (#4207)
Co-authored-by: Pavel Purma <[email protected]> Co-authored-by: Přemek Vysoký <[email protected]> Co-authored-by: Oleksandr Didyk <[email protected]>
1 parent 7256251 commit c66800d

File tree

110 files changed

+1107
-719
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

110 files changed

+1107
-719
lines changed

docs/DevGuide.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
('https://github.com/maestro-auth-test/maestro-test', 289474),
1818
('https://github.com/maestro-auth-test/maestro-test2', 289474),
1919
('https://github.com/maestro-auth-test/maestro-test3', 289474),
20+
('https://github.com/maestro-auth-test/maestro-test-vmr', 289474),
2021
('https://github.com/maestro-auth-test/arcade', 289474),
2122
('https://github.com/maestro-auth-test/dnceng-vmr', 289474);
2223
```

src/Maestro/DependencyUpdater/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public static void Configure(IServiceCollection services)
6060

6161
services.AddTransient<IProcessManager>(sp => ActivatorUtilities.CreateInstance<ProcessManager>(sp, "git"));
6262
services.AddTransient<IVersionDetailsParser, VersionDetailsParser>();
63-
services.AddScoped<IRemoteFactory, DarcRemoteFactory>();
63+
services.AddScoped<IRemoteFactory, RemoteFactory>();
6464
services.AddTransient<IBasicBarClient, SqlBarClient>();
6565
services.AddKustoClientProvider("Kusto");
6666
// TODO (https://github.com/dotnet/arcade-services/issues/3880) - Remove subscriptionIdGenerator

src/Maestro/Maestro.DataProviders/DarcRemoteFactory.cs renamed to src/Maestro/Maestro.DataProviders/RemoteFactory.cs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,53 +13,56 @@
1313

1414
namespace Maestro.DataProviders;
1515

16-
public class DarcRemoteFactory : IRemoteFactory
16+
public class RemoteFactory : IRemoteFactory
1717
{
1818
private readonly IVersionDetailsParser _versionDetailsParser;
1919
private readonly OperationManager _operations;
2020
private readonly IProcessManager _processManager;
21+
private readonly ILoggerFactory _loggerFactory;
2122
private readonly BuildAssetRegistryContext _context;
2223
private readonly DarcRemoteMemoryCache _cache;
2324
private readonly IGitHubTokenProvider _gitHubTokenProvider;
2425
private readonly IAzureDevOpsTokenProvider _azdoTokenProvider;
2526

26-
public DarcRemoteFactory(
27+
public RemoteFactory(
2728
BuildAssetRegistryContext context,
2829
IGitHubTokenProvider gitHubTokenProvider,
2930
IAzureDevOpsTokenProvider azdoTokenProvider,
3031
IVersionDetailsParser versionDetailsParser,
3132
DarcRemoteMemoryCache memoryCache,
3233
OperationManager operations,
33-
IProcessManager processManager)
34+
IProcessManager processManager,
35+
ILoggerFactory loggerFactory)
3436
{
3537
_operations = operations;
3638
_processManager = processManager;
39+
_loggerFactory = loggerFactory;
3740
_versionDetailsParser = versionDetailsParser;
3841
_context = context;
3942
_gitHubTokenProvider = gitHubTokenProvider;
4043
_azdoTokenProvider = azdoTokenProvider;
4144
_cache = memoryCache;
4245
}
4346

44-
public async Task<IRemote> GetRemoteAsync(string repoUrl, ILogger logger)
47+
public async Task<IRemote> CreateRemoteAsync(string repoUrl)
4548
{
4649
using (_operations.BeginOperation($"Getting remote for repo {repoUrl}."))
4750
{
48-
IRemoteGitRepo remoteGitClient = await GetRemoteGitClient(repoUrl, logger);
49-
return new Remote(remoteGitClient, _versionDetailsParser, logger);
51+
IRemoteGitRepo remoteGitClient = await GetRemoteGitClient(repoUrl);
52+
return new Remote(remoteGitClient, _versionDetailsParser, _loggerFactory.CreateLogger<IRemote>());
5053
}
5154
}
5255

53-
public async Task<IDependencyFileManager> GetDependencyFileManagerAsync(string repoUrl, ILogger logger)
56+
public async Task<IDependencyFileManager> CreateDependencyFileManagerAsync(string repoUrl)
5457
{
5558
using (_operations.BeginOperation($"Getting remote file manager for repo {repoUrl}."))
5659
{
57-
IRemoteGitRepo remoteGitClient = await GetRemoteGitClient(repoUrl, logger);
58-
return new DependencyFileManager(remoteGitClient, _versionDetailsParser, logger);
60+
IRemoteGitRepo remoteGitClient = await GetRemoteGitClient(repoUrl);
61+
return new DependencyFileManager(remoteGitClient, _versionDetailsParser, _loggerFactory.CreateLogger<IRemote>());
5962
}
6063
}
6164

62-
private async Task<IRemoteGitRepo> GetRemoteGitClient(string repoUrl, ILogger logger)
65+
private async Task<IRemoteGitRepo> GetRemoteGitClient(string repoUrl)
6366
{
6467
// Normalize the url with the AzDO client prior to attempting to
6568
// get a token. When we do coherency updates we build a repo graph and
@@ -81,10 +84,13 @@ private async Task<IRemoteGitRepo> GetRemoteGitClient(string repoUrl, ILogger lo
8184
: new GitHubClient(
8285
new Microsoft.DotNet.DarcLib.GitHubTokenProvider(_gitHubTokenProvider),
8386
_processManager,
84-
logger,
87+
_loggerFactory.CreateLogger<GitHubClient>(),
8588
_cache.Cache),
8689

87-
GitRepoType.AzureDevOps => new AzureDevOpsClient(_azdoTokenProvider, _processManager, logger),
90+
GitRepoType.AzureDevOps => new AzureDevOpsClient(
91+
_azdoTokenProvider,
92+
_processManager,
93+
_loggerFactory.CreateLogger<AzureDevOpsClient>()),
8894

8995
_ => throw new NotImplementedException($"Unknown repo url type {normalizedUrl}"),
9096
};

src/Maestro/Maestro.Web/Api/v2020_02_20/Controllers/BuildsController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ public async Task<IActionResult> GetCommit(int buildId)
182182
return NotFound();
183183
}
184184

185-
IRemote remote = await Factory.GetRemoteAsync(build.AzureDevOpsRepository ?? build.GitHubRepository, null);
185+
IRemote remote = await Factory.CreateRemoteAsync(build.AzureDevOpsRepository ?? build.GitHubRepository);
186186
Microsoft.DotNet.DarcLib.Commit commit = await remote.GetCommitAsync(build.AzureDevOpsRepository ?? build.GitHubRepository, build.Commit);
187187
return Ok(new Maestro.Api.Model.v2020_02_20.Commit(commit.Author, commit.Sha, commit.Message));
188188
}

src/Maestro/Maestro.Web/Startup.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ public override void ConfigureServices(IServiceCollection services)
277277
sp.GetRequiredService<ILogger<ProcessManager>>(),
278278
"git"));
279279
services.AddTransient<IVersionDetailsParser, VersionDetailsParser>();
280-
services.AddScoped<IRemoteFactory, DarcRemoteFactory>();
280+
services.AddScoped<IRemoteFactory, RemoteFactory>();
281281
services.AddTransient<IBasicBarClient, SqlBarClient>();
282282
services.AddSingleton(typeof(IActorProxyFactory<>), typeof(ActorProxyFactory<>));
283283

src/Maestro/SubscriptionActorService/DarcRemoteFactory.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public class DarcRemoteFactory : IRemoteFactory
2727
private readonly IVersionDetailsParser _versionDetailsParser;
2828
private readonly IProcessManager _processManager;
2929
private readonly OperationManager _operations;
30+
private readonly ILoggerFactory _loggerFactory;
3031

3132
public DarcRemoteFactory(
3233
IConfiguration configuration,
@@ -37,38 +38,40 @@ public DarcRemoteFactory(
3738
TemporaryFiles tempFiles,
3839
IVersionDetailsParser versionDetailsParser,
3940
IProcessManager processManager,
40-
OperationManager operations)
41+
OperationManager operations,
42+
ILoggerFactory loggerFactory)
4143
{
4244
_tempFiles = tempFiles;
4345
_versionDetailsParser = versionDetailsParser;
4446
_processManager = processManager;
4547
_operations = operations;
48+
_loggerFactory = loggerFactory;
4649
_configuration = configuration;
4750
_gitHubTokenProvider = gitHubTokenProvider;
4851
_azureDevOpsTokenProvider = azureDevOpsTokenProvider;
4952
_cache = memoryCache;
5053
_context = context;
5154
}
5255

53-
public async Task<IRemote> GetRemoteAsync(string repoUrl, ILogger logger)
56+
public async Task<IRemote> CreateRemoteAsync(string repoUrl)
5457
{
5558
using (_operations.BeginOperation($"Getting remote for repo {repoUrl}."))
5659
{
57-
IRemoteGitRepo remoteGitClient = await GetRemoteGitClient(repoUrl, logger);
58-
return new Remote(remoteGitClient, _versionDetailsParser, logger);
60+
IRemoteGitRepo remoteGitClient = await CreateRemoteGitClient(repoUrl);
61+
return new Remote(remoteGitClient, _versionDetailsParser, _loggerFactory.CreateLogger<IRemote>());
5962
}
6063
}
6164

62-
public async Task<IDependencyFileManager> GetDependencyFileManagerAsync(string repoUrl, ILogger logger)
65+
public async Task<IDependencyFileManager> CreateDependencyFileManagerAsync(string repoUrl)
6366
{
6467
using (_operations.BeginOperation($"Getting remote file manager for repo {repoUrl}."))
6568
{
66-
IRemoteGitRepo remoteGitClient = await GetRemoteGitClient(repoUrl, logger);
67-
return new DependencyFileManager(remoteGitClient, _versionDetailsParser, logger);
69+
IRemoteGitRepo remoteGitClient = await CreateRemoteGitClient(repoUrl);
70+
return new DependencyFileManager(remoteGitClient, _versionDetailsParser, _loggerFactory.CreateLogger<IRemote>());
6871
}
6972
}
7073

71-
private async Task<IRemoteGitRepo> GetRemoteGitClient(string repoUrl, ILogger logger)
74+
private async Task<IRemoteGitRepo> CreateRemoteGitClient(string repoUrl)
7275
{
7376
// Normalize the url with the AzDO client prior to attempting to
7477
// get a token. When we do coherency updates we build a repo graph and
@@ -98,14 +101,14 @@ private async Task<IRemoteGitRepo> GetRemoteGitClient(string repoUrl, ILogger lo
98101
: new GitHubClient(
99102
new ResolvedTokenProvider(await _gitHubTokenProvider.GetTokenForInstallationAsync(installationId)),
100103
_processManager,
101-
logger,
104+
_loggerFactory.CreateLogger<IRemote>(),
102105
temporaryRepositoryRoot,
103106
_cache.Cache),
104107

105108
GitRepoType.AzureDevOps => new AzureDevOpsClient(
106109
_azureDevOpsTokenProvider,
107110
_processManager,
108-
logger,
111+
_loggerFactory.CreateLogger<IRemote>(),
109112
temporaryRepositoryRoot),
110113

111114
_ => throw new NotImplementedException($"Unknown repo url type {normalizedUrl}"),

src/Maestro/SubscriptionActorService/PullRequestActor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ private async Task<ActionResult<SynchronizePullRequestResult>> SynchronizePullRe
425425
}
426426

427427
(string targetRepository, _) = await GetTargetAsync();
428-
IRemote remote = await _remoteFactory.GetRemoteAsync(targetRepository, _logger);
428+
IRemote remote = await _remoteFactory.CreateRemoteAsync(targetRepository);
429429

430430
_logger.LogInformation("Getting status for Pull Request: {url}", prUrl);
431431
PrStatus status = await remote.GetPullRequestStatusAsync(prUrl);
@@ -704,7 +704,7 @@ public async Task<ActionResult<object>> UpdateAssetsAsync(
704704
{
705705
(string targetRepository, string targetBranch) = await GetTargetAsync();
706706

707-
IRemote darcRemote = await _remoteFactory.GetRemoteAsync(targetRepository, _logger);
707+
IRemote darcRemote = await _remoteFactory.CreateRemoteAsync(targetRepository);
708708

709709
TargetRepoDependencyUpdate repoDependencyUpdate =
710710
await GetRequiredUpdates(updates, _remoteFactory, targetRepository, prBranch: null, targetBranch);
@@ -805,7 +805,7 @@ private async Task UpdatePullRequestAsync(InProgressPullRequest pr, List<UpdateA
805805

806806
_logger.LogInformation("Updating Pull Request {url} branch {targetBranch} in {targetRepository}", pr.Url, targetBranch, targetRepository);
807807

808-
IRemote darcRemote = await _remoteFactory.GetRemoteAsync(targetRepository, _logger);
808+
IRemote darcRemote = await _remoteFactory.CreateRemoteAsync(targetRepository);
809809
PullRequest pullRequest = await darcRemote.GetPullRequestAsync(pr.Url);
810810

811811
TargetRepoDependencyUpdate targetRepositoryUpdates =
@@ -955,7 +955,7 @@ private async Task<TargetRepoDependencyUpdate> GetRequiredUpdates(
955955
{
956956
_logger.LogInformation("Getting Required Updates for {branch} of {targetRepository}", targetBranch, targetRepository);
957957
// Get a remote factory for the target repo
958-
IRemote darc = await remoteFactory.GetRemoteAsync(targetRepository, _logger);
958+
IRemote darc = await remoteFactory.CreateRemoteAsync(targetRepository);
959959

960960
TargetRepoDependencyUpdate repoDependencyUpdate = new();
961961

src/Maestro/SubscriptionActorService/PullRequestBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public async Task<string> CalculatePRDescriptionAndCommitUpdatesAsync(
122122
(UpdateAssetsParameters update, List<DependencyUpdate> deps) coherencyUpdate =
123123
requiredUpdates.Where(u => u.update.IsCoherencyUpdate).SingleOrDefault();
124124

125-
IRemote remote = await _remoteFactory.GetRemoteAsync(targetRepository, _logger);
125+
IRemote remote = await _remoteFactory.CreateRemoteAsync(targetRepository);
126126
var locationResolver = new AssetLocationResolver(_barClient);
127127

128128
// To keep a PR to as few commits as possible, if the number of

src/Maestro/SubscriptionActorService/PullRequestPolicyFailureNotifier.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public async Task TagSourceRepositoryGitHubContactsAsync(InProgressPullRequest p
6565
return;
6666
}
6767

68-
var darcRemote = await _remoteFactory.GetRemoteAsync($"https://github.com/{owner}/{repo}", _logger);
68+
var darcRemote = await _remoteFactory.CreateRemoteAsync($"https://github.com/{owner}/{repo}");
6969
var darcSubscriptionObject = await _barClient.GetSubscriptionAsync(subscriptionFromPr.SubscriptionId);
7070
string sourceRepository = darcSubscriptionObject.SourceRepository;
7171
string targetRepository = darcSubscriptionObject.TargetRepository;

src/Microsoft.DotNet.Darc/Darc/Helpers/RemoteFactory.cs

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,36 +12,29 @@ namespace Microsoft.DotNet.Darc.Helpers;
1212

1313
internal class RemoteFactory : IRemoteFactory
1414
{
15+
private readonly ILoggerFactory _loggerFactory;
1516
private readonly ICommandLineOptions _options;
1617

17-
public RemoteFactory(ICommandLineOptions options)
18+
public RemoteFactory(ILoggerFactory loggerFactory, ICommandLineOptions options)
1819
{
20+
_loggerFactory = loggerFactory;
1921
_options = options;
2022
}
2123

22-
public static IRemote GetRemote(ICommandLineOptions options, string repoUrl, ILogger logger)
24+
public Task<IRemote> CreateRemoteAsync(string repoUrl)
2325
{
24-
IRemoteGitRepo gitClient = GetRemoteGitClient(options, repoUrl, logger);
25-
return new Remote(gitClient, new VersionDetailsParser(), logger);
26+
IRemoteGitRepo gitClient = CreateRemoteGitClient(_options, repoUrl);
27+
return Task.FromResult<IRemote>(new Remote(gitClient, new VersionDetailsParser(), _loggerFactory.CreateLogger<IRemote>()));
2628
}
2729

28-
public static IBarApiClient GetBarClient(ICommandLineOptions options)
29-
=> new BarApiClient(
30-
options.BuildAssetRegistryToken,
31-
managedIdentityId: null,
32-
options.IsCi,
33-
options.BuildAssetRegistryBaseUri);
34-
35-
public Task<IRemote> GetRemoteAsync(string repoUrl, ILogger logger)
36-
=> Task.FromResult(GetRemote(_options, repoUrl, logger));
37-
38-
public Task<IDependencyFileManager> GetDependencyFileManagerAsync(string repoUrl, ILogger logger)
30+
public Task<IDependencyFileManager> CreateDependencyFileManagerAsync(string repoUrl)
3931
{
40-
IRemoteGitRepo gitClient = GetRemoteGitClient(_options, repoUrl, logger);
41-
return Task.FromResult<IDependencyFileManager>(new DependencyFileManager(gitClient, new VersionDetailsParser(), logger));
32+
IRemoteGitRepo gitClient = CreateRemoteGitClient(_options, repoUrl);
33+
var dfm = new DependencyFileManager(gitClient, new VersionDetailsParser(), _loggerFactory.CreateLogger<IDependencyFileManager>());
34+
return Task.FromResult<IDependencyFileManager>(dfm);
4235
}
4336

44-
private static IRemoteGitRepo GetRemoteGitClient(ICommandLineOptions options, string repoUrl, ILogger logger)
37+
private IRemoteGitRepo CreateRemoteGitClient(ICommandLineOptions options, string repoUrl)
4538
{
4639
string temporaryRepositoryRoot = Path.GetTempPath();
4740

@@ -52,17 +45,17 @@ private static IRemoteGitRepo GetRemoteGitClient(ICommandLineOptions options, st
5245
GitRepoType.GitHub =>
5346
new GitHubClient(
5447
options.GetGitHubTokenProvider(),
55-
new ProcessManager(logger, options.GitLocation),
56-
logger,
48+
new ProcessManager(_loggerFactory.CreateLogger<IProcessManager>(), options.GitLocation),
49+
_loggerFactory.CreateLogger<GitHubClient>(),
5750
temporaryRepositoryRoot,
5851
// Caching not in use for Darc local client.
5952
null),
6053

6154
GitRepoType.AzureDevOps =>
6255
new AzureDevOpsClient(
6356
options.GetAzdoTokenProvider(),
64-
new ProcessManager(logger, options.GitLocation),
65-
logger,
57+
new ProcessManager(_loggerFactory.CreateLogger<IProcessManager>(), options.GitLocation),
58+
_loggerFactory.CreateLogger<AzureDevOpsClient>(),
6659
temporaryRepositoryRoot),
6760

6861
_ => throw new System.InvalidOperationException($"Cannot create a remote of type {repoType}"),

0 commit comments

Comments
 (0)