public IEnumerable <Metadata> Transform(Metadata metadata, TransformOptions opts) { if (metadata.Kref != null && metadata.Kref.Source == "github") { var json = metadata.Json(); Log.InfoFormat("Executing GitHub transformation with {0}", metadata.Kref); Log.DebugFormat("Input metadata:{0}{1}", Environment.NewLine, json); var useSourceAchive = false; var githubMetadata = (JObject)json["x_netkan_github"]; if (githubMetadata != null) { var githubUseSourceArchive = (bool?)githubMetadata["use_source_archive"]; if (githubUseSourceArchive != null) { useSourceAchive = githubUseSourceArchive.Value; } } var ghRef = new GithubRef(metadata.Kref, useSourceAchive, _matchPreleases); // Get the GitHub repository var ghRepo = _api.GetRepo(ghRef); if (ghRepo.Archived) { Log.Warn("Repo is archived, consider freezing"); } var versions = _api.GetAllReleases(ghRef); if (opts.SkipReleases.HasValue) { versions = versions.Skip(opts.SkipReleases.Value); } if (opts.Releases.HasValue) { versions = versions.Take(opts.Releases.Value); } bool returnedAny = false; foreach (GithubRelease rel in versions) { returnedAny = true; yield return(TransformOne(metadata, metadata.Json(), ghRef, ghRepo, rel)); } if (!returnedAny) { Log.WarnFormat("No releases found for {0}", ghRef.Repository); yield return(metadata); } } else { yield return(metadata); } }
public Metadata Transform(Metadata metadata) { if (metadata.Kref != null && metadata.Kref.Source == "github") { var json = metadata.Json(); Log.InfoFormat("Executing GitHub transformation with {0}", metadata.Kref); Log.DebugFormat("Input metadata:{0}{1}", Environment.NewLine, json); var useSourceAchive = false; var githubMetadata = (JObject)json["x_netkan_github"]; if (githubMetadata != null) { var githubUseSourceArchive = (bool?)githubMetadata["use_source_archive"]; if (githubUseSourceArchive != null) { useSourceAchive = githubUseSourceArchive.Value; } } var ghRef = new GithubRef(metadata.Kref, useSourceAchive, _matchPreleases); // Find the release on github and download. var ghRelease = _api.GetLatestRelease(ghRef); if (ghRelease != null) { json.SafeAdd("version", ghRelease.Version.ToString()); json.SafeAdd("author", ghRelease.Author); json.SafeAdd("download", Uri.EscapeUriString(ghRelease.Download.ToString())); // Make sure resources exist. if (json["resources"] == null) { json["resources"] = new JObject(); } var resourcesJson = (JObject)json["resources"]; resourcesJson.SafeAdd("repository", GithubPage(ghRef.Repository)); Log.DebugFormat("Transformed metadata:{0}{1}", Environment.NewLine, json); return(new Metadata(json)); } else { Log.WarnFormat("No releases found for {0}", ghRef.Repository); } } return(metadata); }
public IEnumerable <Metadata> Transform(Metadata metadata) { if (metadata.Kref != null && metadata.Kref.Source == "github") { var json = metadata.Json(); Log.InfoFormat("Executing GitHub transformation with {0}", metadata.Kref); Log.DebugFormat("Input metadata:{0}{1}", Environment.NewLine, json); var useSourceAchive = false; var githubMetadata = (JObject)json["x_netkan_github"]; if (githubMetadata != null) { var githubUseSourceArchive = (bool?)githubMetadata["use_source_archive"]; if (githubUseSourceArchive != null) { useSourceAchive = githubUseSourceArchive.Value; } } var ghRef = new GithubRef(metadata.Kref, useSourceAchive, _matchPreleases); // Get the GitHub repository var ghRepo = _api.GetRepo(ghRef); var versions = _api.GetAllReleases(ghRef); if (_releases.HasValue) { versions = versions.Take(_releases.Value); } foreach (GithubRelease rel in versions) { yield return(TransformOne(metadata, metadata.Json(), ghRef, ghRepo, rel)); } } else { yield return(metadata); } }
private Metadata TransformOne(Metadata metadata, JObject json, GithubRef ghRef, GithubRepo ghRepo, GithubRelease ghRelease) { // Make sure resources exist. if (json["resources"] == null) { json["resources"] = new JObject(); } var resourcesJson = (JObject)json["resources"]; if (!string.IsNullOrWhiteSpace(ghRepo.Description)) { json.SafeAdd("abstract", ghRepo.Description); } // GitHub says NOASSERTION if it can't figure out the repo's license if (!string.IsNullOrWhiteSpace(ghRepo.License?.Id) && ghRepo.License.Id != "NOASSERTION") { json.SafeAdd("license", ghRepo.License.Id); } if (!string.IsNullOrWhiteSpace(ghRepo.Homepage)) { resourcesJson.SafeAdd("homepage", ghRepo.Homepage); } resourcesJson.SafeAdd("repository", ghRepo.HtmlUrl); if (ghRelease != null) { json.SafeAdd("version", ghRelease.Version.ToString()); json.SafeAdd("author", ghRelease.Author); json.SafeAdd("download", ghRelease.Download.ToString()); json.SafeAdd(Model.Metadata.UpdatedPropertyName, ghRelease.AssetUpdated); if (ghRef.Project.Contains("_")) { json.SafeAdd("name", ghRef.Project.Replace("_", " ")); } else if (ghRef.Project.Contains("-")) { json.SafeAdd("name", ghRef.Project.Replace("-", " ")); } else if (ghRef.Project.Contains(".")) { json.SafeAdd("name", ghRef.Project.Replace(".", " ")); } else { var repoName = ghRef.Project; for (var i = 1; i < repoName.Length - 1; ++i) { if (char.IsLower(repoName[i - 1]) && char.IsUpper(repoName[i]) || repoName[i - 1] != ' ' && char.IsUpper(repoName[i]) && char.IsLower(repoName[i + 1])) { repoName = repoName.Insert(i, " "); } } json.SafeAdd("name", repoName); } Log.DebugFormat("Transformed metadata:{0}{1}", Environment.NewLine, json); return(new Metadata(json)); } else { Log.WarnFormat("No releases found for {0}", ghRef.Repository); return(metadata); } }
public Metadata Transform(Metadata metadata) { if (metadata.Kref != null && metadata.Kref.Source == "github") { var json = metadata.Json(); Log.InfoFormat("Executing GitHub transformation with {0}", metadata.Kref); Log.DebugFormat("Input metadata:{0}{1}", Environment.NewLine, json); var useSourceAchive = false; var githubMetadata = (JObject)json["x_netkan_github"]; if (githubMetadata != null) { var githubUseSourceArchive = (bool?)githubMetadata["use_source_archive"]; if (githubUseSourceArchive != null) { useSourceAchive = githubUseSourceArchive.Value; } } var ghRef = new GithubRef(metadata.Kref, useSourceAchive, _matchPreleases); // Get the GitHub repository var ghRepo = _api.GetRepo(ghRef); // Get the GitHub release var ghRelease = _api.GetLatestRelease(ghRef); // Make sure resources exist. if (json["resources"] == null) { json["resources"] = new JObject(); } var resourcesJson = (JObject)json["resources"]; if (!string.IsNullOrWhiteSpace(ghRepo.Description)) { json.SafeAdd("abstract", ghRepo.Description); } if (!string.IsNullOrWhiteSpace(ghRepo.Homepage)) { resourcesJson.SafeAdd("homepage", ghRepo.Homepage); } resourcesJson.SafeAdd("repository", ghRepo.HtmlUrl); if (ghRelease != null) { json.SafeAdd("version", ghRelease.Version.ToString()); json.SafeAdd("author", ghRelease.Author); json.SafeAdd("download", Uri.EscapeUriString(ghRelease.Download.ToString())); json.SafeAdd(Model.Metadata.UpdatedPropertyName, ghRelease.AssetUpdated); if (ghRef.Project.Contains("_")) { json.SafeAdd("name", ghRef.Project.Replace("_", " ")); } else if (ghRef.Project.Contains("-")) { json.SafeAdd("name", ghRef.Project.Replace("-", " ")); } else if (ghRef.Project.Contains(".")) { json.SafeAdd("name", ghRef.Project.Replace(".", " ")); } else { var repoName = ghRef.Project; for (var i = 1; i < repoName.Length - 1; ++i) { if (char.IsLower(repoName[i - 1]) && char.IsUpper(repoName[i]) || repoName[i - 1] != ' ' && char.IsUpper(repoName[i]) && char.IsLower(repoName[i + 1])) { repoName = repoName.Insert(i, " "); } } json.SafeAdd("name", repoName); } Log.DebugFormat("Transformed metadata:{0}{1}", Environment.NewLine, json); return(new Metadata(json)); } else { Log.WarnFormat("No releases found for {0}", ghRef.Repository); } } return(metadata); }
public IEnumerable <Metadata> Transform(Metadata metadata, TransformOptions opts) { if (metadata.Kref != null && metadata.Kref.Source == "github") { var json = metadata.Json(); Log.InfoFormat("Executing GitHub transformation with {0}", metadata.Kref); Log.DebugFormat("Input metadata:{0}{1}", Environment.NewLine, json); var useSourceAchive = false; var githubMetadata = (JObject)json["x_netkan_github"]; if (githubMetadata != null) { var githubUseSourceArchive = (bool?)githubMetadata["use_source_archive"]; if (githubUseSourceArchive != null) { useSourceAchive = githubUseSourceArchive.Value; } } var ghRef = new GithubRef(metadata.Kref, useSourceAchive, _matchPreleases); // Get the GitHub repository var ghRepo = _api.GetRepo(ghRef); if (ghRepo.Archived) { Log.Warn("Repo is archived, consider freezing"); } var releases = _api.GetAllReleases(ghRef); if (opts.SkipReleases.HasValue) { releases = releases.Skip(opts.SkipReleases.Value); } if (opts.Releases.HasValue) { releases = releases.Take(opts.Releases.Value); } bool returnedAny = false; foreach (GithubRelease rel in releases) { if (ghRef.VersionFromAsset != null) { Log.DebugFormat("Found version_from_asset regex, inflating all assets"); foreach (var asset in rel.Assets) { var match = ghRef.VersionFromAsset.Match(asset.Name); if (!match.Success) { continue; } var extractedVersion = match.Groups["version"]; if (!extractedVersion.Success) { throw new Exception("version_from_asset contains no 'version' capturing group"); } returnedAny = true; yield return(TransformOne(metadata, metadata.Json(), ghRef, ghRepo, rel, asset, extractedVersion.Value)); } } else { if (rel.Assets.Count > 1) { Log.WarnFormat("Multiple assets found for {0} {1} without `version_from_asset`", metadata.Identifier, rel.Tag); } returnedAny = true; yield return(TransformOne(metadata, metadata.Json(), ghRef, ghRepo, rel, rel.Assets.FirstOrDefault(), rel.Tag.ToString())); } } if (!returnedAny) { if (ghRef.Filter != Constants.DefaultAssetMatchPattern) { Log.WarnFormat("No releases found for {0} with asset_match {1}", ghRef.Repository, ghRef.Filter); } else if (ghRef.VersionFromAsset != null) { Log.WarnFormat("No releases found for {0} with version_from_asset {1}", ghRef.Repository, ghRef.VersionFromAsset); } else { Log.WarnFormat("No releases found for {0}", ghRef.Repository); } yield return(metadata); } } else { yield return(metadata); } }
private Metadata TransformOne( Metadata metadata, JObject json, GithubRef ghRef, GithubRepo ghRepo, GithubRelease ghRelease, GithubReleaseAsset ghAsset, String version ) { if (!string.IsNullOrWhiteSpace(ghRepo.Description)) { json.SafeAdd("abstract", ghRepo.Description); } // GitHub says NOASSERTION if it can't figure out the repo's license if (!string.IsNullOrWhiteSpace(ghRepo.License?.Id) && ghRepo.License.Id != "NOASSERTION") { json.SafeAdd("license", ghRepo.License.Id); } // Make sure resources exist. if (json["resources"] == null) { json["resources"] = new JObject(); } var resourcesJson = (JObject)json["resources"]; if (!string.IsNullOrWhiteSpace(ghRepo.Homepage)) { resourcesJson.SafeAdd("homepage", ghRepo.Homepage); } resourcesJson.SafeAdd("repository", ghRepo.HtmlUrl); if (ghRepo.HasIssues) { resourcesJson.SafeAdd("bugtracker", $"{ghRepo.HtmlUrl}/issues"); } if (ghRelease != null) { json.SafeAdd("version", version); json.SafeAdd("author", () => getAuthors(ghRepo, ghRelease)); json.Remove("$kref"); json.SafeAdd("download", ghAsset.Download.ToString()); json.SafeAdd(Metadata.UpdatedPropertyName, ghAsset.Updated); if (ghRef.Project.Contains("_")) { json.SafeAdd("name", ghRef.Project.Replace("_", " ")); } else if (ghRef.Project.Contains("-")) { json.SafeAdd("name", ghRef.Project.Replace("-", " ")); } else if (ghRef.Project.Contains(".")) { json.SafeAdd("name", ghRef.Project.Replace(".", " ")); } else { var repoName = ghRef.Project; for (var i = 1; i < repoName.Length - 1; ++i) { if (char.IsLower(repoName[i - 1]) && char.IsUpper(repoName[i]) || repoName[i - 1] != ' ' && char.IsUpper(repoName[i]) && char.IsLower(repoName[i + 1])) { repoName = repoName.Insert(i, " "); } } json.SafeAdd("name", repoName); } json.SafeMerge( "x_netkan_version_pieces", JObject.FromObject(new Dictionary <string, string> { { "tag", ghRelease.Tag.ToString() } }) ); Log.DebugFormat("Transformed metadata:{0}{1}", Environment.NewLine, json); return(new Metadata(json)); } else { Log.WarnFormat("No releases found for {0}", ghRef.Repository); return(metadata); } }