pipelines

package
v1.0.5 Latest Latest
Warning

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

Go to latest
Published: Apr 22, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

Package pipelines implements MCP tool handlers for GitLab pipeline operations including list, get, create, cancel, retry, and delete. It wraps the Pipelines service from client-go v2.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Delete

func Delete(ctx context.Context, client *gitlabclient.Client, input DeleteInput) error

Delete permanently deletes a pipeline and all its jobs.

func FormatDetailMarkdown

func FormatDetailMarkdown(p DetailOutput) string

FormatDetailMarkdown renders a single pipeline detail as a Markdown summary.

func FormatListMarkdown

func FormatListMarkdown(out ListOutput) string

FormatListMarkdown renders a paginated list of pipelines as a Markdown table.

func FormatTestReportMarkdown

func FormatTestReportMarkdown(out TestReportOutput) string

FormatTestReportMarkdown renders a pipeline test report as Markdown.

func FormatTestReportSummaryMarkdown

func FormatTestReportSummaryMarkdown(out TestReportSummaryOutput) string

FormatTestReportSummaryMarkdown renders a pipeline test report summary as Markdown.

func FormatVariablesMarkdown

func FormatVariablesMarkdown(out VariablesOutput) string

FormatVariablesMarkdown renders pipeline variables as a Markdown table.

func FormatWaitMarkdown

func FormatWaitMarkdown(out WaitOutput) string

FormatWaitMarkdown renders the wait result as a Markdown summary.

func RegisterTools

func RegisterTools(server *mcp.Server, client *gitlabclient.Client)

RegisterTools registers all pipeline MCP tools on the given server.

Types

type ActionInput

type ActionInput struct {
	ProjectID  toolutil.StringOrInt `json:"project_id"  jsonschema:"Project ID or URL-encoded path,required"`
	PipelineID int64                `json:"pipeline_id" jsonschema:"Pipeline ID to act on,required"`
}

ActionInput defines parameters for pipeline cancel/retry actions.

type CreateInput

type CreateInput struct {
	ProjectID toolutil.StringOrInt  `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
	Ref       string                `json:"ref"        jsonschema:"Branch or tag name to run the pipeline for"`
	Variables []VariableOptionInput `json:"variables,omitempty" jsonschema:"Pipeline variables to set"`
}

CreateInput defines parameters for creating a new pipeline.

type DeleteInput

type DeleteInput struct {
	ProjectID  toolutil.StringOrInt `json:"project_id"  jsonschema:"Project ID or URL-encoded path,required"`
	PipelineID int64                `json:"pipeline_id" jsonschema:"Pipeline ID to delete,required"`
}

DeleteInput defines parameters for deleting a pipeline.

type DetailOutput

type DetailOutput struct {
	toolutil.HintableOutput
	ID             int64         `json:"id"`
	IID            int64         `json:"iid"`
	ProjectID      int64         `json:"project_id"`
	Status         string        `json:"status"`
	Source         string        `json:"source"`
	Ref            string        `json:"ref"`
	SHA            string        `json:"sha"`
	BeforeSHA      string        `json:"before_sha,omitempty"`
	Name           string        `json:"name"`
	Tag            bool          `json:"tag"`
	YamlErrors     string        `json:"yaml_errors,omitempty"`
	Duration       int64         `json:"duration"`
	QueuedDuration int64         `json:"queued_duration"`
	Coverage       string        `json:"coverage,omitempty"`
	DetailedStatus *StatusOutput `json:"detailed_status,omitempty"`
	WebURL         string        `json:"web_url"`
	CreatedAt      string        `json:"created_at"`
	UpdatedAt      string        `json:"updated_at"`
	StartedAt      string        `json:"started_at,omitempty"`
	FinishedAt     string        `json:"finished_at,omitempty"`
	CommittedAt    string        `json:"committed_at,omitempty"`
	UserUsername   string        `json:"user_username,omitempty"`
}

DetailOutput represents a single pipeline with full details.

func Cancel

func Cancel(ctx context.Context, client *gitlabclient.Client, input ActionInput) (DetailOutput, error)

Cancel cancels a running pipeline's jobs.

func Create

func Create(ctx context.Context, client *gitlabclient.Client, input CreateInput) (DetailOutput, error)

Create creates a new pipeline for the given ref with optional variables.

func DetailToOutput

func DetailToOutput(p *gl.Pipeline) DetailOutput

DetailToOutput converts a GitLab API gl.Pipeline to MCP output.

func Get

func Get(ctx context.Context, client *gitlabclient.Client, input GetInput) (DetailOutput, error)

Get retrieves a single pipeline by ID from a GitLab project.

func GetLatest

func GetLatest(ctx context.Context, client *gitlabclient.Client, input GetLatestInput) (DetailOutput, error)

GetLatest retrieves the latest pipeline for a project, optionally filtered by ref. Falls back to listing pipelines (per_page=1, sort=desc) if the /latest endpoint returns 403, which happens for users without Maintainer+ role.

func Retry

func Retry(ctx context.Context, client *gitlabclient.Client, input ActionInput) (DetailOutput, error)

Retry retries failed jobs in a pipeline.

func UpdateMetadata

func UpdateMetadata(ctx context.Context, client *gitlabclient.Client, input UpdateMetadataInput) (DetailOutput, error)

UpdateMetadata updates the metadata (name) of a pipeline.

type GetInput

type GetInput struct {
	ProjectID  toolutil.StringOrInt `json:"project_id"  jsonschema:"Project ID or URL-encoded path,required"`
	PipelineID int64                `json:"pipeline_id" jsonschema:"Pipeline ID to retrieve,required"`
}

GetInput defines parameters for retrieving a single pipeline.

type GetLatestInput

type GetLatestInput struct {
	ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
	Ref       string               `json:"ref,omitempty" jsonschema:"Branch or tag name to filter by (defaults to the default branch)"`
}

GetLatestInput defines parameters for getting the latest pipeline.

type ListInput

type ListInput struct {
	ProjectID     toolutil.StringOrInt `json:"project_id"              jsonschema:"Project ID or URL-encoded path,required"`
	Scope         string               `json:"scope,omitempty"         jsonschema:"Filter by scope (running, pending, finished, branches, tags)"`
	Status        string               `` /* 176-byte string literal not displayed */
	Source        string               `` /* 143-byte string literal not displayed */
	Ref           string               `json:"ref,omitempty"           jsonschema:"Filter by branch or tag name"`
	SHA           string               `json:"sha,omitempty"           jsonschema:"Filter by commit SHA"`
	Name          string               `json:"name,omitempty"          jsonschema:"Filter by pipeline name"`
	Username      string               `json:"username,omitempty"      jsonschema:"Filter by username that triggered the pipeline"`
	YamlErrors    bool                 `json:"yaml_errors,omitempty"   jsonschema:"Return only pipelines with YAML errors"`
	OrderBy       string               `json:"order_by,omitempty"      jsonschema:"Order by field (id, status, ref, updated_at, user_id)"`
	Sort          string               `json:"sort,omitempty"          jsonschema:"Sort direction (asc, desc)"`
	CreatedAfter  string               `json:"created_after,omitempty" jsonschema:"Return pipelines created after date (ISO 8601 format, e.g. 2025-01-01T00:00:00Z)"`
	CreatedBefore string               `` /* 126-byte string literal not displayed */
	UpdatedAfter  string               `json:"updated_after,omitempty" jsonschema:"Return pipelines updated after date (ISO 8601 format, e.g. 2025-01-01T00:00:00Z)"`
	UpdatedBefore string               `` /* 126-byte string literal not displayed */
	toolutil.PaginationInput
}

ListInput defines parameters for listing pipelines in a GitLab project.

type ListOutput

type ListOutput struct {
	toolutil.HintableOutput
	Pipelines  []Output                  `json:"pipelines"`
	Pagination toolutil.PaginationOutput `json:"pagination"`
}

ListOutput holds a paginated list of pipelines.

func List

func List(ctx context.Context, client *gitlabclient.Client, input ListInput) (ListOutput, error)

List retrieves a paginated list of pipelines for a GitLab project. Supports filtering by scope, status, source, ref, SHA, username, and date ranges.

type Output

type Output struct {
	toolutil.HintableOutput
	ID        int64  `json:"id"`
	IID       int64  `json:"iid"`
	ProjectID int64  `json:"project_id"`
	Status    string `json:"status"`
	Source    string `json:"source"`
	Ref       string `json:"ref"`
	SHA       string `json:"sha"`
	Name      string `json:"name"`
	WebURL    string `json:"web_url"`
	CreatedAt string `json:"created_at"`
	UpdatedAt string `json:"updated_at"`
}

Output represents a single pipeline in the list response.

func ToOutput

func ToOutput(p *gl.PipelineInfo) Output

ToOutput converts a GitLab API gl.PipelineInfo to MCP output format.

type StatusOutput

type StatusOutput struct {
	Icon        string `json:"icon"`
	Text        string `json:"text"`
	Label       string `json:"label"`
	Group       string `json:"group"`
	Tooltip     string `json:"tooltip"`
	HasDetails  bool   `json:"has_details"`
	DetailsPath string `json:"details_path,omitempty"`
	Favicon     string `json:"favicon,omitempty"`
}

StatusOutput represents the detailed status of a pipeline.

type TestReportOutput

type TestReportOutput struct {
	toolutil.HintableOutput
	TotalTime    float64           `json:"total_time"`
	TotalCount   int64             `json:"total_count"`
	SuccessCount int64             `json:"success_count"`
	FailedCount  int64             `json:"failed_count"`
	SkippedCount int64             `json:"skipped_count"`
	ErrorCount   int64             `json:"error_count"`
	TestSuites   []TestSuiteOutput `json:"test_suites"`
}

TestReportOutput represents a pipeline test report.

func GetTestReport

func GetTestReport(ctx context.Context, client *gitlabclient.Client, input GetInput) (TestReportOutput, error)

GetTestReport retrieves the test report for a specific pipeline.

type TestReportSummaryOutput

type TestReportSummaryOutput struct {
	toolutil.HintableOutput
	TotalTime    float64                  `json:"total_time"`
	TotalCount   int64                    `json:"total_count"`
	SuccessCount int64                    `json:"success_count"`
	FailedCount  int64                    `json:"failed_count"`
	SkippedCount int64                    `json:"skipped_count"`
	ErrorCount   int64                    `json:"error_count"`
	TestSuites   []TestSuiteSummaryOutput `json:"test_suites"`
}

TestReportSummaryOutput represents a pipeline test report summary.

func GetTestReportSummary

func GetTestReportSummary(ctx context.Context, client *gitlabclient.Client, input GetInput) (TestReportSummaryOutput, error)

GetTestReportSummary retrieves the test report summary for a specific pipeline.

type TestSuiteOutput

type TestSuiteOutput struct {
	Name         string  `json:"name"`
	TotalTime    float64 `json:"total_time"`
	TotalCount   int64   `json:"total_count"`
	SuccessCount int64   `json:"success_count"`
	FailedCount  int64   `json:"failed_count"`
	SkippedCount int64   `json:"skipped_count"`
	ErrorCount   int64   `json:"error_count"`
}

TestSuiteOutput represents a test suite within a test report.

type TestSuiteSummaryOutput

type TestSuiteSummaryOutput struct {
	Name         string  `json:"name"`
	TotalTime    float64 `json:"total_time"`
	TotalCount   int64   `json:"total_count"`
	SuccessCount int64   `json:"success_count"`
	FailedCount  int64   `json:"failed_count"`
	SkippedCount int64   `json:"skipped_count"`
	ErrorCount   int64   `json:"error_count"`
	BuildIDs     []int64 `json:"build_ids"`
}

TestSuiteSummaryOutput represents a test suite summary.

type UpdateMetadataInput

type UpdateMetadataInput struct {
	ProjectID  toolutil.StringOrInt `json:"project_id"  jsonschema:"Project ID or URL-encoded path,required"`
	PipelineID int64                `json:"pipeline_id" jsonschema:"Pipeline ID to update,required"`
	Name       string               `json:"name"        jsonschema:"New pipeline name,required"`
}

UpdateMetadataInput defines parameters for updating pipeline metadata.

type VariableOptionInput

type VariableOptionInput struct {
	Key          string `json:"key"           jsonschema:"Variable key,required"`
	Value        string `json:"value"         jsonschema:"Variable value"`
	VariableType string `json:"variable_type,omitempty" jsonschema:"Variable type (env_var or file, default: env_var)"`
}

VariableOptionInput represents a variable to pass when creating a pipeline.

type VariableOutput

type VariableOutput struct {
	Key          string `json:"key"`
	Value        string `json:"value"`
	VariableType string `json:"variable_type"`
}

VariableOutput represents a single pipeline variable.

type VariablesOutput

type VariablesOutput struct {
	toolutil.HintableOutput
	Variables []VariableOutput `json:"variables"`
}

VariablesOutput holds a list of pipeline variables.

func GetVariables

func GetVariables(ctx context.Context, client *gitlabclient.Client, input GetInput) (VariablesOutput, error)

GetVariables retrieves the variables for a specific pipeline.

type WaitInput

type WaitInput struct {
	ProjectID       toolutil.StringOrInt `json:"project_id"                jsonschema:"Project ID or URL-encoded path,required"`
	PipelineID      int64                `json:"pipeline_id"               jsonschema:"Pipeline ID to wait for,required"`
	IntervalSeconds int                  `json:"interval_seconds,omitempty" jsonschema:"Polling interval in seconds (5-60, default 10)"`
	TimeoutSeconds  int                  `json:"timeout_seconds,omitempty"  jsonschema:"Maximum wait time in seconds (1-3600, default 300)"`
	FailOnError     *bool                `json:"fail_on_error,omitempty"    jsonschema:"Return isError when pipeline ends in failed/canceled status (default true)"`
}

WaitInput defines parameters for waiting on a pipeline to complete.

type WaitOutput

type WaitOutput struct {
	toolutil.HintableOutput
	Pipeline    DetailOutput `json:"pipeline"`
	WaitedFor   string       `json:"waited_for"`
	PollCount   int          `json:"poll_count"`
	FinalStatus string       `json:"final_status"`
	TimedOut    bool         `json:"timed_out"`
}

WaitOutput holds the result of waiting for a pipeline.

func Wait

func Wait(ctx context.Context, req *mcp.CallToolRequest, client *gitlabclient.Client, input WaitInput) (WaitOutput, error)

Wait polls a pipeline until it reaches a terminal state or the timeout is reached. It sends MCP progress notifications to keep the client informed during polling.

Jump to

Keyboard shortcuts

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