discussions

package
v1.31.0 Latest Latest
Warning

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

Go to latest
Published: Jul 22, 2025 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

Package discussions provides client-side interfaces for working with GitLab discussions.

This package offers a set of type-safe, idiomatic Go wrappers around GitLab's Discussions API endpoints, allowing for the creation, retrieval, modification, and deletion of discussion threads and notes across different GitLab resources: issues, merge requests, epics, snippets, and commits.

Each resource type has its own specialized manager type (IssueDiscussion, MergeRequestDiscussion, etc.) that implements common methods for working with discussions, while also providing resource-specific functionality where applicable (such as resolving merge request discussions).

Example usage:

// Create a new discussion on an issue
issueDiscussions, err := discussions.NewIssueDiscussion(client, "mygroup/myproject", 123)
if err != nil {
    log.Fatal(err)
}

// Create a new discussion thread
discussion, err := issueDiscussions.NewDiscussion(ctx, "This is a new comment")
if err != nil {
    log.Fatal(err)
}

// Add a note to the discussion
n, err := issueDiscussions.AddNote(ctx, discussion.ID, "This is a reply")
if err != nil {
    log.Fatal(err)
}

All methods accept a context.Context parameter to support timeouts, cancellation, and other context-driven behaviors.

Index

Constants

This section is empty.

Variables

View Source
var ErrInvalidArgument = errors.New("invalid argument")

Functions

This section is empty.

Types

type CommitDiscussion

type CommitDiscussion struct {
	// contains filtered or unexported fields
}

CommitDiscussion provides methods for managing discussions on GitLab commits.

func NewCommitDiscussion

func NewCommitDiscussion(client *gitlab.Client, projectID mcpargs.ID, commitID string) (*CommitDiscussion, error)

NewCommitDiscussion creates a new instance for managing discussions on a specific GitLab commit.

func (*CommitDiscussion) AddNote

func (d *CommitDiscussion) AddNote(ctx context.Context, discussionID string, body string) (*gitlab.Note, error)

AddNote adds a new note to an existing discussion thread.

func (*CommitDiscussion) DeleteNote

func (d *CommitDiscussion) DeleteNote(ctx context.Context, discussionID string, noteID int) error

DeleteNote removes a note from a discussion thread.

func (*CommitDiscussion) List

func (d *CommitDiscussion) List(ctx context.Context, confidential bool) ([]*gitlab.Discussion, error)

List returns all discussions for the commit.

func (*CommitDiscussion) ModifyNote

func (d *CommitDiscussion) ModifyNote(ctx context.Context, discussionID string, noteID int, body string) (*gitlab.Note, error)

ModifyNote updates an existing note in a discussion thread.

func (*CommitDiscussion) NewDiffDiscussion

func (d *CommitDiscussion) NewDiffDiscussion(ctx context.Context, body string, position *gitlab.NotePosition) (*gitlab.Discussion, error)

NewDiffDiscussion creates a new discussion on a specific position in the commit diff.

func (*CommitDiscussion) NewDiscussion

func (d *CommitDiscussion) NewDiscussion(ctx context.Context, body string) (*gitlab.Discussion, error)

NewDiscussion creates a new discussion thread on the commit.

func (*CommitDiscussion) NewPositionDiscussion

func (d *CommitDiscussion) NewPositionDiscussion(ctx context.Context, body string, pos *gitlab.PositionOptions, commitID string) (*gitlab.Discussion, error)

NewPositionDiscussion creates a new discussion on a specific position in the merge request diff.

type EpicDiscussion

type EpicDiscussion struct {
	// contains filtered or unexported fields
}

EpicDiscussion provides methods for managing discussions on GitLab epics.

func NewEpicDiscussion

func NewEpicDiscussion(client *gitlab.Client, groupID mcpargs.ID, epicID int) (*EpicDiscussion, error)

NewEpicDiscussion creates a new instance for managing discussions on a specific GitLab epic.

func (*EpicDiscussion) AddNote

func (d *EpicDiscussion) AddNote(ctx context.Context, discussionID string, body string) (*gitlab.Note, error)

AddNote adds a new note to an existing discussion thread.

func (*EpicDiscussion) DeleteNote

func (d *EpicDiscussion) DeleteNote(ctx context.Context, discussionID string, noteID int) error

DeleteNote removes a note from a discussion thread.

func (*EpicDiscussion) List

func (d *EpicDiscussion) List(ctx context.Context, confidential bool) ([]*gitlab.Discussion, error)

List returns all discussions for the epic.

func (*EpicDiscussion) ModifyNote

func (d *EpicDiscussion) ModifyNote(ctx context.Context, discussionID string, noteID int, body string) (*gitlab.Note, error)

ModifyNote updates an existing note in a discussion thread.

func (*EpicDiscussion) NewDiscussion

func (d *EpicDiscussion) NewDiscussion(ctx context.Context, body string) (*gitlab.Discussion, error)

NewDiscussion creates a new discussion thread on the epic.

type IssueDiscussion

type IssueDiscussion struct {
	// contains filtered or unexported fields
}

IssueDiscussion provides methods for managing discussions on GitLab issues.

func NewIssueDiscussion

func NewIssueDiscussion(client *gitlab.Client, projectID mcpargs.ID, issueIID int) (*IssueDiscussion, error)

NewIssueDiscussion creates a new instance for managing discussions on a specific GitLab issue.

func (*IssueDiscussion) AddNote

func (d *IssueDiscussion) AddNote(ctx context.Context, discussionID string, body string) (*gitlab.Note, error)

AddNote adds a new note to an existing discussion thread.

func (*IssueDiscussion) DeleteNote

func (d *IssueDiscussion) DeleteNote(ctx context.Context, discussionID string, noteID int) error

DeleteNote removes a note from a discussion thread.

func (*IssueDiscussion) List

func (d *IssueDiscussion) List(ctx context.Context, confidential bool) ([]*gitlab.Discussion, error)

List returns all discussions for the issue.

func (*IssueDiscussion) ModifyNote

func (d *IssueDiscussion) ModifyNote(ctx context.Context, discussionID string, noteID int, body string) (*gitlab.Note, error)

ModifyNote updates an existing note in a discussion thread.

func (*IssueDiscussion) NewDiscussion

func (d *IssueDiscussion) NewDiscussion(ctx context.Context, body string) (*gitlab.Discussion, error)

NewDiscussion creates a new discussion thread on the issue.

type Manager

type Manager interface {
	// List returns all discussions for a specific resource.
	List(ctx context.Context, confidential bool) ([]*gitlab.Discussion, error)

	// NewDiscussion creates a new discussion thread on a resource.
	NewDiscussion(ctx context.Context, body string) (*gitlab.Discussion, error)

	// AddNote adds a new note to an existing discussion thread.
	AddNote(ctx context.Context, discussionID string, body string) (*gitlab.Note, error)

	// ModifyNote updates an existing note in a discussion thread.
	ModifyNote(ctx context.Context, discussionID string, noteID int, body string) (*gitlab.Note, error)

	// DeleteNote removes a note from a discussion thread.
	DeleteNote(ctx context.Context, discussionID string, noteID int) error
}

Manager is an interface that defines common methods for managing discussions across different GitLab resources (issues, merge requests, epics, snippets, commits). This interface allows for consistent handling of discussions regardless of the resource type.

type MergeRequestDiscussion

type MergeRequestDiscussion struct {
	// contains filtered or unexported fields
}

MergeRequestDiscussion provides methods for managing discussions on GitLab merge requests.

func NewMergeRequestDiscussion

func NewMergeRequestDiscussion(client *gitlab.Client, projectID mcpargs.ID, mergeRequestIID int) (*MergeRequestDiscussion, error)

NewMergeRequestDiscussion creates a new instance for managing discussions on a specific GitLab merge request.

func (*MergeRequestDiscussion) AddNote

func (d *MergeRequestDiscussion) AddNote(ctx context.Context, discussionID string, body string) (*gitlab.Note, error)

AddNote adds a new note to an existing discussion thread.

func (*MergeRequestDiscussion) DeleteNote

func (d *MergeRequestDiscussion) DeleteNote(ctx context.Context, discussionID string, noteID int) error

DeleteNote removes a note from a discussion thread.

func (*MergeRequestDiscussion) List

func (d *MergeRequestDiscussion) List(ctx context.Context, confidential bool) ([]*gitlab.Discussion, error)

List returns all discussions for the merge request.

func (*MergeRequestDiscussion) ModifyNote

func (d *MergeRequestDiscussion) ModifyNote(ctx context.Context, discussionID string, noteID int, body string) (*gitlab.Note, error)

ModifyNote updates an existing note in a discussion thread.

func (*MergeRequestDiscussion) NewDiscussion

func (d *MergeRequestDiscussion) NewDiscussion(ctx context.Context, body string) (*gitlab.Discussion, error)

NewDiscussion creates a new discussion thread on the merge request.

func (*MergeRequestDiscussion) NewPositionDiscussion

func (d *MergeRequestDiscussion) NewPositionDiscussion(ctx context.Context, body string, pos *gitlab.PositionOptions, commitID string) (*gitlab.Discussion, error)

NewPositionDiscussion creates a new discussion on a specific position in the merge request diff.

func (*MergeRequestDiscussion) ResolveDiscussion

func (d *MergeRequestDiscussion) ResolveDiscussion(ctx context.Context, discussionID string, resolved bool) (*gitlab.Discussion, error)

ResolveDiscussion resolves or unresolves a thread of discussion in a merge request.

type PositionedManager

type PositionedManager interface {
	Manager

	NewPositionDiscussion(ctx context.Context, body string, position *gitlab.PositionOptions, commitID string) (*gitlab.Discussion, error)
}

PositionedManager extends Manager with methods for working with discussion threads that have a specific position reference, such as diff discussions on merge requests.

type ResolvableManager

type ResolvableManager interface {
	Manager

	// ResolveDiscussion resolves or unresolves a thread of discussion.
	ResolveDiscussion(ctx context.Context, discussionID string, resolved bool) (*gitlab.Discussion, error)
}

ResolvableManager extends Manager with methods for resolving discussions, which is only applicable to merge request discussions.

type SnippetDiscussion

type SnippetDiscussion struct {
	// contains filtered or unexported fields
}

SnippetDiscussion provides methods for managing discussions on GitLab snippets.

func NewSnippetDiscussion

func NewSnippetDiscussion(client *gitlab.Client, projectID mcpargs.ID, snippetID int) (*SnippetDiscussion, error)

NewSnippetDiscussion creates a new instance for managing discussions on a specific GitLab snippet.

func (*SnippetDiscussion) AddNote

func (d *SnippetDiscussion) AddNote(ctx context.Context, discussionID string, body string) (*gitlab.Note, error)

AddNote adds a new note to an existing discussion thread.

func (*SnippetDiscussion) DeleteNote

func (d *SnippetDiscussion) DeleteNote(ctx context.Context, discussionID string, noteID int) error

DeleteNote removes a note from a discussion thread.

func (*SnippetDiscussion) List

func (d *SnippetDiscussion) List(ctx context.Context, confidential bool) ([]*gitlab.Discussion, error)

List returns all discussions for the snippet.

func (*SnippetDiscussion) ModifyNote

func (d *SnippetDiscussion) ModifyNote(ctx context.Context, discussionID string, noteID int, body string) (*gitlab.Note, error)

ModifyNote updates an existing note in a discussion thread.

func (*SnippetDiscussion) NewDiscussion

func (d *SnippetDiscussion) NewDiscussion(ctx context.Context, body string) (*gitlab.Discussion, error)

NewDiscussion creates a new discussion thread on the snippet.

Jump to

Keyboard shortcuts

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