1
0
mirror of https://github.com/interviewstreet/go-jira.git synced 2024-11-30 08:47:11 +02:00
go-jira/README.md

278 lines
8.1 KiB
Markdown
Raw Normal View History

2015-09-03 12:25:03 +02:00
# go-jira
[![GoDoc](https://godoc.org/github.com/andygrunwald/go-jira?status.svg)](https://godoc.org/github.com/andygrunwald/go-jira)
[![Build Status](https://travis-ci.org/andygrunwald/go-jira.svg?branch=master)](https://travis-ci.org/andygrunwald/go-jira)
2016-03-26 22:38:23 +02:00
[![Go Report Card](https://goreportcard.com/badge/github.com/andygrunwald/go-jira)](https://goreportcard.com/report/github.com/andygrunwald/go-jira)
2016-03-26 22:43:30 +02:00
2015-09-03 12:48:16 +02:00
[Go](https://golang.org/) client library for [Atlassian JIRA](https://www.atlassian.com/software/jira).
2015-09-03 12:25:03 +02:00
2018-04-28 13:30:24 +02:00
![Go client library for Atlassian JIRA](./img/logo_small.png "Go client library for Atlassian JIRA.")
2015-09-03 12:25:03 +02:00
## Features
2015-09-03 12:58:01 +02:00
* Authentication (HTTP Basic, OAuth, Session Cookie)
2017-10-27 02:54:57 +02:00
* Create and retrieve issues
* Create and retrieve issue transitions (status updates)
2017-10-27 02:54:57 +02:00
* Call every API endpoint of the JIRA, even if it is not directly implemented in this library
2016-03-27 13:02:25 +02:00
This package is not JIRA API complete (yet), but you can call every API endpoint you want. See [Call a not implemented API endpoint](#call-a-not-implemented-api-endpoint) how to do this. For all possible API endpoints of JIRA have a look at [latest JIRA REST API documentation](https://docs.atlassian.com/jira/REST/latest/).
2015-09-03 12:58:01 +02:00
## Requirements
2016-03-27 13:02:25 +02:00
* Go >= 1.8
* JIRA v6.3.4 & v7.1.2.
2015-09-03 12:25:03 +02:00
## Installation
It is go gettable
```bash
go get github.com/andygrunwald/go-jira
```
2015-09-03 12:25:03 +02:00
2017-08-31 13:59:27 +02:00
For stable versions you can use one of our tags with [gopkg.in](http://labix.org/gopkg.in). E.g.
```go
package main
import (
jira "gopkg.in/andygrunwald/go-jira.v1"
)
...
```
2015-09-03 12:25:03 +02:00
(optional) to run unit / example tests:
```bash
cd $GOPATH/src/github.com/andygrunwald/go-jira
go test -v ./...
```
2015-09-03 12:25:03 +02:00
## API
Please have a look at the [GoDoc documentation](https://godoc.org/github.com/andygrunwald/go-jira) for a detailed API description.
2015-09-03 12:48:16 +02:00
The [latest JIRA REST API documentation](https://docs.atlassian.com/jira/REST/latest/) was the base document for this package.
2015-09-03 12:25:03 +02:00
## Examples
Further a few examples how the API can be used.
A few more examples are available in the [GoDoc examples section](https://godoc.org/github.com/andygrunwald/go-jira#pkg-examples).
2015-09-03 13:35:48 +02:00
### Get a single issue
Lets retrieve [MESOS-3325](https://issues.apache.org/jira/browse/MESOS-3325) from the [Apache Mesos](http://mesos.apache.org/) project.
```go
package main
import (
"fmt"
"github.com/andygrunwald/go-jira"
)
func main() {
jiraClient, _ := jira.NewClient(nil, "https://issues.apache.org/jira/")
2017-01-29 17:15:45 +02:00
issue, _, _ := jiraClient.Issue.Get("MESOS-3325", nil)
2015-09-03 13:35:48 +02:00
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
}
```
2015-09-03 12:25:03 +02:00
### Authentication
The `go-jira` library does not handle most authentication directly. Instead, authentication should be handled within
an `http.Client`. That client can then be passed into the `NewClient` function when creating a jira client.
For convenience, capability for basic and cookie-based authentication is included in the main library.
#### Basic auth example
A more thorough, [runnable example](examples/basicauth/main.go) is provided in the examples directory. **It's worth noting that using passwords in basic auth is now deprecated and will be removed.** Jira gives you the ability to [create tokens now.](https://confluence.atlassian.com/cloud/api-tokens-938839638.html)
```go
func main() {
tp := jira.BasicAuthTransport{
2018-02-24 22:08:07 +02:00
Username: "username",
Password: "token",
}
client, err := jira.NewClient(tp.Client(), "https://my.jira.com")
u, _, err := client.User.Get("some_user")
fmt.Printf("\nEmail: %v\nSuccess!\n", u.EmailAddress)
}
```
#### Authenticate with session cookie [DEPRECATED]
JIRA [deprecated this authentication method.](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-basic-auth-and-cookie-based-auth/) It's not longer available for use.
2016-05-28 19:25:51 +02:00
#### Authenticate with OAuth
If you want to connect via OAuth to your JIRA Cloud instance checkout the [example of using OAuth authentication with JIRA in Go](https://gist.github.com/Lupus/edafe9a7c5c6b13407293d795442fe67) by [@Lupus](https://github.com/Lupus).
2017-06-15 19:13:05 +02:00
For more details have a look at the [issue #56](https://github.com/andygrunwald/go-jira/issues/56).
2016-11-04 22:03:11 +02:00
### Create an issue
Example how to create an issue.
```go
package main
import (
"fmt"
"github.com/andygrunwald/go-jira"
)
func main() {
base := "https://my.jira.com"
tp := jira.BasicAuthTransport{
Username: "username",
Password: "token",
2016-11-04 22:03:11 +02:00
}
jiraClient, err := jira.NewClient(tp.Client(), base)
if err != nil {
2016-11-04 22:03:11 +02:00
panic(err)
}
i := jira.Issue{
Fields: &jira.IssueFields{
Assignee: &jira.User{
Name: "myuser",
},
Reporter: &jira.User{
Name: "youruser",
},
Description: "Test Issue",
Type: jira.IssueType{
2017-05-11 20:39:10 +02:00
Name: "Bug",
2016-11-04 22:03:11 +02:00
},
Project: jira.Project{
2017-05-11 20:39:10 +02:00
Key: "PROJ1",
2016-11-04 22:03:11 +02:00
},
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)
}
```
2015-09-03 12:58:01 +02:00
### Call a not implemented API endpoint
2016-05-28 19:25:51 +02:00
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](https://jira.atlassian.com/).
```go
package main
import (
"fmt"
"github.com/andygrunwald/go-jira"
)
func main() {
base := "https://my.jira.com"
tp := jira.BasicAuthTransport{
Username: "username",
Password: "token",
}
jiraClient, err := jira.NewClient(tp.Client(), base)
2018-06-08 18:02:24 +02:00
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
// ...
}
```
2015-09-03 12:58:01 +02:00
2015-09-03 12:25:03 +02:00
## Implementations
2015-09-03 17:15:43 +02:00
* [andygrunwald/jitic](https://github.com/andygrunwald/jitic) - The JIRA Ticket Checker
2015-09-03 12:25:03 +02:00
2016-03-27 13:02:25 +02:00
## Code structure
The code structure of this package was inspired by [google/go-github](https://github.com/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
2019-10-17 05:19:35 +02:00
We ❤️ PR's
2016-03-27 13:02:25 +02:00
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](https://github.com/andygrunwald/go-jira) is contribution, too!
A few examples:
* Correct typos in the README / documentation
* Reporting bugs
* Implement a new feature or endpoint
2018-08-29 19:03:56 +02:00
* Sharing the love of [go-jira](https://github.com/andygrunwald/go-jira) and help people to get use to it
2016-03-27 13:02:25 +02:00
If you are new to pull requests, checkout [Collaborating on projects using issues and pull requests / Creating a pull request](https://help.github.com/articles/creating-a-pull-request/).
2018-02-17 21:14:47 +02:00
### Dependency management
`go-jira` uses `go modules` for dependency management. After cloning the repo, it's easy to make sure you have the correct dependencies by running `go mod tidy`.
2018-02-17 21:14:47 +02:00
For adding new dependencies, updating dependencies, and other operations, the [Daily workflow](https://github.com/golang/go/wiki/Modules#daily-workflow) is a good place to start.
2018-02-17 21:14:47 +02:00
2018-02-24 21:29:55 +02:00
### Sandbox environment for testing
Jira offers sandbox test environments at http://go.atlassian.com/cloud-dev.
You can read more about them at https://developer.atlassian.com/blog/2016/04/cloud-ecosystem-dev-env/.
## Releasing
2020-01-24 18:33:30 +02:00
Install [standard-version](https://github.com/conventional-changelog/standard-version)
```bash
npm i -g standard-version
```
```bash
standard-version
git push --tags
```
Manually copy/paste text from changelog (for this new version) into the release on Github.com. E.g.
[https://github.com/andygrunwald/go-jira/releases/edit/v1.11.0](https://github.com/andygrunwald/go-jira/releases/edit/v1.11.0)
2015-09-03 12:25:03 +02:00
## License
This project is released under the terms of the [MIT license](http://en.wikipedia.org/wiki/MIT_License).