コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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;
        }
コード例 #4
0
		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();
		}
コード例 #5
0
        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());
        }