Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pkg/buildkite/access_token.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func AccessToken(client AccessTokenClient) (tool mcp.Tool, handler server.ToolHa

token, _, err := client.Get(ctx)
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

return mcpTextResult(span, &token)
Expand Down
10 changes: 5 additions & 5 deletions pkg/buildkite/annotations.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,22 +39,22 @@ func ListAnnotations(client AnnotationsClient) (tool mcp.Tool, handler server.To

orgSlug, err := request.RequireString("org_slug")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

pipelineSlug, err := request.RequireString("pipeline_slug")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

buildNumber, err := request.RequireString("build_number")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

paginationParams, err := optionalPaginationParams(request)
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

span.SetAttributes(
Expand All @@ -69,7 +69,7 @@ func ListAnnotations(client AnnotationsClient) (tool mcp.Tool, handler server.To
ListOptions: paginationParams,
})
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

result := PaginatedResult[buildkite.Annotation]{
Expand Down
26 changes: 13 additions & 13 deletions pkg/buildkite/artifacts.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,22 +103,22 @@ func ListArtifactsForBuild(client ArtifactsClient) (tool mcp.Tool, handler serve

orgSlug, err := request.RequireString("org_slug")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

pipelineSlug, err := request.RequireString("pipeline_slug")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

buildNumber, err := request.RequireString("build_number")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

paginationParams, err := optionalPaginationParams(request)
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

span.SetAttributes(
Expand All @@ -133,7 +133,7 @@ func ListArtifactsForBuild(client ArtifactsClient) (tool mcp.Tool, handler serve
ListOptions: paginationParams,
})
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

result := PaginatedResult[buildkite.Artifact]{
Expand Down Expand Up @@ -184,27 +184,27 @@ func ListArtifactsForJob(client ArtifactsClient) (tool mcp.Tool, handler server.

orgSlug, err := request.RequireString("org_slug")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

pipelineSlug, err := request.RequireString("pipeline_slug")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

buildNumber, err := request.RequireString("build_number")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

jobID, err := request.RequireString("job_id")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

paginationParams, err := optionalPaginationParams(request)
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

span.SetAttributes(
Expand All @@ -220,7 +220,7 @@ func ListArtifactsForJob(client ArtifactsClient) (tool mcp.Tool, handler server.
ListOptions: paginationParams,
})
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

result := PaginatedResult[buildkite.Artifact]{
Expand Down Expand Up @@ -261,7 +261,7 @@ func GetArtifact(client ArtifactsClient) (tool mcp.Tool, handler server.ToolHand

artifactURL, err := request.RequireString("url")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

// Validate the URL format
Expand All @@ -275,7 +275,7 @@ func GetArtifact(client ArtifactsClient) (tool mcp.Tool, handler server.ToolHand
var buffer bytes.Buffer
resp, err := client.DownloadArtifactByURL(ctx, artifactURL, &buffer)
if err != nil {
return mcp.NewToolResultError(fmt.Sprintf("response failed with error %s", err.Error())), nil
return handleAPIError(err), nil
}

// Create a response with the artifact data encoded safely for JSON
Expand Down
55 changes: 6 additions & 49 deletions pkg/buildkite/builds.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package buildkite
import (
"context"
"encoding/json"
"errors"
"fmt"
"strings"
"time"
Expand Down Expand Up @@ -259,14 +258,7 @@ func ListBuilds(client BuildsClient) (tool mcp.Tool, handler mcp.TypedToolHandle

builds, resp, err := client.ListByPipeline(ctx, args.OrgSlug, args.PipelineSlug, options)
if err != nil {
var errResp *buildkite.ErrorResponse
if errors.As(err, &errResp) {
if errResp.RawBody != nil {
return mcp.NewToolResultError(string(errResp.RawBody)), nil
}
}

return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

headers := map[string]string{
Expand Down Expand Up @@ -340,14 +332,7 @@ func GetBuildTestEngineRuns(client BuildsClient) (tool mcp.Tool, handler mcp.Typ
IncludeTestEngine: true,
})
if err != nil {
var errResp *buildkite.ErrorResponse
if errors.As(err, &errResp) {
if errResp.RawBody != nil {
return mcp.NewToolResultError(string(errResp.RawBody)), nil
}
}

return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

// Extract just the test engine runs data
Expand Down Expand Up @@ -423,14 +408,7 @@ func GetBuild(client BuildsClient) (tool mcp.Tool, handler mcp.TypedToolHandlerF

build, _, err := client.Get(ctx, args.OrgSlug, args.PipelineSlug, args.BuildNumber, options)
if err != nil {
var errResp *buildkite.ErrorResponse
if errors.As(err, &errResp) {
if errResp.RawBody != nil {
return mcp.NewToolResultError(string(errResp.RawBody)), nil
}
}

return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

// Parse job states filter
Expand Down Expand Up @@ -602,14 +580,7 @@ func CreateBuild(client BuildsClient) (tool mcp.Tool, handler mcp.TypedToolHandl

build, _, err := client.Create(ctx, args.OrgSlug, args.PipelineSlug, createBuild)
if err != nil {
var errResp *buildkite.ErrorResponse
if errors.As(err, &errResp) {
if errResp.RawBody != nil {
return mcp.NewToolResultError(string(errResp.RawBody)), nil
}
}

return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

return mcpTextResult(span, &build)
Expand Down Expand Up @@ -668,14 +639,7 @@ func WaitForBuild(client BuildsClient) (tool mcp.Tool, handler mcp.TypedToolHand

build, _, err := client.Get(ctx, args.OrgSlug, args.PipelineSlug, args.BuildNumber, &buildkite.BuildGetOptions{})
if err != nil {
var errResp *buildkite.ErrorResponse
if errors.As(err, &errResp) {
if errResp.RawBody != nil {
return mcp.NewToolResultError(string(errResp.RawBody)), nil
}
}

return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

// wait for the build to enter a terminal state
Expand All @@ -702,14 +666,7 @@ func WaitForBuild(client BuildsClient) (tool mcp.Tool, handler mcp.TypedToolHand
case <-ticker.C:
build, _, err = client.Get(ctx, args.OrgSlug, args.PipelineSlug, args.BuildNumber, nil)
if err != nil {
var errResp *buildkite.ErrorResponse
if errors.As(err, &errResp) {
if errResp.RawBody != nil {
return mcp.NewToolResultError(string(errResp.RawBody)), nil
}
}

return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

log.Ctx(ctx).Info().Str("build_id", build.ID).Str("state", build.State).Int("job_count", len(build.Jobs)).Msg("Build status checked")
Expand Down
16 changes: 8 additions & 8 deletions pkg/buildkite/cluster_queue.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,17 @@ func ListClusterQueues(client ClusterQueuesClient) (tool mcp.Tool, handler serve

orgSlug, err := request.RequireString("org_slug")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

clusterID, err := request.RequireString("cluster_id")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

paginationParams, err := optionalPaginationParams(request)
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}
span.SetAttributes(
attribute.String("org_slug", orgSlug),
Expand All @@ -58,7 +58,7 @@ func ListClusterQueues(client ClusterQueuesClient) (tool mcp.Tool, handler serve
ListOptions: paginationParams,
})
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

if len(queues) == 0 {
Expand Down Expand Up @@ -102,17 +102,17 @@ func GetClusterQueue(client ClusterQueuesClient) (tool mcp.Tool, handler server.

orgSlug, err := request.RequireString("org_slug")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

clusterID, err := request.RequireString("cluster_id")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

queueID, err := request.RequireString("queue_id")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}
span.SetAttributes(
attribute.String("org_slug", orgSlug),
Expand All @@ -122,7 +122,7 @@ func GetClusterQueue(client ClusterQueuesClient) (tool mcp.Tool, handler server.

queue, _, err := client.Get(ctx, orgSlug, clusterID, queueID)
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

return mcpTextResult(span, &queue)
Expand Down
12 changes: 6 additions & 6 deletions pkg/buildkite/clusters.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@ func ListClusters(client ClustersClient) (tool mcp.Tool, handler server.ToolHand

orgSlug, err := request.RequireString("org_slug")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

paginationParams, err := optionalPaginationParams(request)
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}
span.SetAttributes(
attribute.String("org_slug", orgSlug),
Expand All @@ -49,7 +49,7 @@ func ListClusters(client ClustersClient) (tool mcp.Tool, handler server.ToolHand
ListOptions: paginationParams,
})
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

if len(clusters) == 0 {
Expand Down Expand Up @@ -90,12 +90,12 @@ func GetCluster(client ClustersClient) (tool mcp.Tool, handler server.ToolHandle

orgSlug, err := request.RequireString("org_slug")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

clusterID, err := request.RequireString("cluster_id")
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}
span.SetAttributes(
attribute.String("org_slug", orgSlug),
Expand All @@ -104,7 +104,7 @@ func GetCluster(client ClustersClient) (tool mcp.Tool, handler server.ToolHandle

cluster, _, err := client.Get(ctx, orgSlug, clusterID)
if err != nil {
return mcp.NewToolResultError(err.Error()), nil
return handleAPIError(err), nil
}

return mcpTextResult(span, &cluster)
Expand Down
Loading