在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:andygrunwald/go-jira开源软件地址:https://github.com/andygrunwald/go-jira开源编程语言:Go 99.8%开源软件介绍:go-jiraGo client library for Atlassian Jira. Features
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 Jira have a look at latest Jira REST API documentation. Requirements
Note that we also run our tests against 1.13, though only the last two versions of Go are officially supported. InstallationIt is go gettable go get github.com/andygrunwald/go-jira For stable versions you can use one of our tags with gopkg.in. E.g. package main
import (
jira "gopkg.in/andygrunwald/go-jira.v1"
)
... (optional) to run unit / example tests: cd $GOPATH/src/github.com/andygrunwald/go-jira
go test -v ./... APIPlease 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. ExamplesFurther a few examples how the API can be used. A few more examples are available in the GoDoc examples section. Get a single issueLets retrieve MESOS-3325 from the Apache Mesos project. package main
import (
"fmt"
jira "github.com/andygrunwald/go-jira"
)
func main() {
jiraClient, _ := jira.NewClient(nil, "https://issues.apache.org/jira/")
issue, _, _ := jiraClient.Issue.Get("MESOS-3325", nil)
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 [email protected] in a container causes slave to be lost after a restart
// Type: Bug
// Priority: Critical
} AuthenticationThe For convenience, capability for basic and cookie-based authentication is included in the main library. Token (Jira on Atlassian Cloud)Token-based authentication uses the basic authentication scheme, with a user-generated API token in place of a user's password. You can generate a token for your user here. Additional information about Atlassian Cloud API tokens can be found here. A more thorough, runnable example is provided in the examples directory. func main() {
tp := jira.BasicAuthTransport{
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)
} Basic (self-hosted Jira)Password-based API authentication works for self-hosted Jira only, and has been deprecated for users of Atlassian Cloud. The above token authentication example may be used, substituting a user's password for a generated token. Authenticate with OAuthIf you want to connect via OAuth to your Jira Cloud instance checkout the example of using OAuth authentication with Jira in Go by @Lupus. For more details have a look at the issue #56. Create an issueExample how to create an issue. 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)
if err != nil {
panic(err)
}
i := jira.Issue{
Fields: &jira.IssueFields{
Assignee: &jira.User{
Name: "myuser",
},
Reporter: &jira.User{
Name: "youruser",
},
Description: "Test Issue",
Type: jira.IssueType{
Name: "Bug",
},
Project: jira.Project{
Key: "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)
} Change an issue statusThis is how one can change an issue status. In this example, we change the issue from "To Do" to "In Progress." 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)
if err != nil {
panic(err)
}
issue, _, _ := jiraClient.Issue.Get("FART-1", nil)
currentStatus := issue.Fields.Status.Name
fmt.Printf("Current status: %s\n", currentStatus)
var transitionID string
possibleTransitions, _, _ := jiraClient.Issue.GetTransitions("FART-1")
for _, v := range possibleTransitions {
if v.Name == "In Progress" {
transitionID = v.ID
break
}
}
jiraClient.Issue.DoTransition("FART-1", transitionID)
issue, _, _ = jiraClient.Issue.Get(testIssueID, nil)
fmt.Printf("Status after transition: %+v\n", issue.Fields.Status.Name)
} Get all the issues for JQL with PaginationJira API has limit on maxResults it can return. You may have a usecase where you need to get all issues for given JQL. This example shows reference implementation of GetAllIssues function which does pagination on Jira API to get all the issues for given JQL please look at Pagination Example Call a not implemented API endpointNot 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() {
base := "https://my.jira.com"
tp := jira.BasicAuthTransport{
Username: "username",
Password: "token",
}
jiraClient, err := jira.NewClient(tp.Client(), base)
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 structureThe 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. ContributionWe 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:
If you are new to pull requests, checkout Collaborating on projects using issues and pull requests / Creating a pull request. Dependency management
For adding new dependencies, updating dependencies, and other operations, the Daily workflow is a good place to start. Sandbox environment for testingJira 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/. ReleasingInstall standard-version npm i -g standard-version 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 LicenseThis project is released under the terms of the MIT license. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论