Example #1
0
        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);
        }
Example #2
0
        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;
        }
Example #3
0
        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);
                }
            }
        }
Example #4
0
        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;
                }
            }
        }
Example #5
0
        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);
        }
Example #6
0
        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;
        }
Example #7
0
 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();
 }
Example #8
0
        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;
        }
Example #9
0
 public GithubRelease GetLatestRelease(GithubRef reference)
 {
     return(GetAllReleases(reference).FirstOrDefault());
 }
Example #10
0
 public GithubRepo GetRepo(GithubRef reference)
 {
     return(JsonConvert.DeserializeObject <GithubRepo>(
                Call($"repos/{reference.Repository}")
                ));
 }
Example #11
0
        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;
        }
Example #12
0
 public GithubRepo GetRepo(GithubRef reference)
 {
     return(JsonConvert.DeserializeObject <GithubRepo>(Call(string.Format("repos/{0}", reference.Repository))));
 }
Example #13
0
 public GithubRepo GetRepo(GithubRef reference)
 {
     return JsonConvert.DeserializeObject<GithubRepo>(Call(string.Format("repos/{0}", reference.Repository)));
 }