rest

package
v0.29.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 11, 2026 License: MIT Imports: 42 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ParamFields        = "fields"
	ParamJQL           = "jql"
	ParamMaxResults    = "maxResults"
	ParamStartAt       = "startAt"
	ParamValidateQuery = "validateQuery"
)
View Source
const (
	APIV2URLListCustomFields = `/rest/api/2/field`
	APIV3URLIssue            = `/rest/api/3/issue` // /rest/api/3/issue/{issueIdOrKey}
	APIV3URLSearchJQL        = `/rest/api/3/search/jql`

	StatusDone         = "Done"
	StatusOpen         = "Open"
	StatusCustomClosed = "Closed"

	MaxResults    = 1000
	MetaParamRank = "_rank"

	OperationAdd    = "add"
	OperationRemove = "remove"

	TimeTimeSpent                     = "Time Spent"
	TimeTimeEstimate                  = "Time Estimate"
	TimeTimeOriginalEstimate          = "Time Original Estimate"
	TimeAggregateTimeOriginalEstimate = "Aggregate Time Original Estimate"
	TimeAggregateTimeSpent            = "Aggregate Time Spent"
	TimeAggregateTimeEstimate         = "Aggregate Time Estimate"
	TimeTimeRemaining                 = "Time Remaining"
	TimeTimeRemainingOriginal         = "Time Remaining Original"

	FieldSlugType       = "type"
	FieldSlugProjectkey = "projectkey"
)
View Source
const (
	ExpandFieldChangelog = "changelog"
	ExpandFieldComment   = "comment"
	ExpandFieldEpic      = "epic"
)
View Source
const APIURLMyself = "/rest/api/3/myself"
View Source
const (
	CustomFieldNameEpicLink = "Epic Link"
)

Variables

View Source
var (
	ErrClientCannotBeNil                = errors.New("client cannot be nil")
	ErrJiraClientCannotBeNil            = errors.New("jira client cannot be nil")
	ErrSimpleClientCannotBeNil          = errors.New("simple client cannot be nil")
	ErrCustomFieldLabelRequired         = errors.New("custom field label is required")
	ErrIssueCannotBeNil                 = errors.New("issue cannot be nil")
	ErrIssueKeyCannotBeEmpty            = errors.New("issue key cannot be empty")
	ErrKeyNotFound                      = errors.New("key not found")
	ErrIssueOrIssueKeyOrIssueIDRequired = errors.New("issue, issue id, or issue key required")
	ErrIssuesSetCannotBeNil             = errors.New("issuesSet cannot be nil")
	ErrFunctionCannotBeNil              = errors.New("function cannot be nil")
	ErrNotFound                         = errors.New("Issue does not exist or you do not have permission to see it.: request failed. Please analyze the request body for more details. Status code: 400")
)
View Source
var ErrJiraRESTClientCannotBeNil = errors.New("rest.Client cannot be nil")
View Source
var ErrLineageNotFound = errors.New("lineage not found")

Functions

func BacklogAPIURL

func BacklogAPIURL(baseURL string, boardID uint, qry *BoardBacklogParams) string

BacklogAPIURL returns a backlog issues API URL described at https://docs.atlassian.com/jira-software/REST/7.3.1/ . The description is here: Returns all issues from the board's backlog, for the given board Id. This only includes issues that the user has permission to view. The backlog contains incomplete issues that are not assigned to any future or active sprint. Note, if the user does not have permission to view the board, no issues will be returned at all. Issues returned from this resource include Agile fields, like sprint, closedSprints, flagged, and epic. By default, the returned issues are ordered by rank. Reference: https://docs.atlassian.com/jira-software/REST/7.3.1/#agile/1.0/board-getIssuesForBacklog

func DefaultHistogramMapTableConfig

func DefaultHistogramMapTableConfig(projectKeys []string) *histogram.HistogramMapTableSetConfig

func DefaultIssuesSetTableColumns

func DefaultIssuesSetTableColumns(inclInitiative, inclEpic bool) table.ColumnDefinitionSet

func GetCustomValueString

func GetCustomValueString(iss jira.Issue, customFieldKey string) (string, error)

GetCustomValueString attempts to return a string if either the custom value is a simple string or is an `IssueCustomField`, in which case it returns the `value` property.

func GetUnmarshalCustomValue

func GetUnmarshalCustomValue(iss jira.Issue, customFieldKey string, v *IssueCustomField) error

GetUnmarshalCustomValue can be used to unmarshal a value to `IssueCustomField{}`.

func IssueFieldsCustomFieldString

func IssueFieldsCustomFieldString(fields *jira.IssueFields, id string) string

IssueFieldsCustomFieldString returns a string custom field, e.g "Epic Link"

func IssueMapProjectStatusType

func IssueMapProjectStatusType(iss *jira.Issue) (map[string]string, error)

func IssueProjectkeyType

func IssueProjectkeyType(iss *jira.Issue) (string, string)

func IssueProjectkeyTypeStatus

func IssueProjectkeyTypeStatus(iss *jira.Issue) (string, string, string)

func IssueToEpic

func IssueToEpic(iss jira.Issue) (*jira.Epic, error)

func JiraClientBasicAuth

func JiraClientBasicAuth(serverURL, username, password string) (*jira.Client, error)

JiraClientBasicAuth creates a go-jira client with basic authentication.

func JiraClientBasicAuthGoauth

func JiraClientBasicAuthGoauth(creds *goauth.CredentialsBasicAuth) (*jira.Client, error)

JiraClientBasicAuthGoauth creates a go-jira client from goauth basic credentials.

func NewClientHTTPBasicAuthFile

func NewClientHTTPBasicAuthFile(filename, credsKey string) (hclient *http.Client, serverURL string, err error)

NewClientHTTPBasicAuthFile creates an HTTP client with basic auth from a goauth file.

func NewClientJiraBasicAuthFile

func NewClientJiraBasicAuthFile(filename, credsKey string) (*jira.Client, error)

NewClientJiraBasicAuthFile creates a go-jira client with basic auth from a goauth file.

func NewCredentialsBasicAuthGoauthFile

func NewCredentialsBasicAuthGoauthFile(filename, credsKey string) (*goauth.CredentialsBasicAuth, error)

NewCredentialsBasicAuthGoauthFile reads basic auth credentials from a goauth file.

func NewCredentialsGoauthFile

func NewCredentialsGoauthFile(filename, credsKey string) (*goauth.Credentials, error)

NewCredentialsGoauthFile reads credentials from a goauth credentials file.

func UserJiraToOIDC

func UserJiraToOIDC(u *jira.User, serverURL string) *oidc.UserInfo

Types

type BacklogService

type BacklogService struct {
	Client *Client
	// contains filtered or unexported fields
}

func NewBacklogService

func NewBacklogService(client *Client) *BacklogService

func (*BacklogService) GetBacklogIssuesAll

func (svc *BacklogService) GetBacklogIssuesAll(ctx context.Context, boardID uint, jql string) (*IssuesResponse, [][]byte, error)

func (*BacklogService) GetBacklogIssuesResponse

func (svc *BacklogService) GetBacklogIssuesResponse(ctx context.Context, boardID uint, qry *BoardBacklogParams) (*IssuesResponse, []byte, error)

func (*BacklogService) GetBacklogIssuesSetAll

func (svc *BacklogService) GetBacklogIssuesSetAll(ctx context.Context, boardID uint, jql string) (*IssuesSet, [][]byte, error)

type BoardBacklogParams

type BoardBacklogParams struct {
	StartAt       int    `url:"startAt"`
	MaxResults    int    `url:"maxResults"`
	JQL           string `url:"jql"`
	ValidateQuery bool   `url:"validateQuery"`
	Fields        string `url:"fields"`
	Expand        string `url:"expand"`
}

func (BoardBacklogParams) URLValues

func (p BoardBacklogParams) URLValues() url.Values

type Client

type Client struct {
	Config     *gojira.Config
	HTTPClient *http.Client
	JiraClient *jira.Client

	Logger         *slog.Logger
	BacklogAPI     *BacklogService
	CustomFieldAPI *CustomFieldService
	IssueAPI       *IssueService
	CustomFieldSet *CustomFieldSet
	// contains filtered or unexported fields
}

Client provides access to the Jira REST API. It wraps both an HTTP client for custom requests and a go-jira client for standard operations. Use one of the NewClient* functions to create a properly initialized client.

func NewClientFromBasicAuth

func NewClientFromBasicAuth(serverURL, username, password string, addCustomFieldSet bool) (*Client, error)

NewClientFromBasicAuth creates a new Client using basic authentication. If addCustomFieldSet is true, custom fields are loaded during initialization.

func NewClientFromGoauthCLI

func NewClientFromGoauthCLI(inclAccountsOnError, addCustomFieldSet bool) (*Client, error)

NewClientFromGoauthCLI creates a new Client by interactively selecting credentials from the goauth CLI. If inclAccountsOnError is true, available accounts are shown when an error occurs during selection.

func NewClientFromGoauthCredentials

func NewClientFromGoauthCredentials(c *goauth.Credentials, addCustomFieldSet bool) (*Client, error)

NewClientFromGoauthCredentials creates a new Client from goauth credentials. Currently only basic authentication is supported.

func NewClientGoauthBasicAuthFile

func NewClientGoauthBasicAuthFile(filename, credsKey string, addCustomFieldSet bool) (*Client, error)

NewClientGoauthBasicAuthFile creates a new Client from a goauth credentials file using basic authentication. This is the recommended way to create a client when credentials are stored in a file.

func NewClientGoauthCredentialsSetFile

func NewClientGoauthCredentialsSetFile(filename, accountkey string, addCustomFieldSet, inclAccountsOnError bool) (*Client, error)

NewClientGoauthCredentialsSetFile creates a new Client from a goauth credentials file. The accountkey specifies which account to use from the credentials set.

func (*Client) Inflate

func (c *Client) Inflate(addCustomFieldSet bool) error

Inflate initializes the client's service APIs (BacklogAPI, CustomFieldAPI, IssueAPI). If addCustomFieldSet is true, custom fields are loaded from the Jira server.

func (*Client) LoadCustomFields

func (c *Client) LoadCustomFields() error

LoadCustomFields fetches and caches custom field definitions from the Jira server.

func (*Client) LogOrNotAny

func (c *Client) LogOrNotAny(ctx context.Context, level slog.Level, msg string, attrs ...any)

LogOrNotAny logs a message if the client's Logger is set. This is a no-op if Logger is nil.

func (*Client) Myself

func (c *Client) Myself(ctx context.Context) (*jira.User, *http.Response, error)

func (*Client) MyselfUserInfo

func (c *Client) MyselfUserInfo(ctx context.Context) (*oidc.UserInfo, *jira.User, *jira.Response, error)

type CustomCol

type CustomCol struct {
	Name       string
	Slug       string
	Type       string
	Func       func(im IssueMore) (string, error)
	RenderSkip bool
}

func (CustomCol) NameOrSlug

func (c CustomCol) NameOrSlug() string

type CustomField

type CustomField struct {
	ID               string            `json:"id"` // "customfield_12345"
	Key              string            `json:"key"`
	Name             string            `json:"name"`
	UntranslatedName string            `json:"untranslatedName"`
	Custom           bool              `json:"custom"`
	Orderable        bool              `json:"orderable"`
	Navigable        bool              `json:"navigable"`
	Searchable       bool              `json:"searchable"`
	ClauseNames      []string          `json:"clauseNames"`
	Schema           CustomFieldSchema `json:"schema"`
}

type CustomFieldSchema

type CustomFieldSchema struct {
	Type     string `json:"type"`
	Custom   string `json:"custom"`
	CustomID int    `json:"customId"`
}

type CustomFieldService

type CustomFieldService struct {
	JRClient *Client
}

func NewCustomFieldService

func NewCustomFieldService(client *Client) *CustomFieldService

func (*CustomFieldService) GetCustomField

func (svc *CustomFieldService) GetCustomField(customFieldName string) (CustomField, error)
func (svc *CustomFieldService) GetCustomFieldEpicLink() (CustomField, error)

func (*CustomFieldService) GetCustomFieldSet

func (svc *CustomFieldService) GetCustomFieldSet() (*CustomFieldSet, error)

func (*CustomFieldService) GetCustomFields

func (svc *CustomFieldService) GetCustomFields() (CustomFields, error)

type CustomFieldSet

type CustomFieldSet struct {
	Data map[string]CustomField
}

func NewCustomFieldSet

func NewCustomFieldSet() *CustomFieldSet

func (*CustomFieldSet) Add

func (set *CustomFieldSet) Add(fields ...CustomField) error

func (*CustomFieldSet) CreateFuncIssueToMap

func (set *CustomFieldSet) CreateFuncIssueToMap(fieldsWithDefaults map[string]string, useCustomFieldDisplayNames bool) FuncIssueToMap

CreateFuncIssueToMap creates a function to use with `IssuesSet.HistogramMapFunc`.

func (*CustomFieldSet) IDToName

func (set *CustomFieldSet) IDToName(id string) (string, error)

func (*CustomFieldSet) Init

func (set *CustomFieldSet) Init()

type CustomFields

type CustomFields []CustomField

func (CustomFields) FilterByIDs

func (cfs CustomFields) FilterByIDs(ids ...string) CustomFields

func (CustomFields) FilterByNames

func (cfs CustomFields) FilterByNames(names ...string) CustomFields

func (CustomFields) SortByName

func (cfs CustomFields) SortByName(asc bool) CustomFields

func (CustomFields) Table

func (cfs CustomFields) Table(name string) table.Table

func (CustomFields) WriteTable

func (cfs CustomFields) WriteTable(w io.Writer) error

type CustomJiraProcessor

type CustomJiraProcessor struct {
	*IssuesSet
}

type CustomTableCols

type CustomTableCols struct {
	Cols []CustomCol
}

func CustomTableColsFromStrings

func CustomTableColsFromStrings(cols []string) CustomTableCols

func (CustomTableCols) Names

func (cols CustomTableCols) Names(defaultToSlug bool) []string

type EpicsSet

type EpicsSet struct {
	EpicsMap map[string]jira.Epic
}

func NewEpicsSet

func NewEpicsSet() EpicsSet

func (*EpicsSet) AddIssues

func (es *EpicsSet) AddIssues(issues []jira.Issue) error

func (*EpicsSet) GetKeys

func (es *EpicsSet) GetKeys(jclient *jira.Client, epicKeys []string) error

type FuncIssueToMap

type FuncIssueToMap func(iss *jira.Issue) (map[string]string, error)

type GetQueryOptions

type GetQueryOptions struct {
	ExpandChangelog    bool // sent to andygrunwald SDK
	XMultiSkipNotFound bool // not sent to andygrunwald SDK; used for getting multiple issues
	XIncludeParents    bool
}

func (GetQueryOptions) Build

func (opts GetQueryOptions) Build() *jira.GetQueryOptions

Build returns a `*jira.GetQueryOptions` for the andygrunwald SDK.

type IssueCalcField

type IssueCalcField struct {
	Key     string
	ValFunc func(iss *jira.Issue) (string, error)
}

type IssueCustomField

type IssueCustomField struct {
	ID    string `json:"id"`
	Self  string `json:"self"`
	Value string `json:"value"`
}

func GetIssueCustomValueStruct

func GetIssueCustomValueStruct(iss jira.Issue) (*IssueCustomField, error)

type IssueMeta

type IssueMeta struct {
	AdditionalFields map[string]*string
	AssigneeName     string
	CreateTime       *time.Time
	CreatorName      string
	EpicName         string
	Key              string
	KeyURL           string
	Labels           []string
	ParentKey        string
	Project          string
	ProjectKey       string
	Resolution       string
	Status           string
	Summary          string
	Type             string
	UpdateTime       *time.Time
}

func (*IssueMeta) BuildKeyURL

func (im *IssueMeta) BuildKeyURL(baseURL string)

func (*IssueMeta) KeyLinkMarkdown

func (im *IssueMeta) KeyLinkMarkdown() string

KeyLinkMarkdown returns a link of both `Key` and `KeyURL` are non-empty,`Key` if `Key` is non-empty or an empty string if both are empty.

func (*IssueMeta) String

func (im *IssueMeta) String() string

type IssueMetas

type IssueMetas []IssueMeta

func (IssueMetas) HighestAboveEpic

func (ims IssueMetas) HighestAboveEpic() *IssueMeta

HighestAboveEpic returns the highest item that follows an Epic.

func (IssueMetas) HighestEpic

func (ims IssueMetas) HighestEpic() *IssueMeta

HighestEpic returns the highest most Epic.

func (IssueMetas) HighestType

func (ims IssueMetas) HighestType(issueType string) *IssueMeta

type IssueMore

type IssueMore struct {
	Issue *jira.Issue
}

func NewIssueMore

func NewIssueMore(iss *jira.Issue) IssueMore

func (*IssueMore) AdditionalFields

func (im *IssueMore) AdditionalFields(additionalFieldNames []string) map[string]*string

func (*IssueMore) AssigneeName

func (im *IssueMore) AssigneeName() string

func (*IssueMore) CreateTime

func (im *IssueMore) CreateTime() time.Time

func (*IssueMore) CreatorName

func (im *IssueMore) CreatorName() string

func (*IssueMore) CustomField

func (im *IssueMore) CustomField(customFieldLabel string) (IssueCustomField, error)

CustomField takes a custom value key such as `customfield_12345`.`

func (*IssueMore) CustomFieldString

func (im *IssueMore) CustomFieldString(customFieldLabel string) (string, error)

CustomFieldString takes a custom value key such as `customfield_12345`.`

func (*IssueMore) CustomFieldStringOrDefault

func (im *IssueMore) CustomFieldStringOrDefault(customFieldLabel, def string) string

CustomFieldStringOrEmpty takes a custom value key such as `customfield_12345`.`

func (*IssueMore) Description

func (im *IssueMore) Description() string

func (*IssueMore) EpicKey

func (im *IssueMore) EpicKey() string

func (*IssueMore) EpicName

func (im *IssueMore) EpicName() string

func (*IssueMore) EpicNameOrSummary

func (im *IssueMore) EpicNameOrSummary() string

func (*IssueMore) Key

func (im *IssueMore) Key() string

func (*IssueMore) KeyLinkWebMarkdown

func (im *IssueMore) KeyLinkWebMarkdown(baseURL string) string

func (*IssueMore) KeyURLWeb

func (im *IssueMore) KeyURLWeb(baseURL string) string

func (*IssueMore) Keys

func (im *IssueMore) Keys() (keys []string, hasChangelog bool)

Keys returns a slice of all keys for this issue over time including the current key and all previous keys. The return slice is deduped sorted. This relies on pulling the changelog from the Jira API. NOTE: keys are sorted alphabetically, not by change date.

func (*IssueMore) LabelExists

func (im *IssueMore) LabelExists(label string, matchToLowerTrimSpace bool) bool

func (*IssueMore) Labels

func (im *IssueMore) Labels(sortAsc bool) []string

func (*IssueMore) Meta

func (im *IssueMore) Meta(serverURL string, additionalFieldNames []string) IssueMeta

func (*IssueMore) ParentKey

func (im *IssueMore) ParentKey() string

func (*IssueMore) Project

func (im *IssueMore) Project() string

func (*IssueMore) ProjectKey

func (im *IssueMore) ProjectKey() string

func (*IssueMore) Resolution

func (im *IssueMore) Resolution() string

func (*IssueMore) ResolutionTime

func (im *IssueMore) ResolutionTime() time.Time

func (*IssueMore) Status

func (im *IssueMore) Status() string

func (*IssueMore) Summary

func (im *IssueMore) Summary() string

func (*IssueMore) Type

func (im *IssueMore) Type() string

func (*IssueMore) UpdateTime

func (im *IssueMore) UpdateTime() time.Time

func (*IssueMore) Value

func (im *IssueMore) Value(fieldSlug string) (string, bool)

func (*IssueMore) ValueOrDefault

func (im *IssueMore) ValueOrDefault(fieldSlug, def string) string

func (*IssueMore) WriteFileJSON

func (im *IssueMore) WriteFileJSON(filename string, perm os.FileMode, prefix, indent string) error

type IssueMores

type IssueMores []IssueMore

func (IssueMores) Keys

func (ii IssueMores) Keys(sortAsc, dedupe bool) []string

func (IssueMores) ProjectKeys

func (ii IssueMores) ProjectKeys(sortAsc, dedupe bool) []string

type IssuePatchRequestBody

type IssuePatchRequestBody struct {
	Update *IssuePatchRequestBodyUpdate          `json:"update,omitempty"`
	Fields map[string]IssuePatchRequestBodyField `json:"fields,omitempty"`
}

IssuePatchRequestBody represents a API request body to patch an issue. The Jira API uses `PUT` however this struct and associated method use `Patch` to better align with API best practices for a partial update.

func NewIssuePatchRequestBodyCustomField

func NewIssuePatchRequestBodyCustomField(customFieldLabel, customFieldValue string) IssuePatchRequestBody

NewIssuePatchRequestBodyCustomField returns a body for patching the Jira issue with a custom field value.

func NewIssuePatchRequestBodyLabelAddRemove

func NewIssuePatchRequestBodyLabelAddRemove(label string, remove bool) IssuePatchRequestBody

NewIssuePatchRequestBodyLabelAddRemove returns a body for patching the Jira issue by adding or removing a label.

func (IssuePatchRequestBody) Validate

func (body IssuePatchRequestBody) Validate() error

Validate ensures that the `add` and `remove` propererties cannot both be set at the same time.

type IssuePatchRequestBodyField

type IssuePatchRequestBodyField struct {
	Value string                      `json:"value"`
	Child *IssuePatchRequestBodyField `json:"child,omitempty"`
}

FieldPatchRequestObject can be used IssuePatchRequestBody.Fields

type IssuePatchRequestBodyUpdate

type IssuePatchRequestBodyUpdate struct {
	Labels []IssuePatchRequestBodyUpdateLabel `json:"labels,omitempty"`
}

IssuePatchRequestBodyUpdate represntes the `labels` slice in the `update` property of an issue update request.

type IssuePatchRequestBodyUpdateLabel

type IssuePatchRequestBodyUpdateLabel struct {
	// cannot have both
	Add    *string `json:"add,omitempty"`
	Remove *string `json:"remove,omitempty"`
}

IssuePatchRequestBodyUpdateLabel represents a specific label operation in the `update` property of an issue update request.

type IssueService

type IssueService struct {
	Client *Client
}

func NewIssueService

func NewIssueService(client *Client) *IssueService

func (*IssueService) DoTransitionWithNameAndPayload

func (svc *IssueService) DoTransitionWithNameAndPayload(ctx context.Context, issueID string, issue *jira.Issue, updateTransitionName string, payload *TransitionPayload) error

func (*IssueService) DoTransitions

func (svc *IssueService) DoTransitions(ctx context.Context, issueIDs []string, opts TransitionOptionSet) error

func (*IssueService) GetIssuesSetForKeys

func (svc *IssueService) GetIssuesSetForKeys(keys []string) (*IssuesSet, error)

Issues returns an `IssuesSet{}` given a set of keys. If no keys are provided, any empty slice is returned.

func (*IssueService) GetTransitions

func (svc *IssueService) GetTransitions(ctx context.Context, id string, expandTransitionsFields bool) (Transitions, *jira.Response, error)

func (*IssueService) Issue

func (svc *IssueService) Issue(ctx context.Context, issueIDOrKey string, opts *GetQueryOptions) (*jira.Issue, error)

func (*IssueService) IssuePatch

func (svc *IssueService) IssuePatch(ctx context.Context, issueKeyOrID string, issueUpdateRequestBody IssuePatchRequestBody) (*http.Response, error)

IssuePatch updates fields for an issue. See more here: https://community.developer.atlassian.com/t/update-issue-custom-field-value-via-api-without-going-forge/71161

func (*IssueService) IssuePatchCustomFieldRecursive

func (svc *IssueService) IssuePatchCustomFieldRecursive(ctx context.Context, issueKeyOrID string, iss *jira.Issue, customFieldLabel, customFieldValue string, processChildren bool, processChildrenTypes []string, skipUpdate bool) (int, error)

IssuePatchCustomFieldRecursive updates an issue, and optionally child issues, with a custom field value.

func (*IssueService) IssuePatchLabelRecursive

func (svc *IssueService) IssuePatchLabelRecursive(ctx context.Context, issueKeyOrID string, iss *jira.Issue, label string, removeLabel, processChildren bool, processChildrenTypes []string, skipUpdate bool) (int, error)

IssuePatchLabelRecursive updates fields for an issue. See more here: https://community.developer.atlassian.com/t/update-issue-custom-field-value-via-api-without-going-forge/71161

func (*IssueService) Issues

func (svc *IssueService) Issues(ctx context.Context, keys []string, _ *GetQueryOptions) (Issues, error)

Issues returns a list of issues given a set of keys. If no keys are provided, an empty slice is returned. TODO: opts parameter is currently unused; consider adding support for expand options.

func (*IssueService) IssuesPatch

func (svc *IssueService) IssuesPatch(ctx context.Context, issueKeyOrID []string, issueUpdateRequestBody IssuePatchRequestBody) error

IssuesPatch updates fields for multiple issues. See more here: https://community.developer.atlassian.com/t/update-issue-custom-field-value-via-api-without-going-forge/71161

func (*IssueService) IssuesPatchAddLabel

func (svc *IssueService) IssuesPatchAddLabel(ctx context.Context, issues []jira.Issue, label string, skipUpdate bool) (int, error)

func (*IssueService) IssuesSetAddParents

func (svc *IssueService) IssuesSetAddParents(set *IssuesSet) error

func (*IssueService) JQLResultsTotalCount

func (svc *IssueService) JQLResultsTotalCount(jql string) (int, error)

func (*IssueService) JQLsAddMetadata

func (svc *IssueService) JQLsAddMetadata(jqls gojira.JQLs) (gojira.JQLs, error)

JQLsAddMetadata returns all issues for a JQL query, automatically handling API pagination.

func (*IssueService) JQLsReportMarkdownLines

func (svc *IssueService) JQLsReportMarkdownLines(jqls gojira.JQLs, opts *gojira.JQLsReportMarkdownOpts) ([]string, error)

JQLsReportMarkdownLines provides Markdownlines for a set of JQLs, including querying the number of results for each JQL via the Jira API.

func (*IssueService) SearchChildrenIssues

func (svc *IssueService) SearchChildrenIssues(parentKeys []string) (Issues, error)

func (*IssueService) SearchChildrenIssuesSet

func (svc *IssueService) SearchChildrenIssuesSet(ctx context.Context, parentKeys []string, opts *GetQueryOptions) (*IssuesSet, error)

func (*IssueService) SearchIssues

func (svc *IssueService) SearchIssues(jql string, retrieveAll bool) (Issues, error)

SearchIssues returns all issues for a JQL query, automatically handling API pagination.

func (*IssueService) SearchIssuesAPIV3

func (svc *IssueService) SearchIssuesAPIV3(ctx context.Context, jql string, retrieveAll bool) (Issues, error)

SearchIssuesAPIV3 returns all issues for a JQL query using the V3 API endpoint /rest/api/3/search/jql. If retrieveAll is true, it will paginate through all results until no more issues are available.

func (*IssueService) SearchIssuesByMonth

func (svc *IssueService) SearchIssuesByMonth(jql gojira.JQL, createdGTE, createdLT time.Time, fnExec func(ii Issues, start time.Time) error) error

func (*IssueService) SearchIssuesMulti

func (svc *IssueService) SearchIssuesMulti(jqls ...string) (Issues, error)

func (*IssueService) SearchIssuesOnPremise

func (svc *IssueService) SearchIssuesOnPremise(jql string, retrieveAll bool) (Issues, error)

SearchIssuesOnPremise returns all issues for a JQL query using the legacy pagination API. This function is for Jira Server/Data Center (on-premises) deployments only. For Jira Cloud, use SearchIssues or SearchIssuesAPIV3 instead.

func (*IssueService) SearchIssuesPages

func (svc *IssueService) SearchIssuesPages(jql string, limit, offset, maxPages int) (Issues, error)

SearchIssuesPage returns all issues for a JQL query, automatically handling API pagination. A `limit` value of `0` means the max results available. A `maxPages` of `0` means to retrieve all pages.

func (*IssueService) SearchIssuesSet

func (svc *IssueService) SearchIssuesSet(jql string) (*IssuesSet, error)

func (*IssueService) SearchIssuesSetParents

func (svc *IssueService) SearchIssuesSetParents(set *IssuesSet) (*IssuesSet, error)

func (*IssueService) SearchIssuesSetWithFileCache

func (svc *IssueService) SearchIssuesSetWithFileCache(
	filename string, forceReload, reloadOnError bool, cfg *gojira.Config, prefix, indent, jql string, retrieveAll bool) (*IssuesSet, error)

type Issues

type Issues []jira.Issue

func IssuesReadFileJSON

func IssuesReadFileJSON(filename string) (Issues, error)

func (Issues) AddRank

func (ii Issues) AddRank() Issues

func (Issues) CountsByProjectTypeStatus

func (ii Issues) CountsByProjectTypeStatus() *histogram.HistogramSets

CountsByProjectTypeStatus returns a `*histogram.Histogram` with issue counts by project, type, and status. This can be used to export CSV and XLSX sheets for analysis.

func (Issues) CountsByType

func (ii Issues) CountsByType() map[string]int

func (Issues) IssuesSet

func (ii Issues) IssuesSet(cfg *gojira.Config) (*IssuesSet, error)

IssuesSet converts the `Issues{}` to an `*IssuesSet{}`.

func (Issues) Keys

func (ii Issues) Keys() []string

Keys returns a slice of sorted issue keys.

func (Issues) KeysSplitVenn

func (ii Issues) KeysSplitVenn(keys []string) slicesutil.Venn2ResultOrdered[string]

func (Issues) Metas

func (ii Issues) Metas(baseURL string, customFieldLabels []string) IssueMetas

func (Issues) WriteFileJSON

func (ii Issues) WriteFileJSON(filename, prefix, indent string) error

WriteFileJSON outputs a JSON file that can be read in again.

type IssuesResponse

type IssuesResponse struct {
	Issues     Issues `json:"issues" structs:"issues"`
	Expand     string `json:"expand"`
	StartAt    int    `json:"startAt" structs:"startAt"`
	MaxResults int    `json:"maxResults" structs:"maxResults"`
	Total      int    `json:"total" structs:"total"`
}

IssuesResponse is only a small wrapper around the Search (with JQL) method to be able to parse the results

func IssuesResponseReadFile

func IssuesResponseReadFile(filename string) (*IssuesResponse, error)

func ParseIssuesResponseBytes

func ParseIssuesResponseBytes(b []byte) (*IssuesResponse, error)

func ParseIssuesResponseReader

func ParseIssuesResponseReader(r io.Reader) (*IssuesResponse, error)

type IssuesSet

type IssuesSet struct {
	Config  *gojira.Config
	Items   map[string]jira.Issue
	Parents *IssuesSet
}

func IssuesSetReadDirIssuesFiles

func IssuesSetReadDirIssuesFiles(filepaths []string) (*IssuesSet, error)

IssuesSetReadDirIssuesFiles reads a list of JSON issues files.

func IssuesSetReadFileJSON

func IssuesSetReadFileJSON(filename string) (*IssuesSet, error)

func NewIssuesSet

func NewIssuesSet(cfg *gojira.Config) *IssuesSet

func (*IssuesSet) Add

func (set *IssuesSet) Add(issues ...jira.Issue) error

func (*IssuesSet) AddIssuesFile

func (set *IssuesSet) AddIssuesFile(filename string) error

AddIssuesFile reads a `Issues{}` JSON file and adds it to the `IssuesSet{}`.

func (*IssuesSet) CountWithTypeFilter

func (set *IssuesSet) CountWithTypeFilter(inclTypeFilter []string) uint

func (*IssuesSet) Counts

func (set *IssuesSet) Counts() map[string]map[string]uint

Counts returns a `map[string]map[string]uint{}` where the first key is the category and the second is the category value.

func (*IssuesSet) CountsByCustomFieldValues

func (set *IssuesSet) CountsByCustomFieldValues(customField string) (map[string]uint, error)

CountsByCustomFieldValues returns a list of custom field value counts where `customField` is in the format `customfield_12345`.

func (*IssuesSet) CountsByMetaStage

func (set *IssuesSet) CountsByMetaStage(inclTypeFilter []string) map[string]uint

func (*IssuesSet) CountsByProject

func (set *IssuesSet) CountsByProject() map[string]uint

CountsByProject returns `map[string]uint` representing issue counts by project.

func (*IssuesSet) CountsByProjectAndCustomFieldValues

func (set *IssuesSet) CountsByProjectAndCustomFieldValues(customField string) (*histogram.HistogramSet, error)

func (*IssuesSet) CountsByProjectAndMetaStage

func (set *IssuesSet) CountsByProjectAndMetaStage(inclTypeFilter []string) *histogram.HistogramSet

func (*IssuesSet) CountsByProjectKey

func (set *IssuesSet) CountsByProjectKey() map[string]uint

CountsByProjectKey returns `map[string]uint` representing issue counts by project key.

func (*IssuesSet) CountsByStatus

func (set *IssuesSet) CountsByStatus() map[string]uint

CountsByStatus returns `map[string]uint` representing issue counts by status.

func (*IssuesSet) CountsByTime

func (set *IssuesSet) CountsByTime() map[string]uint

func (*IssuesSet) CountsByType

func (set *IssuesSet) CountsByType(inclLeafs, inclParents bool) map[string]uint

func (*IssuesSet) CountsByWorkstream

func (set *IssuesSet) CountsByWorkstream(wsFuncMake WorkstreamFuncMake, inclTypeFilter []string) (map[string]uint, error)

func (*IssuesSet) EpicKeys

func (set *IssuesSet) EpicKeys(customFieldID string) []string

func (*IssuesSet) ExportWorkstreamFilter

func (set *IssuesSet) ExportWorkstreamFilter(wsFuncMake WorkstreamFuncMake, wsFuncIncl WorkstreamFuncIncl, customFieldLabels []string) (*IssuesSet, error)

func (*IssuesSet) ExportWorkstreamProjectkeyStatusTablePivot

func (set *IssuesSet) ExportWorkstreamProjectkeyStatusTablePivot(wsFuncMake WorkstreamFuncMake, wsFuncIncl WorkstreamFuncIncl, useStatusCategory bool) (*table.Table, error)

func (*IssuesSet) ExportWorkstreamTypeStatusTablePivot

func (set *IssuesSet) ExportWorkstreamTypeStatusTablePivot(wsFuncMake WorkstreamFuncMake, wsFuncIncl WorkstreamFuncIncl, useStatusCategory bool) (*table.Table, error)

func (*IssuesSet) ExportWorkstreamXfieldStatusHistogramSets

func (set *IssuesSet) ExportWorkstreamXfieldStatusHistogramSets(
	wsFuncMake WorkstreamFuncMake,
	wsFuncIncl WorkstreamFuncIncl,
	xfieldSlug string,
	useStatusCategory bool) (*histogram.HistogramSets, error)

func (*IssuesSet) ExportWorkstreamXfieldStatusTablePivot

func (set *IssuesSet) ExportWorkstreamXfieldStatusTablePivot(wsFuncMake WorkstreamFuncMake, wsFuncIncl WorkstreamFuncIncl, xfieldSlug, xfieldName string, useStatusCategory bool) (*table.Table, error)

func (*IssuesSet) FilterByKeys

func (set *IssuesSet) FilterByKeys(keys []string, errOnUnfound bool) (*IssuesSet, error)

func (*IssuesSet) FilterByStatus

func (set *IssuesSet) FilterByStatus(inclStatuses, exclStatuses []string) (*IssuesSet, error)

func (*IssuesSet) FilterByStatusCategory

func (set *IssuesSet) FilterByStatusCategory(scatsRef gojira.StatusCategories, scatsIncl []string) (*IssuesSet, error)

func (*IssuesSet) FilterByType

func (set *IssuesSet) FilterByType(inclTypes ...string) (*IssuesSet, error)

func (*IssuesSet) HistogramByCustomField

func (set *IssuesSet) HistogramByCustomField(cf, def string) *histogram.Histogram

func (*IssuesSet) HistogramByStatus

func (set *IssuesSet) HistogramByStatus() *histogram.Histogram

func (*IssuesSet) HistogramByStatusCategory

func (set *IssuesSet) HistogramByStatusCategory(statusCategories gojira.StatusCategories, matchMore bool, customCounts map[string]int) (*histogram.Histogram, error)

HistogramByStatusCategory returns a `histogram.Histogram` based on issue counts or custom counts.

func (*IssuesSet) HistogramMap

func (set *IssuesSet) HistogramMap(stdKeys []string, calcFields []IssueCalcField) (*histogram.Histogram, error)

func (*IssuesSet) HistogramMapFunc

func (set *IssuesSet) HistogramMapFunc(fn func(iss *jira.Issue) (map[string]string, error)) (*histogram.Histogram, error)

HistogramMapFunc provides a `*histogram.Histogram` given a provided function. The function param corresponds to `FuncIssueToMap`.

func (*IssuesSet) HistogramMapProjectTypeStatus

func (set *IssuesSet) HistogramMapProjectTypeStatus() (*histogram.Histogram, error)

HistogramMapProjectTypeStatus provides issue counts by: Project, Type, and Status.

func (*IssuesSet) HistogramSet

func (set *IssuesSet) HistogramSet(fieldSlug1, fieldSlug2 string) *histogram.HistogramSet

HistogramSet provides a `*histogram.HistogramSets` given two histogram fields

func (*IssuesSet) HistogramSetFunc

func (set *IssuesSet) HistogramSetFunc(fn func(iss *jira.Issue) (cat1 string, cat2 string)) *histogram.HistogramSet

HistogramSetFunc provides a `*histogram.HistogramSet` given a provided function.

func (*IssuesSet) HistogramSetProjectType

func (set *IssuesSet) HistogramSetProjectType() *histogram.HistogramSet

HistogramSetProjectType returns a list of histograms by Project and Type.

func (*IssuesSet) HistogramSetsFunc

func (set *IssuesSet) HistogramSetsFunc(fn func(iss *jira.Issue) (cat1 string, cat2 string, cat3 string)) *histogram.HistogramSets

HistogramSetsFunc provides a `*histogram.HistogramSets` given a provided function.

func (*IssuesSet) HistogramSetsProjectTypeStatus

func (set *IssuesSet) HistogramSetsProjectTypeStatus() *histogram.HistogramSets

HistogramSetsProjectTypeStatus provides issue counts by: Project, Type, and Status.

func (*IssuesSet) InflateEpicKeys

func (set *IssuesSet) InflateEpicKeys(customFieldEpicLinkID string)

func (*IssuesSet) InflateEpics

func (set *IssuesSet) InflateEpics(jclient *jira.Client, customFieldIDEpicLink string) error

InflateEpics uses the Jira REST API to inflate the Issue struct with an Epic struct.

func (*IssuesSet) Issue

func (set *IssuesSet) Issue(key string) (jira.Issue, error)

Issue returns a `jira.Issue` given an issue key.

func (*IssuesSet) IssueFirst

func (set *IssuesSet) IssueFirst() (jira.Issue, error)

IssueFirst returns the first issue by alphabetical sorting of keys. It is primarily used for testing purposes to get an issue.

func (*IssuesSet) IssueMetas

func (set *IssuesSet) IssueMetas(customFieldLabels []string) IssueMetas

func (*IssuesSet) IssueMores

func (set *IssuesSet) IssueMores(keys ...string) IssueMores

func (*IssuesSet) IssueOrParent

func (set *IssuesSet) IssueOrParent(key string) (*jira.Issue, bool)

func (*IssuesSet) Issues

func (set *IssuesSet) Issues(keys ...string) Issues

Issues returns the issues in the set as an `Issues{}` slice.

func (*IssuesSet) IssuesSetHighestType

func (set *IssuesSet) IssuesSetHighestType(issueType string) (*IssuesSet, error)

func (*IssuesSet) KeyExists

func (set *IssuesSet) KeyExists(key string, inclParents bool) bool

KeyExists returns a boolean representing the existence of an issue key.

func (*IssuesSet) Keys

func (set *IssuesSet) Keys() []string

Keys returns a slice of sorted issue keys.

func (*IssuesSet) KeysByField

func (set *IssuesSet) KeysByField(fieldLabel string) map[string]SliceMore

func (*IssuesSet) KeysFilterLabelIncl

func (set *IssuesSet) KeysFilterLabelIncl(label string, matchToLowerTrimSpace bool) []string

func (*IssuesSet) KeysFilterSummaryNotLike

func (set *IssuesSet) KeysFilterSummaryNotLike(matchesAnd []string) []string

func (*IssuesSet) KeysForTypes

func (set *IssuesSet) KeysForTypes(types []string, inclBase, inclParents bool) []string

func (*IssuesSet) KeysParents

func (set *IssuesSet) KeysParents() []string

func (*IssuesSet) KeysParentsPopulated

func (set *IssuesSet) KeysParentsPopulated() []string

ParentsPopulated returns issue ids that are in the current set or current parent set.

func (*IssuesSet) KeysParentsUnpopulated

func (set *IssuesSet) KeysParentsUnpopulated() []string

ParentsUnpopulated returns issue ids that are not in the current set or current parent set.

func (*IssuesSet) Len

func (set *IssuesSet) Len() int

func (*IssuesSet) LenLineageTopKeysPopulated

func (set *IssuesSet) LenLineageTopKeysPopulated() int

func (*IssuesSet) LenLineageTopKeysUnpopulated

func (set *IssuesSet) LenLineageTopKeysUnpopulated() int

func (*IssuesSet) LenMap

func (set *IssuesSet) LenMap() map[string]int

LenMap provides various metrics. It is useful for determining if all parents and lineages have been loaded.

func (*IssuesSet) LenParents

func (set *IssuesSet) LenParents() int

func (*IssuesSet) LenParentsPopulated

func (set *IssuesSet) LenParentsPopulated() int

func (*IssuesSet) LenParentsUnpopulated

func (set *IssuesSet) LenParentsUnpopulated() int

func (*IssuesSet) Lineage

func (set *IssuesSet) Lineage(key string, customFieldLabels []string) (IssueMetas, error)

Lineage returns a slice of `IssueMeta` where the supplied key is in index 0 and the most senior parent is the last element of the slice. If a parent is not found in the set, an error is returned.

func (*IssuesSet) LineageTopKeysPopulated

func (set *IssuesSet) LineageTopKeysPopulated() ([]string, error)

func (*IssuesSet) LineageTopKeysUnpopulated

func (set *IssuesSet) LineageTopKeysUnpopulated() ([]string, error)

func (*IssuesSet) LineageValidateKey

func (set *IssuesSet) LineageValidateKey(key string) ([]string, error)

LineageValidateKey returns a lineage slice where the leaf key is in index position 0 (little-endian). This is done in case a parent cannot be found in which case the boolean returned is false.

func (*IssuesSet) LineageValidateSet

func (set *IssuesSet) LineageValidateSet() (popLineage []string, unpopLineage []string, allValid bool)

func (*IssuesSet) RetrieveChildrenOfType

func (set *IssuesSet) RetrieveChildrenOfType(client *Client, parentTypes, baseTypes []string) error

RetrieveChildrenOfType retrieves all children of supplied parent types. If the child matches a base type, it is inserted into the current `IssuesSet`. If it is not a baseType, it is inserted into `Parents`. Of note, this will only load children of parent types that are already in the `IssuesSet`.

func (*IssuesSet) RetrieveIssues

func (set *IssuesSet) RetrieveIssues(client *Client, ids []string) error

func (*IssuesSet) RetrieveParents

func (set *IssuesSet) RetrieveParents(client *Client) error

func (*IssuesSet) StatusesOrder

func (set *IssuesSet) StatusesOrder() []string

StatusesOrder returns the status order from `StageConfig{}`.

func (*IssuesSet) Summaries

func (set *IssuesSet) Summaries(ascSort bool) []string

func (*IssuesSet) Table

func (set *IssuesSet) Table(cols CustomTableCols) (*table.Table, error)

func (*IssuesSet) TableDefault

func (set *IssuesSet) TableDefault(customCols *CustomTableCols, inclEpic bool, initiativeType string, customFieldLabels []string) (*table.Table, error)

TableDefault returns a `table.Table` where each record is a Jira issue starting with a linked issue key.

func (*IssuesSet) TableSet

func (set *IssuesSet) TableSet(customCols *CustomTableCols, inclEpic bool, initiativeType string, customFieldLabels []string) (*table.TableSet, error)

TableSet is designed to return a `table.TableSet` where the tables include a list of issues and optionally, epics, and/or initiatives.

func (*IssuesSet) TableSetProjectTypeStatus

func (set *IssuesSet) TableSetProjectTypeStatus(tsConfig *histogram.HistogramMapTableSetConfig) (*table.TableSet, error)

func (*IssuesSet) TableSimple

func (set *IssuesSet) TableSimple(cols []string) (*table.Table, error)

func (*IssuesSet) TimeSeriesCreatedMonth

func (set *IssuesSet) TimeSeriesCreatedMonth() *timeseries.TimeSeries

TimeSeriesCreatedMonth provides issue counts by month by create date

func (*IssuesSet) TimeSeriesSetCreatedMonthByCustomField

func (set *IssuesSet) TimeSeriesSetCreatedMonthByCustomField(cumulative, inflate, popLast bool, monthsFilter []time.Month, customFieldID uint) (*timeseries.TimeSeriesSet, error)

TimeSeriesSetCreatedMonthByCustomField provides issue counts by custom field and month by create date. `customFieldID` is aunit for the integer part of `customfield_12345` or `cf[12345]`.

func (*IssuesSet) TimeSeriesSetCreatedMonthByKey

func (set *IssuesSet) TimeSeriesSetCreatedMonthByKey(cumulative, inflate, popLast bool, monthsFilter []time.Month, fnKey func(iss jira.Issue) (string, error)) (*timeseries.TimeSeriesSet, error)

TimeSeriesCreatedMonth provides issue counts by month by create date

func (*IssuesSet) TimeSeriesSetCreatedMonthByProject

func (set *IssuesSet) TimeSeriesSetCreatedMonthByProject(cumulative, inflate, popLast bool, monthsFilter []time.Month) (*timeseries.TimeSeriesSet, error)

TimeSeriesSetCreatedMonthByProject provides issue counts by project and month by create date

func (*IssuesSet) TimeSeriesSetCreatedMonthByResolution

func (set *IssuesSet) TimeSeriesSetCreatedMonthByResolution(cumulative, inflate, popLast bool, monthsFilter []time.Month) (*timeseries.TimeSeriesSet, error)

TimeSeriesSetCreatedMonthByResolution provides issue counts by resolution and month by create date

func (*IssuesSet) TimeSeriesSetCreatedMonthByStatus

func (set *IssuesSet) TimeSeriesSetCreatedMonthByStatus(cumulative, inflate, popLast bool, monthsFilter []time.Month) (*timeseries.TimeSeriesSet, error)

TimeSeriesSetCreatedMonthByStatus provides issue counts by status and month by create date

func (*IssuesSet) TimeStats

func (set *IssuesSet) TimeStats() gojira.TimeStats

func (*IssuesSet) Types

func (set *IssuesSet) Types(inclBase, inclParents bool) []string

func (*IssuesSet) WriteFileJSON

func (set *IssuesSet) WriteFileJSON(name, prefix, indent string) error

WriteFileJSON writes the `IssuesSet{}` as a JSON file.

type IssuesSets

type IssuesSets struct {
	Name  string
	Order []string
	Items map[string]IssuesSet
}

func NewIssuesSets

func NewIssuesSets() *IssuesSets

func (*IssuesSets) AddIssuesSetFilterKeys

func (sets *IssuesSets) AddIssuesSetFilterKeys(name string, iset *IssuesSet, keys []string, errOnUnfound bool) error

func (*IssuesSets) BarChartsText

func (sets *IssuesSets) BarChartsText(inclProgress, inclFunnel bool, startNumber *int) (string, error)

func (*IssuesSets) Histogram

func (sets *IssuesSets) Histogram() *histogram.Histogram

func (*IssuesSets) OrderOrDefault

func (sets *IssuesSets) OrderOrDefault() []string

func (*IssuesSets) TableSet

func (sets *IssuesSets) TableSet(
	tblColsMapKeys []string,
	contColumnName string,
	fnIss func(iss *jira.Issue) (map[string]string, error),
	fnRowSort func(a, b []string) int,
) (*table.TableSet, error)

func (*IssuesSets) Upsert

func (sets *IssuesSets) Upsert(setName string, set *IssuesSet)

func (*IssuesSets) UpsertIssueKeys

func (sets *IssuesSets) UpsertIssueKeys(ctx context.Context, jrClient *Client, setName string, issueKeys []string) error

type SliceMore

type SliceMore struct {
	Count  int      `json:"count"`
	Values []string `json:"values"`
}

func (*SliceMore) Inflate

func (sm *SliceMore) Inflate()

type Status

type Status struct {
	Name        string
	Description string
}

func IssueStatuses

func IssueStatuses() []Status

type Transition

type Transition struct {
	ID     string               `json:"id" structs:"id"`
	Name   string               `json:"name" structs:"name"`
	To     jira.Status          `json:"to" structs:"status"`
	Fields TransitionsFieldsMap `json:"fields" structs:"fields"`
}

func (Transition) RequiredFields

func (txn Transition) RequiredFields() []string

RequiredFields returns the list of reuqired fields, but it may not be complete from analyzing the API response on update.

type TransitionField

type TransitionField struct {
	Name          string                        `json:"name"`
	Key           string                        `json:"key"` // e.g. "custom_12345"
	Required      bool                          `json:"required"`
	Schema        TransitionFieldSchema         `json:"schema"`
	Operations    []string                      `json:"operations"`
	AllowedValues []TransitionFieldAllowedValue `json:"allowedValues"`
}

type TransitionFieldAllowedValue

type TransitionFieldAllowedValue struct {
	Self  string `json:"self"`
	Value string `json:"value"`
	ID    string `json:"id"`
}

type TransitionFieldSchema

type TransitionFieldSchema struct {
	Type     string `json:"type"`
	Custom   string `json:"custom"`
	CustomID int    `json:"customId" `
}

type TransitionOption

type TransitionOption struct {
	Name    string             `json:"name,omitempty"`
	Payload *TransitionPayload `json:"payload,omitempty"`
}

type TransitionOptionSet

type TransitionOptionSet struct {
	ContinueOnUnlistedStatus  bool                        `json:"continueOnUnlistedStatus"`
	StatusToTransitionOptions map[string]TransitionOption `json:"statusToTransitionOptions,omitempty"`
}

type TransitionPayload

type TransitionPayload struct {
	Transition jira.TransitionPayload  `json:"transition,omitempty"`
	Fields     map[string]any          `json:"fields,omitempty"`
	Update     TransitionPayloadUpdate `json:"update,omitempty"`
}

type TransitionPayloadUpdate

type TransitionPayloadUpdate struct {
	Worklog []WorklogOperation `json:"worklog,omitempty"`
}

type Transitions

type Transitions []Transition

func (Transitions) AddTransitionsSDK

func (txns Transitions) AddTransitionsSDK(txnsSDK []jira.Transition)

func (Transitions) GetByName

func (txns Transitions) GetByName(name string) (Transition, error)

func (Transitions) MapNameToID

func (txns Transitions) MapNameToID() map[string]string

func (Transitions) Names

func (txns Transitions) Names() []string

type TransitionsAPIReponse

type TransitionsAPIReponse struct {
	Transitions []Transition `json:"transitions"`
}

type TransitionsFieldsMap

type TransitionsFieldsMap map[string]TransitionField

func (TransitionsFieldsMap) GetByName

func (m TransitionsFieldsMap) GetByName(fieldName string) (TransitionField, error)

type TranstionFieldIDOrValue

type TranstionFieldIDOrValue struct {
	ID    any `json:"id,omitempty"`
	Value any `json:"value,omitempty"`
}

type WorklogOperation

type WorklogOperation struct {
	Add jira.WorklogRecord `json:"add"`
}

type WorkstreamFuncIncl

type WorkstreamFuncIncl func(ws string) bool

type WorkstreamFuncMake

type WorkstreamFuncMake func(issueKey string) (string, error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL