public static List <JiraIssue> GetIssues(this IJiraRestClient jiraRestClient, string jql, int startAt = 0, int maxResults = 200, string[] fields = null) { Argument.IsNotNull(() => jiraRestClient); var issues = new List <JiraIssue>(); var searchRequest = new JiraSearchRequest { Jql = jql, StartAt = startAt, MaxResults = maxResults, }; if (fields != null) { searchRequest.Fields.AddRange(fields); } var requestJson = JsonConvert.SerializeObject(searchRequest, GetJsonSettings()); var responseJson = jiraRestClient.ExecuteRequestRaw(Method.POST, "rest/api/2/search", requestJson); foreach (var jsonElement in responseJson.Children()) { var issue = JsonConvert.DeserializeObject <JiraIssue>(jsonElement.ToString()); issues.Add(issue); } return(issues); }
public async Task <JiraIssueResponse> GetReadyToMergeJiraTicketsAsync() { if (!AreConfigValuesSet()) { Log.Warning("Some or all of the Jira application settings aren't configured. Please configure them."); return(new JiraIssueResponse { Issues = new List <JiraTicket>() }); } try { var client = new RestClient(_baseUrl) { Authenticator = new HttpBasicAuthenticator(_username, _password) }; var restRequest = new RestRequest("2/search", Method.POST); var model = new JiraSearchRequest { jql = $"project = {_project} AND status = \"{_ticketStatus}\" AND fixVersion = \"{_fixVersion}\" order by updated DESC" }; restRequest.AddHeader("Accept", "application/json"); restRequest.AddJsonBody(model); var response = await client.ExecuteTaskAsync(restRequest); var deserializedResult = JsonConvert.DeserializeObject <JiraIssueResponse>(response.Content); // Filtering out sub-tasks as they won't have their own branch deserializedResult.Issues = deserializedResult.Issues.Where(i => !i.Fields.IssueType.SubTask); Log.Debug("Successfully retrieved: {IssueCount} issues set to Ready to Merge.", deserializedResult.Issues.Count()); return(deserializedResult); } catch (Exception ex) { Log.Error(ex.Message); throw; } }