public async Task<IReadOnlyCollection<ReleaseInfo>> GetReleaseInfosAsync() {
var github = new GitHubClient(new ProductHeaderValue(_clientName));
var result = new List<ReleaseInfo>();
foreach (var release in await github.Repository.Release.GetAll(_repositoryOwner, _repositoryName)) {
var r = new ReleaseInfo {
Name = String.IsNullOrWhiteSpace(release.Name) ? release.TagName : release.Name,
ReleaseNotes = release.Body,
PublishedAt = release.PublishedAt,
CreatedAt = release.CreatedAt,
HtmlUrl = release.HtmlUrl,
TagName = release.TagName,
IsPrerelease = release.Prerelease,
};
var assets = await github.Repository.Release.GetAllAssets(_repositoryOwner, _repositoryName, release.Id);
var asset = assets.FirstOrDefault(a => a.Name.EndsWith(".msi"));
if (asset != null) {
r.Filename = asset.Name;
r.DownloadUrl = asset.Url;
}
var match = Regex.Match(r.TagName, @"^v(?<major>\d+)\.(?<minor>\d+)(\.(?<patch>\d+))?$");
if (match.Success) {
int major, minor, patch;
Int32.TryParse(match.Groups["major"].Value, out major);
Int32.TryParse(match.Groups["minor"].Value, out minor);
if (Int32.TryParse(match.Groups["patch"].Value, out patch)) {
r.Version = new Version(major, minor, patch);
} else {
r.Version = new Version(major, minor);
}
}
result.Add(r);
}
return result;
}