예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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();
        }