public bool CanPublishPackage(ILocalPackage package) { return(package is IDotNetLocalPackage && package.PublishName.StartsWith(_repositoryFilter.ProjectPrefix) && !package.PublishName.EndsWith(".Sample") && !package.PublishName.EndsWith(".Tests")); }
public bool CanPublishPackage(ILocalPackage package) { var folderPathName = Path.GetFileName(package.FolderPath); return(package is INodeJsLocalPackage && folderPathName.StartsWith(_repositoryFilter.ProjectPrefix)); }
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."); } }
public async Task UpsertPackageAsync(ILocalPackage package) { Console.WriteLine("Upserting package " + package.PublishName + " version " + package.Version + " to remote package repository."); await NpmHelper.PublishAsync( package.FolderPath, _npmSettings.AuthToken); package.PublishUrl = $"https://www.npmjs.com/package/{package.PublishName}/v/{package.Version}"; }
public async Task <bool?> DoesPackageWithVersionExistAsync(ILocalPackage package) { using var client = new HttpClient(); var response = await client.GetAsync($"https://api.nuget.org/packages/{package.PublishName.ToLowerInvariant()}.{package.Version}.nupkg"); if (response.StatusCode != HttpStatusCode.NotFound && response.IsSuccessStatusCode) { return(true); } return(false); }
public async Task UpsertPackageAsync(ILocalPackage package) { Console.WriteLine("Upserting package " + package.PublishName + " version " + package.Version + " to remote package repository."); var basePath = Path.Combine( package.FolderPath, package.PublishName + "." + package.Version); await NuGetHelper.PublishAsync( basePath + ".nupkg", _nuGetSettings.ApiKey); package.PublishUrl = $"https://www.nuget.org/packages/{package.PublishName}/{package.Version}"; }
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); }
public async Task RegisterPackageReleaseAsync(ILocalPackage package) { if (package.Version == null) { return; } if (package.PublishName == null) { return; } if (package.PublishUrl == null) { return; } var versionSlug = "v" + package.Version; var allReleases = await this._client.Repository.Release.GetAll(Owner, Name); var descriptionLine = "**" + package.PublishName + "**" + Environment.NewLine + package.PublishUrl; var existingRelease = allReleases.SingleOrDefault(x => x.TagName == versionSlug); if (existingRelease != null) { if (existingRelease.Body.Contains(descriptionLine)) { return; } await this._client.Repository.Release.Edit(Owner, Name, existingRelease.Id, new ReleaseUpdate() { Body = existingRelease.Body + Environment.NewLine + Environment.NewLine + descriptionLine }); } else { await this._client.Repository.Release.Create(Owner, Name, new NewRelease(versionSlug) { Name = versionSlug, Body = $"Published automatically by https://github.com/ffMathy/FluffySpoon.Publishers." + Environment.NewLine + Environment.NewLine + descriptionLine }); } }
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", "\\"); }
public Task <bool?> DoesPackageWithVersionExistAsync(ILocalPackage package) { return(Task.FromResult <bool?>(null)); }