Skip to content

Commit 7c3f5e2

Browse files
Copilotalexec
andauthored
Add build URLs to get-job output (#17)
* Initial plan * Add build URLs to get-job command output Co-authored-by: alexec <1142830+alexec@users.noreply.github.com> * Update MCP server to also include build URLs Co-authored-by: alexec <1142830+alexec@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: alexec <1142830+alexec@users.noreply.github.com>
1 parent 9217fc6 commit 7c3f5e2

5 files changed

Lines changed: 15 additions & 15 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,8 @@ jenkins get-job my-application-build
143143
# URL: https://jenkins.example.com/job/my-application-build/
144144
# Status: SUCCESS
145145
# Description: Builds the main application
146-
# Last Build: #42 - SUCCESS
147-
# Last Success: #42
146+
# Last Build: #42 - SUCCESS (https://jenkins.example.com/job/my-application-build/42/)
147+
# Last Success: #42 (https://jenkins.example.com/job/my-application-build/42/)
148148
```
149149

150150
**Working with Inner Jobs (Folders and Multi-branch Pipelines):**

duration.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,30 @@ import "fmt"
66
// Returns the largest unit that makes sense: N days, N hours, N minutes, or N seconds
77
func formatDuration(milliseconds float64) string {
88
seconds := int64(milliseconds / 1000)
9-
9+
1010
if seconds < 60 {
1111
if seconds == 1 {
1212
return "1 second"
1313
}
1414
return fmt.Sprintf("%d seconds", seconds)
1515
}
16-
16+
1717
minutes := seconds / 60
1818
if minutes < 60 {
1919
if minutes == 1 {
2020
return "1 minute"
2121
}
2222
return fmt.Sprintf("%d minutes", minutes)
2323
}
24-
24+
2525
hours := minutes / 60
2626
if hours < 24 {
2727
if hours == 1 {
2828
return "1 hour"
2929
}
3030
return fmt.Sprintf("%d hours", hours)
3131
}
32-
32+
3333
days := hours / 24
3434
if days == 1 {
3535
return "1 day"

duration_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@ func TestFormatDuration(t *testing.T) {
1616
{5000, "5 seconds"},
1717
{30000, "30 seconds"},
1818
{59000, "59 seconds"},
19-
19+
2020
// Minutes
2121
{60000, "1 minute"},
2222
{120000, "2 minutes"},
2323
{1800000, "30 minutes"},
2424
{3599000, "59 minutes"},
25-
25+
2626
// Hours
2727
{3600000, "1 hour"},
2828
{7200000, "2 hours"},
2929
{43200000, "12 hours"},
3030
{86399000, "23 hours"},
31-
31+
3232
// Days
3333
{86400000, "1 day"},
3434
{172800000, "2 days"},

main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,17 +239,17 @@ func getJob(ctx context.Context, jobName string) error {
239239

240240
lastBuild, err := job.GetLastBuild(ctx)
241241
if err == nil && lastBuild != nil {
242-
printField("Last Build", fmt.Sprintf("#%d - %s", lastBuild.GetBuildNumber(), lastBuild.GetResult()))
242+
printField("Last Build", fmt.Sprintf("#%d - %s (%s)", lastBuild.GetBuildNumber(), lastBuild.GetResult(), lastBuild.GetUrl()))
243243
}
244244

245245
lastSuccess, err := job.GetLastSuccessfulBuild(ctx)
246246
if err == nil && lastSuccess != nil {
247-
printField("Last Success", fmt.Sprintf("#%d", lastSuccess.GetBuildNumber()))
247+
printField("Last Success", fmt.Sprintf("#%d (%s)", lastSuccess.GetBuildNumber(), lastSuccess.GetUrl()))
248248
}
249249

250250
lastFailed, err := job.GetLastFailedBuild(ctx)
251251
if err == nil && lastFailed != nil {
252-
printField("Last Failed", fmt.Sprintf("#%d", lastFailed.GetBuildNumber()))
252+
printField("Last Failed", fmt.Sprintf("#%d (%s)", lastFailed.GetBuildNumber(), lastFailed.GetUrl()))
253253
}
254254

255255
// Print inner jobs if they exist (for folders and multi-branch pipelines)

mcp.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,17 +153,17 @@ func getJobHandler(ctx context.Context, client *gojenkins.Jenkins, request mcp.C
153153

154154
lastBuild, err := job.GetLastBuild(ctx)
155155
if err == nil && lastBuild != nil {
156-
result += fmt.Sprintf("\nLast Build: #%d - %s", lastBuild.GetBuildNumber(), lastBuild.GetResult())
156+
result += fmt.Sprintf("\nLast Build: #%d - %s (%s)", lastBuild.GetBuildNumber(), lastBuild.GetResult(), lastBuild.GetUrl())
157157
}
158158

159159
lastSuccess, err := job.GetLastSuccessfulBuild(ctx)
160160
if err == nil && lastSuccess != nil {
161-
result += fmt.Sprintf("\nLast Success: #%d", lastSuccess.GetBuildNumber())
161+
result += fmt.Sprintf("\nLast Success: #%d (%s)", lastSuccess.GetBuildNumber(), lastSuccess.GetUrl())
162162
}
163163

164164
lastFailed, err := job.GetLastFailedBuild(ctx)
165165
if err == nil && lastFailed != nil {
166-
result += fmt.Sprintf("\nLast Failed: #%d", lastFailed.GetBuildNumber())
166+
result += fmt.Sprintf("\nLast Failed: #%d (%s)", lastFailed.GetBuildNumber(), lastFailed.GetUrl())
167167
}
168168

169169
// Add inner jobs if they exist (for folders and multi-branch pipelines)

0 commit comments

Comments
 (0)