Skip to content

v0.32.0

Released: 2026-07-25

Highlights

This release renames the module to go-atlassian to support a multi-product Atlassian architecture, and adds a new Confluence client package, a report engine package, and a set of Agile CLI commands for boards, sprints, and workflow transitions. It also adds duplicate custom field name handling and project-based field filtering to address the common Jira scenario where multiple custom fields share the same display name.

New Features

Module Rename: go-atlassian

The module has been renamed from github.com/grokify/gojira to github.com/grokify/go-atlassian to support a multi-product Atlassian architecture (Jira + Confluence). The root package (atlassian) and the rest package have been consolidated into a single jira sub-package, following the product-per-package pattern:

// Before
import "github.com/grokify/gojira/rest"

// After
import "github.com/grokify/go-atlassian/jira"

Consumer imports across cmd/, core/, xml/, and mcpserver/ have all been updated. See Migration Guide below.

As part of this consolidation, the jira package also gains a board service, clone, webhook, and workflow capabilities, createmeta validation support in core, an MCP server expanded to 18 tools, and output format support for TOON, CSV, Markdown, and table rendering.

Confluence Client Package

A new confluence package provides a Confluence REST API client with a Storage Format intermediate representation (IR) for parsing, rendering, and validating Confluence page content:

import "github.com/grokify/go-atlassian/confluence"

client := confluence.NewClient(...)

See the confluence/storage sub-package for the Storage Format parser, renderer, and validator.

Report Engine Package

A new report package adds a configurable report engine with template-based rendering, section processors, and export formats for Jira issue data:

import "github.com/grokify/go-atlassian/report"

Includes an HTML export format and a sprint-report.yaml template as a starting point for custom reports.

Agile CLI Commands

The gojira CLI gains a full set of commands for Agile project management and issue workflows:

Board / Sprint:

gojira boards
gojira sprints
gojira sprint-issues
gojira sprint-move

Reports:

gojira velocity
gojira burndown
gojira cycle-time
gojira worklog

Workflow:

gojira transition
gojira transitions
gojira bulk-transition

Issues:

gojira clone
gojira bulk-update
gojira link
gojira issue-types
gojira report

Duplicate Custom Field Name Support

When multiple custom fields share the same name (e.g., "Module" appearing twice from copied schemes), you can now:

SDK - Return all matching fields:

// Get all fields named "Module" (may return multiple)
fields, err := client.CustomFieldAPI.GetCustomFieldsByName("Module")

// Get field by exact ID
field, err := client.CustomFieldAPI.GetCustomFieldByID("customfield_12345")

// Find duplicate field names
dupes := fields.DuplicateNames() // ["Module", "Sprint"]

// Map names to IDs
nameToIDs := fields.MapNameToIDs() // {"Module": ["customfield_123", "customfield_456"]}

CLI - Detect duplicates:

# Show only fields with duplicate names
gojira fields --show-duplicates

Project-Based Field Filtering

Filter custom fields by which project they're available in using Jira's createmeta API:

SDK:

// Get custom fields available in project ABC
fields, err := client.CustomFieldAPI.GetCustomFieldsForProject(ctx, "ABC")

// Get issue types for a project
issueTypes, err := client.CreateMetaAPI.GetIssueTypes(ctx, "ABC")

// Get fields for specific issue type
fields, err := client.CreateMetaAPI.GetFields(ctx, "ABC", "10001")

CLI:

# List fields available in project ABC
gojira fields --project ABC

# List fields for specific issue type in project
gojira fields --project ABC --issue-type 10001

CustomFieldSet Name-Based Lookups

New methods for resolving custom field values from issues by display name:

// Get all values for fields named "Module" from an issue
values := cfSet.IssueCustomFieldsByName(issue, "Module")

// Get only populated values (recommended for ambiguous names)
populated := cfSet.IssueCustomFieldsByNamePopulated(issue, "Module")

// Count issues by custom field name (handles duplicates)
counts, err := issuesSet.CountsByCustomFieldName("Module", cfSet, true)

Breaking Changes

Module Rename: go-atlassian

  • Module renamed from github.com/grokify/gojira to github.com/grokify/go-atlassian
  • Root package (atlassian) and rest package merged into a new jira sub-package
  • All consumer imports (cmd/, core/, xml/, mcpserver/) updated accordingly

See Migration Guide for update instructions.

API Typo Fixes

  • TransitionsAPIReponse renamed to TransitionsAPIResponse (typo fix)
  • ReadyforPlanningName renamed to ReadyForPlanningName (typo fix)
  • ReadyForDevlopmentName renamed to ReadyForDevelopmentName (typo fix)

Bug Fixes

  • JQL builder now correctly quotes field names containing spaces

Changes

  • Improved GetCustomField() error messages to distinguish "not found" vs "multiple found"
  • Consolidated CLI IssueMeta type with shared jira.IssueOutput
  • Removed commented-out code from multiple files

Documentation

  • Added go-atlassian migration plan, roadmap specs, custom-fields guide, and troubleshooting guide
  • Renamed gojira/rest references to go-atlassian/jira across README, SDK guides, release notes, specs, and CLI docs
  • Standardized naming convention: "Go-Atlassian" for prose/headings, go-atlassian for import paths, URLs, and CLI references

Installation

go install github.com/grokify/go-atlassian/cmd/gojira@latest

Migration Guide

From v0.31.0

The module path and internal package layout changed in this release:

  1. Update your go.mod and imports from github.com/grokify/gojira to github.com/grokify/go-atlassian:
go get github.com/grokify/go-atlassian@v0.32.0
  1. Update imports from the old rest package (and the root atlassian package) to the new consolidated jira package:
// Before
import "github.com/grokify/gojira/rest"
import "github.com/grokify/gojira"

// After
import "github.com/grokify/go-atlassian/jira"
  1. Types and functions previously in the root package (Config, JQL, custom field key constants, etc.) and in rest (Client, IssueService, etc.) are now both exported from jira. Update package-qualified references (e.g., rest.Client becomes jira.Client).

  2. Apply the API typo fixes noted above (TransitionsAPIResponse, ReadyForPlanningName, ReadyForDevelopmentName) if referenced directly.

Full Changelog

  • refactor!: rename module to go-atlassian and consolidate jira package
  • feat(cli): add agile board, sprint, and workflow commands
  • feat: add confluence client package
  • feat: add report engine package
  • docs: add migration plan, roadmap, and guides
  • chore: update TASKS.md with completed items
  • docs: rename gojira/rest references to go-atlassian/jira across all docs
  • docs: use Go-Atlassian for human-readable name, go-atlassian for paths
  • chore(deps): go mod: update dependencies
  • feat(rest): add CustomFields helper methods for duplicate name handling
  • feat(rest): add CustomFieldSet methods for name-based lookups
  • feat(rest): add CountsByCustomFieldName for name-based field counting
  • feat(rest): add custom field lookup methods with improved error handling
  • feat(rest): add createmeta service for project-based field filtering
  • feat(cli): add project filtering and duplicate detection to fields command
  • fix(rest)!: fix typo in TransitionsAPIResponse struct name
  • fix(api)!: fix typos in public API method names
  • fix(jql): quote field names containing spaces in JQL queries
  • refactor(cli): consolidate duplicate IssueMeta with shared IssueOutput
  • refactor(rest): remove commented-out code and update docs
  • docs: add v1.0 PRD and TRD specifications