public List <Project> GetProjects() { var issueTypes = new List <Type>(); var projects = new List <Project>(); try { "Getting a list of issue types from JIRA".Debug(); //https://yoursite.atlassian.net/rest/api/2/issuetype var issueTypeRequest = CreateRequest("rest/api/2/issuetype", Method.GET); var issueTypeResponse = ExecuteRequest(issueTypeRequest); if (issueTypeResponse.StatusCode == HttpStatusCode.OK) { "JIRA issue types retrieved. Deserializing results.".Debug(); var jiraIssueTypes = new JsonSerializer <List <IssueType> >().DeserializeFromString(issueTypeResponse.Content); if (jiraIssueTypes != null && jiraIssueTypes.Any()) { issueTypes.AddRange(jiraIssueTypes.Select(jiraIssueType => new Type(jiraIssueType.Name))); } } "Getting projects from JIRA".Debug(); //https://yoursite.atlassian.net/rest/api/2/project var request = CreateRequest("rest/api/2/project", Method.GET); var jiraResp = ExecuteRequest(request); if (jiraResp.StatusCode != HttpStatusCode.OK) { string.Format("Failed to get projects from JIRA. {0}: {1}", jiraResp.StatusCode, jiraResp.ErrorMessage ?? string.Empty).Warn(); //var serializer = new JsonSerializer<ErrorMessage>(); //var errorMessage = serializer.DeserializeFromString(jiraResp.Content); return(projects); } "JIRA projects retrieved. Deserializing results.".Debug(); var resp = new JsonSerializer <List <JiraProject> >().DeserializeFromString(jiraResp.Content); if (resp != null && resp.Any()) { projects.AddRange( resp.Select( jiraProject => new Project(jiraProject.Key, jiraProject.Name, issueTypes, GetProjectStates(jiraProject.Key)))); } else { "No JIRA projects were retrieved. Please check account access to projects.".Error(); } } catch (Exception ex) { "Error getting JIRA projects.".Error(ex); } return(projects); }
protected override void Synchronize(BoardMapping project) { Log.Debug("Polling GitHub for Pull Requests"); var queryAsOfDate = QueryDate.AddMilliseconds(Configuration.PollingFrequency * -1.5); //https://api.github.com/repos/{0}/{1}/pulls?state=Open var request = new RestRequest(string.Format("repos/{0}/{1}/pulls", Configuration.Target.Host, project.Identity.Target), Method.GET); request.AddParameter("state", project.QueryStates[0]); var resp = _restClient.Execute(request); if (resp.StatusCode != HttpStatusCode.OK) { var serializer = new JsonSerializer <ErrorMessage>(); var errorMessage = serializer.DeserializeFromString(resp.Content); Log.Error(string.Format("Unable to get Pull Requests from GitHub, Error: {0}. Check your board/repo mapping configuration.", errorMessage.Message)); return; } var pulls = new JsonSerializer <List <Pull> >().DeserializeFromString(resp.Content); Log.Info("\nQueried [{0}] at {1} for changes after {2}", project.Identity.Target, QueryDate, queryAsOfDate.ToString("o")); if (pulls != null && pulls.Any() && pulls[0].Id > 0) { foreach (var pull in pulls) { if (pull.Id > 0) { Log.Info("Pull Requests [{0}]: {1}, {2}, {3}", pull.Number, pull.Title, pull.User.Login, pull.State); // does this workitem have a corresponding card? var card = LeanKit.GetCardByExternalId(project.Identity.LeanKit, pull.Id + "|" + pull.Number.ToString()); if (card == null || !card.ExternalSystemName.Equals(ServiceName, StringComparison.OrdinalIgnoreCase)) { Log.Debug("Create new card for Pull Request [{0}]", pull.Number); CreateCardFromItem(project, pull); } else { Log.Debug("Previously created a card for Pull Request [{0}]", pull.Number); if (project.UpdateCards) { PullUpdated(pull, card, project); } else { Log.Info("Skipped card update because 'UpdateCards' is disabled."); } } } } Log.Info("{0} item(s) queried.\n", pulls.Count); } }
public List<Project> GetProjects() { var issueTypes = new List<Type>(); var projects = new List<Project>(); try { "Getting a list of issue types from JIRA".Debug(); //https://yoursite.atlassian.net/rest/api/2/issuetype var issueTypeRequest = new RestRequest("/rest/api/2/issuetype", Method.GET); var issueTypeResponse = _restClient.Execute(issueTypeRequest); if (issueTypeResponse.StatusCode == HttpStatusCode.OK) { "JIRA issue types retrieved. Deserializing results.".Debug(); var jiraIssueTypes = new JsonSerializer<List<IssueType>>().DeserializeFromString(issueTypeResponse.Content); if (jiraIssueTypes != null && jiraIssueTypes.Any()) { issueTypes.AddRange(jiraIssueTypes.Select(jiraIssueType => new Type(jiraIssueType.Name))); } } "Getting projects from JIRA".Debug(); //https://yoursite.atlassian.net/rest/api/2/project var request = new RestRequest("/rest/api/2/project", Method.GET); var jiraResp = _restClient.Execute(request); if (jiraResp.StatusCode != HttpStatusCode.OK) { string.Format("Failed to get projects from JIRA. {0}: {1}", jiraResp.StatusCode, jiraResp.ErrorMessage ?? string.Empty).Warn(); //var serializer = new JsonSerializer<ErrorMessage>(); //var errorMessage = serializer.DeserializeFromString(jiraResp.Content); return projects; } "JIRA projects retrieved. Deserializing results.".Debug(); var resp = new JsonSerializer<List<JiraProject>>().DeserializeFromString(jiraResp.Content); if (resp != null && resp.Any()) { projects.AddRange( resp.Select( jiraProject => new Project(jiraProject.Key, jiraProject.Name, issueTypes, GetProjectStates(jiraProject.Key)))); } } catch (Exception ex) { "Error getting JIRA projects.".Error(ex); } return projects; }
private List<State> GetProjectStates(string projectKey) { "Getting JIRA project states.".Debug(); var states = new SortedList<string, State>(); try { //https://yoursite.atlassian.net/rest/api/2/project/{key}/statuses var request = new RestRequest(string.Format("/rest/api/2/project/{0}/statuses", projectKey), Method.GET); var response = _restClient.Execute(request); if (response.StatusCode == HttpStatusCode.OK) { "Retrieved project states, deserializing.".Debug(); var jiraIssueTypes = new JsonSerializer<List<IssueType>>().DeserializeFromString(response.Content); if (jiraIssueTypes != null && jiraIssueTypes.Any()) { foreach (var jiraIssueType in jiraIssueTypes) { if (jiraIssueType.Statuses != null && jiraIssueType.Statuses.Any()) { foreach (var jiraState in jiraIssueType.Statuses) { if (!states.ContainsKey(jiraState.Name)) states.Add(jiraState.Name, new State(jiraState.Name)); } } } } } else { "First attempt to retrieve states failed. Retrying with JIRA 5.x API.".Debug(); // JIRA 5.x has one list of statuses for all projects // http://example.com:8080/jira/rest/api/2/status request = new RestRequest("/rest/api/2/status", Method.GET); response = _restClient.Execute(request); if (response.StatusCode == HttpStatusCode.OK) { "Retrieved project states, deserializing.".Debug(); var jiraStates = new JsonSerializer<List<Status>>().DeserializeFromString(response.Content); if (jiraStates != null && jiraStates.Any()) { foreach (var jiraStatus in jiraStates) { if (!states.ContainsKey(jiraStatus.Name)) states.Add(jiraStatus.Name, new State(jiraStatus.Name)); } } } } } catch (Exception ex) { "Error getting JIRA project states.".Error(ex); } return states.Values.ToList(); }
private List <State> GetProjectStates(string projectKey) { "Getting JIRA project states.".Debug(); var states = new SortedList <string, State>(); try { //https://yoursite.atlassian.net/rest/api/2/project/{key}/statuses var request = new RestRequest(string.Format("/rest/api/2/project/{0}/statuses", projectKey), Method.GET); var response = _restClient.Execute(request); if (response.StatusCode == HttpStatusCode.OK) { "Retrieved project states, deserializing.".Debug(); var jiraIssueTypes = new JsonSerializer <List <IssueType> >().DeserializeFromString(response.Content); if (jiraIssueTypes != null && jiraIssueTypes.Any()) { foreach (var jiraIssueType in jiraIssueTypes) { if (jiraIssueType.Statuses != null && jiraIssueType.Statuses.Any()) { foreach (var jiraState in jiraIssueType.Statuses) { if (!states.ContainsKey(jiraState.Name)) { states.Add(jiraState.Name, new State(jiraState.Name)); } } } } } } else { "First attempt to retrieve states failed. Retrying with JIRA 5.x API.".Debug(); // JIRA 5.x has one list of statuses for all projects // http://example.com:8080/jira/rest/api/2/status request = new RestRequest("/rest/api/2/status", Method.GET); response = _restClient.Execute(request); if (response.StatusCode == HttpStatusCode.OK) { "Retrieved project states, deserializing.".Debug(); var jiraStates = new JsonSerializer <List <Status> >().DeserializeFromString(response.Content); if (jiraStates != null && jiraStates.Any()) { foreach (var jiraStatus in jiraStates) { if (!states.ContainsKey(jiraStatus.Name)) { states.Add(jiraStatus.Name, new State(jiraStatus.Name)); } } } } } } catch (Exception ex) { "Error getting JIRA project states.".Error(ex); } return(states.Values.ToList()); }