
โฑ๏ธExport Issue History
In this article, I would be showing you how to extract the Jira history information using a JQL query and saves it into a .csv file.
Step 1: Set up the project
Create a new directory for your project.
Open a terminal and navigate to the project directory.
Initialize a new Go module using the following command:
go mod init <module-name>
Step 2: Install the "go-atlassian" library
In the terminal, run the following command to install the "go-atlassian" library:
go get -v github.com/ctreminiom/go-atlassian
Step 3: Import the necessary packages
Create a new Go file (e.g.,
main.go
) in your project directory.Open the file and import the required packages:
package main
import (
"encoding/csv"
"fmt"
"log"
"os"
jira "github.com/ctreminiom/go-atlassian/jira/v2"
)
Step 4: Authenticate with Jira
In the main
function, create a new Jira client and authenticate using your Jira URL, username, and API token:
func main() {
jiraHost := "https://<_jira_instance_>.atlassian.net"
mailAddress := "<your_mail>"
apiToken := "<your_api_token>"
client, err := jira.New(nil, jiraHost)
if err != nil {
log.Fatal(err)
}
client.Auth.SetBasicAuth(mailAddress, apiToken)
}
Step 5: Execute the JQL query
Add the following code inside the main
function to execute the JQL query and retrieve the issues:
jql := "order by created DESC"
var startAt int
var issues []*models.IssueSchemeV2
for {
log.Printf("Executing the pagination #%v", startAt)
issuePage, _, err := client.Issue.Search.Post(
context.Background(),
jql,
nil,
[]string{"changelog"},
startAt,
50,
"")
if err != nil {
log.Fatal(err)
}
issues = append(issues, issuePage.Issues...)
if len(issuePage.Issues) == 0 {
break
}
startAt += 50
}
Step 6: Extract the issue history
Iterate over the retrieved issues and extract the changelog information.
var changelogs [][]string
for _, issue := range issues {
for _, history := range issue.Changelog.Histories {
for _, item := range history.Items {
var from string
if item.From == "" {
from = item.FromString
} else {
from = item.From
}
var to string
if item.To == "" {
to = item.ToString
} else {
to = item.To
}
changelogs = append(changelogs, []string{
issue.Key,
issue.Fields.Project.Name,
issue.Fields.Summary,
item.Field,
from,
to,
history.Created,
history.Author.EmailAddress,
})
}
}
}
Step 7: Save the issue history to a CSV file
Create a new CSV file and write the issue history data to it:
file, err := os.Create("issue_history.csv")
if err != nil {
log.Fatal(err)
}
defer file.Close()
writer := csv.NewWriter(file)
defer writer.Flush()
// Write header
if err := writer.Write([]string{"Issue Key", "Project Name", "Issue Summary", "Issue Field", "From", "To", "When", "Who?"}); err != nil {
log.Fatal(err)
}
// Write the information
if err := writer.WriteAll(changelogs); err != nil {
log.Fatal(err)
}
log.Println("Issue history saved to issue_history.csv")
Step 8: Run the program
Save the
main.go
file.In the terminal, navigate to your project directory

Last updated
Was this helpful?