public static async Task WriteRootReadMeAsync(this IStorage storage, RootReadMeContext context, CancellationToken token) { storage.AssertNotNull(nameof(storage)); context.AssertNotNull(nameof(context)); var template = await GetOrCreateConfigurationTemplateAsync( storage, ReadMeTemplateFileName, DotLiquidTemplate.GetRootReadMeTemplate, token); var readMe = DotLiquidTemplate.Render(template, context); await storage.WriteRootFileAsync(ReadMeFileName, readMe, token); }
public async ValueTask <bool> ExecuteAsync(CancellationToken token) { var repository = Container.Resolve <IPackageRepository>(); var state = new RefreshCommandState(repository); var packages = await repository.UpdateAllPackagesReadMeAsync(token); var rootContext = new RootReadMeContext(); foreach (var metadata in packages.OrderBy(i => i.Name).ThenBy(i => i.Version).ThenBy(i => i.SourceCode)) { var(licenses, markdownExpression) = await state.GetLicensesAsync(metadata.LicenseCode, token); foreach (var license in licenses) { license.PackagesCount++; } var packageContext = new RootReadMePackageContext { Source = metadata.SourceCode, Name = metadata.Name, Version = metadata.Version, License = metadata.LicenseCode, IsApproved = metadata.ApprovalStatus == PackageApprovalStatus.Approved || metadata.ApprovalStatus == PackageApprovalStatus.AutomaticallyApproved, UsedBy = PackageRepositoryTools.BuildUsedBy(metadata.UsedBy), SourceHRef = metadata.HRef, LocalHRef = repository.Storage.GetPackageLocalHRef(new LibraryId(metadata.SourceCode, metadata.Name, metadata.Version)), LicenseLocalHRef = licenses.FirstOrDefault()?.LocalHRef, LicenseMarkdownExpression = markdownExpression }; if (packageContext.SourceHRef.IsNullOrEmpty()) { packageContext.SourceHRef = packageContext.LocalHRef; } rootContext.Packages.Add(packageContext); } rootContext.Licenses.AddRange(state.Licenses.OrderBy(i => i.Code)); rootContext.TodoPackages.AddRange(rootContext.Packages.Where(i => !i.IsApproved || i.License.IsNullOrEmpty())); await repository.Storage.WriteRootReadMeAsync(rootContext, token); return(true); }
public async Task WriteReadCreateNewTemplate() { var context = new RootReadMeContext { Licenses = { new RootReadMeLicenseContext { Code = "MIT", LocalHRef = "licenses/mit", RequiresApproval = false, RequiresThirdPartyNotices = false, PackagesCount = 1 } }, Packages = { new RootReadMePackageContext { Source = "nuget.org", Name = "Newtonsoft.Json", Version = "12.0.2", License = "MIT", LicenseLocalHRef = "licenses/mit", UsedBy = "MyApp", LocalHRef = "packages/nuget.org/newtonsoft.json/12.0.2", SourceHRef = "https://www.nuget.org/packages/Newtonsoft.Json/12.0.2", IsApproved = true } } }; await _storage.Object.WriteRootReadMeAsync(context, CancellationToken.None); var stream = await _storage.Object.OpenRootFileReadAsync(StorageExtensions.ReadMeFileName, CancellationToken.None); var content = (await stream.ToArrayAsync(CancellationToken.None)).AsText(); Console.WriteLine(content); content.ShouldContain("Licenses"); stream = await _storage.Object.OpenConfigurationFileReadAsync(StorageExtensions.ReadMeTemplateFileName, CancellationToken.None); stream.ShouldNotBeNull(); }