public GithubRelease GetLatestRelease(GithubRef reference) { var json = Call(string.Format("repos/{0}/releases", reference.Repository)); Log.Debug("Parsing JSON..."); var releases = JArray.Parse(json); // Finding the most recent *stable* release means filtering // out on pre-releases. foreach (var release in releases) { // First, check for prerelease status... if (reference.UsePrelease == (bool)release["prerelease"]) { var assets = (JArray)release["assets"]; foreach (var asset in assets.Where(asset => reference.Filter.IsMatch((string)asset["name"]))) { Log.DebugFormat("Hit on {0}", asset); return(new GithubRelease((JObject)release, (JObject)asset)); } } } return(null); }
public GithubRelease GetLatestRelease(GithubRef reference) { var json = Call(string.Format("repos/{0}/releases", reference.Repository)); Log.Debug("Parsing JSON..."); var releases = JArray.Parse(json); // Finding the most recent *stable* release means filtering // out on pre-releases. foreach (var release in releases) { // First, check for prerelease status... if (reference.UsePrelease == (bool)release["prerelease"]) { var assets = (JArray)release["assets"]; foreach (var asset in assets.Where(asset => reference.Filter.IsMatch((string)asset["name"]))) { Log.DebugFormat ("Hit on {0}", asset); return new GithubRelease((JObject)release, (JObject)asset); } } } return null; }
public IEnumerable <GithubRelease> GetAllReleases(GithubRef reference) { const int perPage = 10; for (int page = 1; true; ++page) { var json = Call($"repos/{reference.Repository}/releases?per_page={perPage}&page={page}"); Log.Debug("Parsing JSON..."); var jsonReleases = JArray.Parse(json); if (jsonReleases.Count < 1) { // That's all folks! break; } var ghReleases = jsonReleases .Select(rel => new GithubRelease(reference, rel)) .Where(ghRel => // Finding the most recent *stable* release means filtering // out on pre-releases. ghRel.PreRelease == reference.UsePrerelease // Skip releases without assets && ghRel.Assets.Any()) // Insurance against GitHub returning them in the wrong order .OrderByDescending(ghRel => ghRel.PublishedAt) .ToList(); foreach (var ghRel in ghReleases) { yield return(ghRel); } } }
public IEnumerable <GithubRelease> GetAllReleases(GithubRef reference) { const int perPage = 10; for (int page = 1; true; ++page) { var json = Call($"repos/{reference.Repository}/releases?per_page={perPage}&page={page}"); Log.Debug("Parsing JSON..."); var releases = JArray.Parse(json); // Finding the most recent *stable* release means filtering // out on pre-releases. foreach (var release in releases) { // First, check for prerelease status... if (reference.UsePrerelease == (bool)release["prerelease"]) { var version = new ModuleVersion((string)release["tag_name"]); var author = (string)release["author"]["login"]; Uri download = null; DateTime?updated = null; if (reference.UseSourceArchive) { Log.Debug("Using GitHub source archive"); download = new Uri((string)release["zipball_url"]); updated = (DateTime)release["published_at"]; } else { var assets = (JArray)release["assets"]; foreach (var asset in assets.Where(asset => reference.Filter.IsMatch((string)asset["name"]))) { Log.DebugFormat("Using GitHub asset: {0}", asset["name"]); download = new Uri((string)asset["browser_download_url"]); updated = (DateTime)asset["updated_at"]; break; } } if (download != null) { yield return(new GithubRelease(author, version, download, updated)); } } } if (releases.Count < perPage) { // That's all folks! break; } } }
public GithubRelease GetLatestRelease(GithubRef reference) { var json = Call($"repos/{reference.Repository}/releases"); Log.Debug("Parsing JSON..."); var releases = JArray.Parse(json); // Finding the most recent *stable* release means filtering // out on pre-releases. foreach (var release in releases) { // First, check for prerelease status... if (reference.UsePrerelease == (bool)release["prerelease"]) { var version = new ModuleVersion((string)release["tag_name"]); var author = (string)release["author"]["login"]; Uri download = null; DateTime?updated = null; DateTime parsed; if (reference.UseSourceArchive) { Log.Debug("Using GitHub source archive"); download = new Uri((string)release["zipball_url"]); if (DateTime.TryParse(release["published_at"].ToString(), out parsed)) { updated = parsed; } } else { var assets = (JArray)release["assets"]; foreach (var asset in assets.Where(asset => reference.Filter.IsMatch((string)asset["name"]))) { Log.DebugFormat("Using GitHub asset: {0}", asset["name"]); download = new Uri((string)asset["browser_download_url"]); if (DateTime.TryParse(asset["updated_at"].ToString(), out parsed)) { updated = parsed; } break; } } if (download != null) { return(new GithubRelease(author, version, download, updated)); } } } return(null); }
public GithubRelease GetLatestRelease(GithubRef reference) { var json = Call(string.Format("repos/{0}/releases", reference.Repository)); Log.Debug("Parsing JSON..."); var releases = JArray.Parse(json); // Finding the most recent *stable* release means filtering // out on pre-releases. foreach (var release in releases) { // First, check for prerelease status... if (reference.UsePrelease == (bool)release["prerelease"]) { var version = new Version((string)release["tag_name"]); var author = (string)release["author"]["login"]; Uri download = null; if (reference.UseSourceArchive) { Log.Debug("Using GitHub source archive"); download = new Uri((string)release["zipball_url"]); } else { var assets = (JArray)release["assets"]; foreach (var asset in assets.Where(asset => reference.Filter.IsMatch((string)asset["name"]))) { Log.DebugFormat("Using GitHub asset: {0}", asset["name"]); download = new Uri((string)asset["browser_download_url"]); break; } } if (download != null) { return new GithubRelease(author, version, download); } } } return null; }
public GithubRelease(GithubRef reference, JToken json) { PreRelease = (bool)json["prerelease"]; Tag = new ModuleVersion((string)json["tag_name"]); Author = (string)json["author"]["login"]; PublishedAt = (DateTime?)json["published_at"]; Assets = reference.UseSourceArchive ? new List <GithubReleaseAsset> { new GithubReleaseAsset( Tag.ToString(), new Uri((string)json["zipball_url"]), PublishedAt) } : ((JArray)json["assets"]) .Where(asset => reference.Filter.IsMatch((string)asset["name"])) .Select(asset => new GithubReleaseAsset( (string)asset["name"], new Uri((string)asset["browser_download_url"]), (DateTime?)asset["updated_at"])) .ToList(); }
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 ghRef = new GithubRef(metadata.Kref, _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 GithubRelease GetLatestRelease(GithubRef reference) { return(GetAllReleases(reference).FirstOrDefault()); }
public GithubRepo GetRepo(GithubRef reference) { return(JsonConvert.DeserializeObject <GithubRepo>( Call($"repos/{reference.Repository}") )); }
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())); 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 GithubRepo GetRepo(GithubRef reference) { return(JsonConvert.DeserializeObject <GithubRepo>(Call(string.Format("repos/{0}", reference.Repository)))); }
public GithubRepo GetRepo(GithubRef reference) { return JsonConvert.DeserializeObject<GithubRepo>(Call(string.Format("repos/{0}", reference.Repository))); }