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:
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:
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:
Reports:
Workflow:
Issues:
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:
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/gojiratogithub.com/grokify/go-atlassian - Root package (
atlassian) andrestpackage merged into a newjirasub-package - All consumer imports (
cmd/,core/,xml/,mcpserver/) updated accordingly
See Migration Guide for update instructions.
API Typo Fixes¶
TransitionsAPIReponserenamed toTransitionsAPIResponse(typo fix)ReadyforPlanningNamerenamed toReadyForPlanningName(typo fix)ReadyForDevlopmentNamerenamed toReadyForDevelopmentName(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
IssueMetatype with sharedjira.IssueOutput - Removed commented-out code from multiple files
Documentation¶
- Added go-atlassian migration plan, roadmap specs, custom-fields guide, and troubleshooting guide
- Renamed
gojira/restreferences togo-atlassian/jiraacross README, SDK guides, release notes, specs, and CLI docs - Standardized naming convention: "Go-Atlassian" for prose/headings,
go-atlassianfor import paths, URLs, and CLI references
Installation¶
Migration Guide¶
From v0.31.0¶
The module path and internal package layout changed in this release:
- Update your
go.modand imports fromgithub.com/grokify/gojiratogithub.com/grokify/go-atlassian:
- Update imports from the old
restpackage (and the rootatlassianpackage) to the new consolidatedjirapackage:
// Before
import "github.com/grokify/gojira/rest"
import "github.com/grokify/gojira"
// After
import "github.com/grokify/go-atlassian/jira"
-
Types and functions previously in the root package (
Config,JQL, custom field key constants, etc.) and inrest(Client,IssueService, etc.) are now both exported fromjira. Update package-qualified references (e.g.,rest.Clientbecomesjira.Client). -
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