Skip to content

Commit 1aec150

Browse files
authored
improve execution logging (#54)
1 parent 182de19 commit 1aec150

File tree

4 files changed

+178
-37
lines changed

4 files changed

+178
-37
lines changed

internal/validators/status/status.go

Lines changed: 84 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,67 @@ type status struct {
1010
succeeded bool
1111
}
1212

13+
func prettyPrintJobList(jobs []string) string {
14+
result := ""
15+
if len(jobs) == 0 {
16+
result = "[]"
17+
}
18+
for i, job := range jobs {
19+
result += fmt.Sprintf("- %s", job)
20+
if i != len(jobs)-1 {
21+
result += "\n"
22+
}
23+
}
24+
25+
return result
26+
}
27+
1328
func (s *status) Detail() string {
1429
result := fmt.Sprintf(
1530
`%d out of %d
1631
17-
Total job count: %d
18-
jobs: %+q
19-
Completed job count: %d
20-
jobs: %+q
21-
Failed job count: %d
22-
jobs: %+q
32+
Total job count: %d
33+
Completed job count: %d
34+
Incompleted job count: %d
35+
Failed job count: %d
36+
Ignored job count: %d
2337
`,
2438
len(s.completeJobs), len(s.totalJobs),
25-
len(s.totalJobs), s.totalJobs,
26-
len(s.completeJobs), s.completeJobs,
27-
len(s.errJobs), s.errJobs,
39+
len(s.totalJobs),
40+
len(s.completeJobs),
41+
len(s.getIncompleteJobs()),
42+
len(s.errJobs),
43+
len(s.ignoredJobs),
2844
)
2945

30-
if len(s.ignoredJobs) > 0 {
31-
result = fmt.Sprintf(
32-
`%s
46+
result = fmt.Sprintf(`%s
47+
::group::Failed jobs
48+
%s
49+
::endgroup::
3350
34-
--
35-
Ignored jobs: %+q`, result, s.ignoredJobs)
36-
}
51+
::group::Completed jobs
52+
%s
53+
::endgroup::
54+
55+
::group::Incomplete jobs
56+
%s
57+
::endgroup::
58+
59+
::group::Ignored jobs
60+
%s
61+
::endgroup::
62+
63+
::group::All jobs
64+
%s
65+
::endgroup::
66+
`,
67+
result,
68+
prettyPrintJobList(s.errJobs),
69+
prettyPrintJobList(s.completeJobs),
70+
prettyPrintJobList(s.getIncompleteJobs()),
71+
prettyPrintJobList(s.ignoredJobs),
72+
prettyPrintJobList(s.totalJobs),
73+
)
3774

3875
return result
3976
}
@@ -42,3 +79,35 @@ func (s *status) IsSuccess() bool {
4279
// TDOO: Add test case
4380
return s.succeeded
4481
}
82+
83+
func (s *status) getIncompleteJobs() []string {
84+
var incomplete []string
85+
86+
for _, job := range s.totalJobs {
87+
found := false
88+
for _, complete := range s.completeJobs {
89+
if job == complete {
90+
found = true
91+
break
92+
}
93+
}
94+
95+
for _, failed := range s.errJobs {
96+
if job == failed {
97+
found = true
98+
break
99+
}
100+
}
101+
102+
for _, ignored := range s.ignoredJobs {
103+
if job == ignored {
104+
found = true
105+
break
106+
}
107+
}
108+
if !found {
109+
incomplete = append(incomplete, job)
110+
}
111+
}
112+
return incomplete
113+
}

internal/validators/status/status_test.go

Lines changed: 80 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,33 @@ func Test_status_Detail(t *testing.T) {
2525
},
2626
want: `1 out of 3
2727
28-
Total job count: 3
29-
jobs: ["job-1" "job-2" "job-3"]
30-
Completed job count: 1
31-
jobs: ["job-2"]
32-
Failed job count: 1
33-
jobs: ["job-3"]
28+
Total job count: 3
29+
Completed job count: 1
30+
Incompleted job count: 1
31+
Failed job count: 1
32+
Ignored job count: 0
33+
34+
::group::Failed jobs
35+
- job-3
36+
::endgroup::
37+
38+
::group::Completed jobs
39+
- job-2
40+
::endgroup::
41+
42+
::group::Incomplete jobs
43+
- job-1
44+
::endgroup::
45+
46+
::group::Ignored jobs
47+
[]
48+
::endgroup::
49+
50+
::group::All jobs
51+
- job-1
52+
- job-2
53+
- job-3
54+
::endgroup::
3455
`,
3556
},
3657
"return detail with ignored jobs input": {
@@ -54,16 +75,36 @@ func Test_status_Detail(t *testing.T) {
5475
},
5576
want: `2 out of 4
5677
57-
Total job count: 4
58-
jobs: ["job-1" "job-2" "job-3" "job-4"]
59-
Completed job count: 2
60-
jobs: ["job-2" "job-4"]
61-
Failed job count: 1
62-
jobs: ["job-3"]
78+
Total job count: 4
79+
Completed job count: 2
80+
Incompleted job count: 1
81+
Failed job count: 1
82+
Ignored job count: 1
83+
84+
::group::Failed jobs
85+
- job-3
86+
::endgroup::
87+
88+
::group::Completed jobs
89+
- job-2
90+
- job-4
91+
::endgroup::
6392
93+
::group::Incomplete jobs
94+
- job-1
95+
::endgroup::
6496
65-
--
66-
Ignored jobs: ["job-4"]`,
97+
::group::Ignored jobs
98+
- job-4
99+
::endgroup::
100+
101+
::group::All jobs
102+
- job-1
103+
- job-2
104+
- job-3
105+
- job-4
106+
::endgroup::
107+
`,
67108
},
68109
"return detail when totalJobs and completeJobs is empty": {
69110
s: &status{
@@ -72,12 +113,31 @@ func Test_status_Detail(t *testing.T) {
72113
},
73114
want: `0 out of 0
74115
75-
Total job count: 0
76-
jobs: []
77-
Completed job count: 0
78-
jobs: []
79-
Failed job count: 0
80-
jobs: []
116+
Total job count: 0
117+
Completed job count: 0
118+
Incompleted job count: 0
119+
Failed job count: 0
120+
Ignored job count: 0
121+
122+
::group::Failed jobs
123+
[]
124+
::endgroup::
125+
126+
::group::Completed jobs
127+
[]
128+
::endgroup::
129+
130+
::group::Incomplete jobs
131+
[]
132+
::endgroup::
133+
134+
::group::Ignored jobs
135+
[]
136+
::endgroup::
137+
138+
::group::All jobs
139+
[]
140+
::endgroup::
81141
`,
82142
},
83143
}

internal/validators/status/validator.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,12 @@ func (sv *statusValidator) Validate(ctx context.Context) (validators.Status, err
104104
totalJobs: make([]string, 0, len(ghaStatuses)),
105105
completeJobs: make([]string, 0, len(ghaStatuses)),
106106
errJobs: make([]string, 0, len(ghaStatuses)/2),
107+
ignoredJobs: make([]string, 0, len(ghaStatuses)),
107108
succeeded: true,
108109
}
109110

111+
st.ignoredJobs = append(st.ignoredJobs, sv.ignoredJobs...)
112+
110113
var successCnt int
111114
for _, ghaStatus := range ghaStatuses {
112115
var toIgnore bool

internal/validators/status/validator_test.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ func Test_statusValidator_Validate(t *testing.T) {
184184
succeeded: true,
185185
totalJobs: []string{},
186186
completeJobs: []string{},
187+
ignoredJobs: []string{},
187188
errJobs: []string{},
188189
},
189190
},
@@ -209,6 +210,7 @@ func Test_statusValidator_Validate(t *testing.T) {
209210
succeeded: true,
210211
totalJobs: []string{},
211212
completeJobs: []string{},
213+
ignoredJobs: []string{},
212214
errJobs: []string{},
213215
},
214216
},
@@ -233,6 +235,7 @@ func Test_statusValidator_Validate(t *testing.T) {
233235
succeeded: false,
234236
totalJobs: []string{"job"},
235237
completeJobs: []string{},
238+
ignoredJobs: []string{},
236239
errJobs: []string{},
237240
},
238241
},
@@ -272,6 +275,7 @@ func Test_statusValidator_Validate(t *testing.T) {
272275
errJobs: []string{
273276
"job-02",
274277
},
278+
ignoredJobs: []string{},
275279
}).Detail(),
276280
},
277281
"returns error when there is a failed job with failure state": {
@@ -310,6 +314,7 @@ func Test_statusValidator_Validate(t *testing.T) {
310314
errJobs: []string{
311315
"job-02",
312316
},
317+
ignoredJobs: []string{},
313318
}).Detail(),
314319
},
315320
"returns failed status and nil when successful job count is less than total": {
@@ -347,7 +352,8 @@ func Test_statusValidator_Validate(t *testing.T) {
347352
completeJobs: []string{
348353
"job-01",
349354
},
350-
errJobs: []string{},
355+
errJobs: []string{},
356+
ignoredJobs: []string{},
351357
},
352358
},
353359
"returns succeeded status and nil when validation is success": {
@@ -386,7 +392,8 @@ func Test_statusValidator_Validate(t *testing.T) {
386392
"job-01",
387393
"job-02",
388394
},
389-
errJobs: []string{},
395+
errJobs: []string{},
396+
ignoredJobs: []string{},
390397
},
391398
},
392399
"returns succeeded status and nil when only an ignored job is failing": {
@@ -421,6 +428,7 @@ func Test_statusValidator_Validate(t *testing.T) {
421428
totalJobs: []string{"job-01"},
422429
completeJobs: []string{"job-01"},
423430
errJobs: []string{},
431+
ignoredJobs: []string{"job-02", "job-03"},
424432
},
425433
},
426434
"returns succeeded status and nil when only an ignored job is failing, with failure state": {
@@ -455,6 +463,7 @@ func Test_statusValidator_Validate(t *testing.T) {
455463
totalJobs: []string{"job-01"},
456464
completeJobs: []string{"job-01"},
457465
errJobs: []string{},
466+
ignoredJobs: []string{"job-02", "job-03"},
458467
},
459468
},
460469
}

0 commit comments

Comments
 (0)