1
0
mirror of https://github.com/interviewstreet/go-jira.git synced 2024-11-30 08:47:11 +02:00
Go to file
2017-01-27 23:07:11 +01:00
img Added project logo 2015-09-03 12:48:16 +02:00
mocks Add the ability to get all issues in a sprint 2016-07-26 16:18:58 -04:00
.gitignore update .gitignore 2016-05-31 12:14:19 -04:00
.travis.yml Added Golang 1.7 to travic ci 2016-10-03 13:34:19 +02:00
authentication_test.go Fixed a few fmt and debug outputs 2016-10-03 13:33:46 +02:00
authentication.go Fixed a few fmt and debug outputs 2016-10-03 13:33:46 +02:00
board_test.go Moved Board-Functionality to BoardService and renamed Sprint function according to the API 2016-07-17 11:17:29 +02:00
board.go Adds unknown map for arbitrary fields in IssueFields. Adds Custom Marshall,Unmarshall. Adds structs tag where necessary 2016-09-23 16:19:07 +02:00
issue_test.go Add Changelog to Issue and allow query parameters to issue.GET 2017-01-27 23:04:57 +01:00
issue.go Add Changelog to Issue and allow query parameters to issue.GET 2017-01-27 23:04:57 +01:00
jira_test.go Add test for NewRawRequest 2016-10-10 12:54:45 +02:00
jira.go Add UserService to handle JIRA User endpoints 2016-10-31 10:24:30 -02:00
LICENSE Initial commit 2015-08-20 17:02:46 +02:00
metaissue_test.go Minor fix to comply with go vet 2016-10-23 14:51:29 +02:00
metaissue.go Fix typo metaissue.go 2016-12-11 11:55:43 +01:00
project_test.go Renamed unit tests according golang standard 2016-07-17 12:13:08 +02:00
project.go Omit more empty attributes when converting from struct to map 2016-09-26 17:59:51 +02:00
README.md Add example to create an issue 2016-11-04 21:03:11 +01:00
sprint_test.go go fmt 2016-07-29 19:45:03 +02:00
sprint.go Renamed API method to (like JIRA API) and fixed go doc 2016-07-29 19:43:34 +02:00
user_test.go Add UserService to handle JIRA User endpoints 2016-10-31 10:24:30 -02:00
user.go Fix User.GET() method 2016-11-22 22:37:27 +01:00

go-jira

GoDoc Build Status Go Report Card Coverage Status

Go client library for Atlassian JIRA.

Go client library for Atlassian JIRA

Features

  • Authentication (HTTP Basic, OAuth, Session Cookie)
  • Create and receive issues
  • Create and retrieve issue transitions (status updates)
  • Call every API endpoint of the JIRA, even it is not directly implemented in this library

This package is not JIRA API complete (yet), but you can call every API endpoint you want. See Call a not implemented API endpoint how to do this. For all possible API endpoints of JRIA have a look at latest JIRA REST API documentation.

Compatible JIRA versions

This package was tested against JIRA v6.3.4 and v7.1.2.

Installation

It is go gettable

$ go get github.com/andygrunwald/go-jira

(optional) to run unit / example tests:

$ cd $GOPATH/src/github.com/andygrunwald/go-jira
$ go test -v ./...

API

Please have a look at the GoDoc documentation for a detailed API description.

The latest JIRA REST API documentation was the base document for this package.

Examples

Further a few examples how the API can be used. A few more examples are available in the GoDoc examples section.

Get a single issue

Lets retrieve MESOS-3325 from the Apache Mesos project.

package main

import (
	"fmt"
	"github.com/andygrunwald/go-jira"
)

func main() {
	jiraClient, _ := jira.NewClient(nil, "https://issues.apache.org/jira/")
	issue, _, _ := jiraClient.Issue.Get("MESOS-3325")

	fmt.Printf("%s: %+v\n", issue.Key, issue.Fields.Summary)
	fmt.Printf("Type: %s\n", issue.Fields.Type.Name)
	fmt.Printf("Priority: %s\n", issue.Fields.Priority.Name)

	// MESOS-3325: Running mesos-slave@0.23 in a container causes slave to be lost after a restart
	// Type: Bug
	// Priority: Critical
}

Some actions require an authenticated user. Here is an example with a session cookie authentification.

package main

import (
	"fmt"
	"github.com/andygrunwald/go-jira"
)

func main() {
	jiraClient, err := jira.NewClient(nil, "https://your.jira-instance.com/")
	if err != nil {
		panic(err)
	}

	res, err := jiraClient.Authentication.AcquireSessionCookie("username", "password")
	if err != nil || res == false {
		fmt.Printf("Result: %v\n", res)
		panic(err)
	}

	issue, _, err := jiraClient.Issue.Get("SYS-5156")
	if err != nil {
		panic(err)
	}

	fmt.Printf("%s: %+v\n", issue.Key, issue.Fields.Summary)
}

Create an issue

Example how to create an issue.

package main

import (
	"fmt"
	"github.com/andygrunwald/go-jira"
)

func main() {
	jiraClient, err := jira.NewClient(nil, "https://your.jira-instance.com/")
	if err != nil {
		panic(err)
	}

	res, err := jiraClient.Authentication.AcquireSessionCookie("username", "password")
	if err != nil || res == false {
		fmt.Printf("Result: %v\n", res)
		panic(err)
	}

	i := jira.Issue{
		Fields: &jira.IssueFields{
			Assignee: &jira.User{
				Name: "myuser",
			},
			Reporter: &jira.User{
				Name: "youruser",
			},
			Description: "Test Issue",
			Type: jira.IssueType{
				ID: "60",
			},
			Project: jira.Project{
				Name: "PROJ1",
			},
			Summary: "Just a demo issue",
		},
	}
	issue, _, err := jiraClient.Issue.Create(&i)
	if err != nil {
		panic(err)
	}

	fmt.Printf("%s: %+v\n", issue.Key, issue.Fields.Summary)
}

Call a not implemented API endpoint

Not all API endpoints of the JIRA API are implemented into go-jira. But you can call them anyway: Lets get all public projects of Atlassian`s JIRA instance.

package main

import (
	"fmt"
	"github.com/andygrunwald/go-jira"
)

func main() {
	jiraClient, _ := jira.NewClient(nil, "https://jira.atlassian.com/")
	req, _ := jiraClient.NewRequest("GET", "/rest/api/2/project", nil)

	projects := new([]jira.Project)
	_, err := jiraClient.Do(req, projects)
	if err != nil {
		panic(err)
	}

	for _, project := range *projects {
		fmt.Printf("%s: %s\n", project.Key, project.Name)
	}

	// ...
	// BAM: Bamboo
	// BAMJ: Bamboo JIRA Plugin
	// CLOV: Clover
	// CONF: Confluence
	// ...
}

Implementations

Code structure

The code structure of this package was inspired by google/go-github.

There is one main part (the client). Based on this main client the other endpoints, like Issues or Authentication are extracted in services. E.g. IssueService or AuthenticationService. These services own a responsibility of the single endpoints / usecases of JIRA.

Contribution

Contribution, in any kind of way, is highly welcome! It doesn't matter if you are not able to write code. Creating issues or holding talks and help other people to use go-jira is contribution, too! A few examples:

  • Correct typos in the README / documentation
  • Reporting bugs
  • Implement a new feature or endpoint
  • Sharing the love if go-jira and help people to get use to it

If you are new to pull requests, checkout Collaborating on projects using issues and pull requests / Creating a pull request.

License

This project is released under the terms of the MIT license.