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)); }
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); } }
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); }
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", "\\"); }