Skip to content

Commit 1f26a9a

Browse files
authored
Merge pull request #181 from buildkite/chore_buildkite_logs_update
chore(deps): bump buildkite-logs to the latest version
2 parents 4add9b9 + 05e40d9 commit 1f26a9a

3 files changed

Lines changed: 5 additions & 34 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.24.5
44

55
require (
66
github.com/alecthomas/kong v1.12.1
7-
github.com/buildkite/buildkite-logs v0.6.1
7+
github.com/buildkite/buildkite-logs v0.6.2
88
github.com/buildkite/go-buildkite/v4 v4.9.1
99
github.com/cenkalti/backoff/v5 v5.0.3
1010
github.com/mark3labs/mcp-go v0.43.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPn
7676
github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
7777
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
7878
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
79-
github.com/buildkite/buildkite-logs v0.6.1 h1:5SlAsAFYKy1rl3j7GNldgeOzBMbuKYSgdFlvNnVINEs=
80-
github.com/buildkite/buildkite-logs v0.6.1/go.mod h1:ejxwp0IDk7Wd0yTH0Cvnw8GgRGnpboe6Up4k9SGmWTg=
79+
github.com/buildkite/buildkite-logs v0.6.2 h1:6QyxaPh0Ydn2TkBinzODEmhh1l4W4hmRKMkW216JOY0=
80+
github.com/buildkite/buildkite-logs v0.6.2/go.mod h1:5kxG9E/GTERyOBpMitXNFi9Q0YyFL+niBUO25TkPQa8=
8181
github.com/buildkite/go-buildkite/v4 v4.9.1 h1:dA32pinTsHMTCHO84awc9W9Y21knlPjd/ZOSntMPIb0=
8282
github.com/buildkite/go-buildkite/v4 v4.9.1/go.mod h1:DlebrRJqpZttXDjCW+MJ1QyW9AN++ZWt/UbPtKdbSSk=
8383
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=

pkg/buildkite/joblogs.go

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ type TerseLogEntry struct {
6565
type SearchResult = buildkitelogs.SearchResult
6666
type FileInfo struct {
6767
buildkitelogs.ParquetFileInfo
68-
CacheFile string `json:"cache_file"`
6968
}
7069

7170
type LogResponse struct {
@@ -82,18 +81,14 @@ type SearchOptions = buildkitelogs.SearchOptions
8281

8382
// Real implementation using buildkite-logs-parquet library with injected client
8483
func newParquetReader(ctx context.Context, client BuildkiteLogsClient, params JobLogsBaseParams) (*buildkitelogs.ParquetReader, error) {
85-
// Parse cache TTL
8684
ttl := parseCacheTTL(params.CacheTTL)
8785

88-
// Download and cache the logs using injected client
8986
cacheFilePath, err := client.DownloadAndCache(ctx, params.OrgSlug, params.PipelineSlug, params.BuildNumber, params.JobID, ttl, params.ForceRefresh)
9087
if err != nil {
9188
return nil, fmt.Errorf("failed to download/cache logs: %w", err)
9289
}
9390

94-
// Create parquet reader from cached file
95-
reader := buildkitelogs.NewParquetReader(cacheFilePath)
96-
return reader, nil
91+
return buildkitelogs.NewParquetReader(cacheFilePath), nil
9792
}
9893

9994
func parseCacheTTL(ttlStr string) time.Duration {
@@ -210,18 +205,15 @@ func SearchLogs(client BuildkiteLogsClient) (tool mcp.Tool, handler mcp.TypedToo
210205
attribute.Int("limit", params.Limit),
211206
)
212207

213-
// Validate search pattern
214208
if err := validateSearchPattern(params.Pattern); err != nil {
215209
return mcp.NewToolResultError(err.Error()), nil
216210
}
217211

218-
// Create parquet reader
219212
reader, err := newParquetReader(ctx, client, params.JobLogsBaseParams)
220213
if err != nil {
221214
return mcp.NewToolResultError(fmt.Sprintf("Failed to create log reader: %v", err)), nil
222215
}
223216

224-
// Build search options
225217
opts := SearchOptions{
226218
Pattern: params.Pattern,
227219
CaseSensitive: params.CaseSensitive,
@@ -232,7 +224,6 @@ func SearchLogs(client BuildkiteLogsClient) (tool mcp.Tool, handler mcp.TypedToo
232224
AfterContext: params.AfterContext,
233225
}
234226

235-
// Perform search using iterator
236227
var results []SearchResult
237228
count := 0
238229
for result, err := range reader.SearchEntriesIter(opts) {
@@ -316,25 +307,18 @@ func TailLogs(client BuildkiteLogsClient) (tool mcp.Tool, handler mcp.TypedToolH
316307
attribute.Int("tail", params.Tail),
317308
)
318309

319-
// Create parquet reader
320310
reader, err := newParquetReader(ctx, client, params.JobLogsBaseParams)
321311
if err != nil {
322312
return mcp.NewToolResultError(fmt.Sprintf("Failed to create log reader: %v", err)), nil
323313
}
324314

325-
// Get file info first to calculate tail position
326315
fileInfo, err := reader.GetFileInfo()
327316
if err != nil {
328317
return mcp.NewToolResultError(fmt.Sprintf("Failed to get file info: %v", err)), nil
329318
}
330319

331-
// Calculate starting position for tail
332-
startRow := fileInfo.RowCount - int64(params.Tail)
333-
if startRow < 0 {
334-
startRow = 0
335-
}
320+
startRow := max(fileInfo.RowCount-int64(params.Tail), 0)
336321

337-
// Get tail entries using SeekToRow
338322
var entries []buildkitelogs.ParquetLogEntry
339323
for entry, err := range reader.SeekToRow(startRow) {
340324
if err != nil {
@@ -401,28 +385,18 @@ func GetLogsInfo(client BuildkiteLogsClient) (tool mcp.Tool, handler mcp.TypedTo
401385
attribute.String("job_id", params.JobID),
402386
)
403387

404-
// Create parquet reader
405388
reader, err := newParquetReader(ctx, client, params)
406389
if err != nil {
407390
return mcp.NewToolResultError(fmt.Sprintf("Failed to create log reader: %v", err)), nil
408391
}
409392

410-
// Get file info
411393
libFileInfo, err := reader.GetFileInfo()
412394
if err != nil {
413395
return mcp.NewToolResultError(fmt.Sprintf("Failed to get file info: %v", err)), nil
414396
}
415397

416-
// Get cache file path
417-
cacheFile, err := buildkitelogs.GetCacheFilePath(params.OrgSlug, params.PipelineSlug, params.BuildNumber, params.JobID)
418-
if err != nil {
419-
return mcp.NewToolResultError(fmt.Sprintf("Failed to get cache file path: %v", err)), nil
420-
}
421-
422-
// Create our response with additional cache file info
423398
fileInfo := &FileInfo{
424399
ParquetFileInfo: *libFileInfo,
425-
CacheFile: cacheFile,
426400
}
427401

428402
queryTime := time.Since(startTime)
@@ -487,17 +461,14 @@ func ReadLogs(client BuildkiteLogsClient) (tool mcp.Tool, handler mcp.TypedToolH
487461
attribute.Int("limit", params.Limit),
488462
)
489463

490-
// Create parquet reader
491464
reader, err := newParquetReader(ctx, client, params.JobLogsBaseParams)
492465
if err != nil {
493466
return mcp.NewToolResultError(fmt.Sprintf("Failed to create log reader: %v", err)), nil
494467
}
495468

496-
// Read entries with seek and limit
497469
var entries []buildkitelogs.ParquetLogEntry
498470
count := 0
499471

500-
// Choose iterator based on seek parameter
501472
var entryIter iter.Seq2[buildkitelogs.ParquetLogEntry, error]
502473
if params.Seek > 0 {
503474
entryIter = reader.SeekToRow(int64(params.Seek))

0 commit comments

Comments
 (0)