in tools/code/publisher/WorkspaceApi.cs [444:473]
private static GetWorkspaceApiDtosInPreviousCommit GetWorkspaceApiDtosInPreviousCommit(IServiceProvider provider)
{
var getArtifactsInPreviousCommit = provider.GetRequiredService<GetArtifactsInPreviousCommit>();
var serviceDirectory = provider.GetRequiredService<ManagementServiceDirectory>();
var cache = provider.GetRequiredService<IMemoryCache>();
var cacheKey = Guid.NewGuid().ToString();
return () =>
cache.GetOrCreate(cacheKey, _ => getDtos())!;
FrozenDictionary<(ApiName, WorkspaceName), Func<CancellationToken, ValueTask<Option<WorkspaceApiDto>>>> getDtos() =>
getArtifactsInPreviousCommit()
.Choose(kvp => from apiName in tryGetNameFromInformationFile(kvp.Key)
select (apiName, tryGetDto(kvp.Value)))
.ToFrozenDictionary();
Option<(ApiName, WorkspaceName)> tryGetNameFromInformationFile(FileInfo file) =>
from informationFile in WorkspaceApiInformationFile.TryParse(file, serviceDirectory)
select (informationFile.Parent.Name, informationFile.Parent.Parent.Parent.Name);
static Func<CancellationToken, ValueTask<Option<WorkspaceApiDto>>> tryGetDto(Func<CancellationToken, ValueTask<Option<BinaryData>>> tryGetContents) =>
async cancellationToken =>
{
var contentsOption = await tryGetContents(cancellationToken);
return from contents in contentsOption
select contents.ToObjectFromJson<WorkspaceApiDto>();
};
}