Пример #1
0
    public async Task BuildPackageAsync(
        ILocalPackage package,
        IRemoteSourceControlRepository repository)
    {
        var nugetPackage = (IDotNetLocalPackage)package;

        foreach (var preprocessor in _dotNetLocalPackagePreprocessors)
        {
            await preprocessor.PreprocessPackageAsync(nugetPackage);
        }

        await UpdateProjectFileAsync(
            nugetPackage,
            repository);

        DotNetHelper.RestorePackages(nugetPackage.FolderPath);
        DotNetHelper.Build(nugetPackage.FolderPath);

        var folderDirectory         = new DirectoryInfo(nugetPackage.FolderPath);
        var targetTestDirectoryPath = folderDirectory.Name + ".Tests";
        var testDirectory           = folderDirectory
                                      .Parent
                                      .GetDirectories()
                                      .SingleOrDefault(x => x.Name == targetTestDirectoryPath);

        if (testDirectory != null)
        {
            Console.WriteLine("Test directory for package " + nugetPackage.PublishName + " found at " + testDirectory.FullName + ".");
            DotNetHelper.Test(testDirectory.FullName);
        }
        else
        {
            Console.WriteLine("No test directory for package " + nugetPackage.PublishName + " found.");
        }
    }
 private static string GetRepositoryDownloadLocation(TimeSpan timestamp, IRemoteSourceControlRepository repository)
 {
     return(Path.Combine(
                PathHelper.GetFluffySpoonWorkingDirectory(),
                (long)timestamp.TotalSeconds + "",
                repository.Name));
 }
Пример #3
0
    public async Task <int> GetRevisionOfRepository(IRemoteSourceControlRepository repository)
    {
        var githubRepository = (GitHubSourceControlRepository)repository;
        var commits          = await _client.Repository.Commit.GetAll(
            githubRepository.Owner,
            githubRepository.Name);

        return(commits.Count);
    }
    public async Task BuildPackageAsync(
        ILocalPackage package,
        IRemoteSourceControlRepository repository)
    {
        var nugetPackage = (INodeJsLocalPackage)package;

        await UpdateProjectFileAsync(
            nugetPackage,
            repository);

        NodeJsHelper.RestorePackages(package.FolderPath);
        NodeJsHelper.Build(nugetPackage.FolderPath);
        NodeJsHelper.Test(nugetPackage.FolderPath);
    }
    private async Task RefreshAllPackagesInDirectoryAsync(
        IRemoteSourceControlRepository repository,
        string folderPath)
    {
        foreach (var localPackageProcessor in _localPackageProcessors)
        {
            Console.WriteLine("Scanning for local packages to refresh using " + localPackageProcessor.GetType().Name);

            await RefreshPackagesAsync(
                localPackageProcessor,
                repository,
                folderPath);
        }
    }
Пример #6
0
    private async Task UpdateProjectFileAsync(
        IDotNetLocalPackage nugetPackage,
        IRemoteSourceControlRepository repository)
    {
        var projectFileXml = XDocument.Load(nugetPackage.ProjectFilePath);

        await PrepareProjectFileForPushingAsync(
            nugetPackage,
            repository,
            projectFileXml);

        Console.WriteLine("Final project output:\n" + projectFileXml);

        await using var stream = File.OpenWrite(nugetPackage.ProjectFilePath);
        projectFileXml.Save(stream);
    }
    private async Task RefreshPackagesAsync(
        ILocalPackageProcessor processor,
        IRemoteSourceControlRepository repository,
        string folderPath)
    {
        var packages = await processor.ScanForPackagesInDirectoryAsync(folderPath);

        foreach (var package in packages)
        {
            Console.WriteLine("Refreshing package " + package.PublishName);

            await RefreshPackageAsync(
                package,
                repository);
        }
    }
    private async Task UpdateProjectFileAsync(
        INodeJsLocalPackage package,
        IRemoteSourceControlRepository repository)
    {
        dynamic packageJson = GetPackageJson(package.PackageJsonFilePath);

        packageJson.homepage    = repository.PublicUrl ?? string.Empty;
        packageJson.description = repository.Summary ?? string.Empty;

        var system   = repository.System;
        var revision = await system.GetRevisionOfRepository(repository);

        Console.WriteLine("Updating project revision " + revision + " of package.json for package " + package.PublishName);

        if (!Version.TryParse(packageJson.version, out Version existingVersion))
        {
            existingVersion = new Version(1, 0, 0, 0);
        }

        packageJson.version = package.Version = $"{existingVersion.Major}.{existingVersion.Minor+revision}.{existingVersion.Build}";

        await File.WriteAllTextAsync(package.PackageJsonFilePath, JsonConvert.SerializeObject(packageJson));
    }
    private async Task RefreshPackageAsync(
        ILocalPackage package,
        IRemoteSourceControlRepository repository)
    {
        foreach (var remotePackageSystem in _remotePackageSystems)
        {
            var processor = package.Processor;

            if (!remotePackageSystem.CanPublishPackage(package))
            {
                continue;
            }

            try
            {
                await processor.BuildPackageAsync(
                    package,
                    repository);

                var doesPackageExist = await remotePackageSystem.DoesPackageWithVersionExistAsync(package);

                if (doesPackageExist.HasValue && doesPackageExist.Value)
                {
                    Console.WriteLine("Can't publish package " + package.PublishName + " because it already exists");
                    continue;
                }

                await remotePackageSystem.UpsertPackageAsync(package);
            }
            catch (CommandLineException ex)
            {
                Console.WriteLine("Could not refresh the package " + package.PublishName + ". " + ex);
            }
        }

        await repository.RegisterPackageReleaseAsync(package);
    }
Пример #10
0
    private async Task PrepareProjectFileForPushingAsync(
        ILocalPackage package,
        IRemoteSourceControlRepository repository,
        XDocument projectFileXml)
    {
        var system = repository.System;

        var revision = await system.GetRevisionOfRepository(repository);

        Console.WriteLine("Updating project revision " + revision + " of project file for package " + package.PublishName);

        var projectUrlElement        = GetPackageProjectUrlElement(projectFileXml);
        var descriptionElement       = GetDescriptionElement(projectFileXml);
        var versionElement           = GetProjectFileVersionElement(projectFileXml);
        var repositoryUrlElement     = GetPackageRepositoryUrlElement(projectFileXml);
        var repositoryTypeElement    = GetPackageRepositoryTypeElement(projectFileXml);
        var packageReadmeFileElement = GetPackageReadmeFileElement(projectFileXml);

        if (!Version.TryParse(versionElement.Value, out Version? existingVersion))
        {
            existingVersion = new Version(1, 0, 0, 0);
        }

        projectUrlElement.Value        = repository.PublicUrl ?? string.Empty;
        descriptionElement.Value       = repository.Summary ?? string.Empty;
        versionElement.Value           = package.Version = $"{existingVersion.Major}.{existingVersion.Minor+revision}.{existingVersion.Build}";
        repositoryUrlElement.Value     = repository.ContributeUrl;
        repositoryTypeElement.Value    = "git";
        packageReadmeFileElement.Value = "README.md";

        var readmeIncludeElement = _projectFileParser.CreateItemGroupElement(projectFileXml, "None");

        readmeIncludeElement.SetAttributeValue("Include", "../../README.md");
        readmeIncludeElement.SetAttributeValue("Pack", "true");
        readmeIncludeElement.SetAttributeValue("PackagePath", "\\");
    }