private GithubPullRequestModel GetPullRequest(OurUmbraco.Community.Models.Repository repository, string pullRequestNumber) { GithubPullRequestModel prModel = null; var store = repository.IssuesStorageDirectory() + "/pulls/"; var issueFile = store + pullRequestNumber + ".pull.combined.json"; var issueFilePath = HostingEnvironment.MapPath(issueFile); if (File.Exists(issueFilePath)) { var content = File.ReadAllText(issueFilePath); prModel = JsonConvert.DeserializeObject <GithubPullRequestModel>(content); } return(prModel); }
private static void PopulateGitHubIssues(PerformContext context, List <Release> releases) { var repository = new OurUmbraco.Community.Models.Repository("umbraco-cms", "umbraco", "Umbraco-CMS", "Umbraco CMS"); var issuesDirectory = HostingEnvironment.MapPath($"{repository.IssuesStorageDirectory()}/"); var files = Directory.EnumerateFiles(issuesDirectory, "*.issue.combined.json").ToArray(); context.WriteLine($"Found {files.Length} issues"); foreach (var file in files) { var fileContent = File.ReadAllText(file); var issue = JsonConvert.DeserializeObject <GitHubIssueModel>(fileContent); foreach (var label in issue.labels) { if (label.name.StartsWith("release/") == false) { continue; } var version = label.name.Replace("release/", string.Empty); var release = releases.FirstOrDefault(x => x.Version == version); if (release == null) { context.WriteLine( $"Issue {issue.number} is tagged with release version {version} but this release has no corresponding node in Our"); continue; } var breaking = issue.labels.Any(x => x.name == "compatibility/breaking"); var stateLabel = issue.labels.FirstOrDefault(x => x.name.StartsWith("state/")); // default state var state = "new"; if (stateLabel != null) { // if there's a label with a state then use that as the state state = stateLabel.name.Replace("state/", string.Empty); } else if (issue.state == "closed" && issue.labels.Any(x => x.name.StartsWith("release"))) { // there is no state label applied // if the issue is closed and has a release label on it then we set it to fixed state = "fixed"; } var typeLabel = issue.labels.FirstOrDefault(x => x.name.StartsWith("type/")); var type = string.Empty; if (typeLabel != null) { type = typeLabel.name.Replace("type/", string.Empty); } release.Issues.Add(new Release.Issue { Id = issue.number.ToString(), Breaking = breaking, State = state, Title = issue.title, Type = type, Source = "GitHub" }); } } }