-
Notifications
You must be signed in to change notification settings - Fork 10
/
workflow.go
86 lines (73 loc) · 2.43 KB
/
workflow.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
Copyright 2021 The AtomCI Group Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package workflow
import (
"time"
httpclient "github.com/isbrick/http-client"
)
// Driver ..
type Driver int
//
const (
DriverJenkins Driver = iota + 1
)
func (d Driver) String() (s string) {
switch d {
case DriverJenkins:
return "jenkins"
default:
return "unknown"
}
}
// WorkFlow ..
type WorkFlow interface {
Ping() (string, error)
Build() (int64, error)
Abort(RunID int64) error
GetJobInfo(runID int64) (*JobInfo, error)
}
// HTTPClient defined http native client
var (
timeout = 1000 * time.Millisecond
HTTPClient = httpclient.NewHClient(httpclient.WithHTTPTimeout(timeout))
)
// JobInfo ..
type JobInfo struct {
Artifacts []interface{} `json:"artifacts"`
Building bool `json:"building"`
Description interface{} `json:"description"`
DisplayName string `json:"displayName"`
Duration int `json:"duration"`
EstimatedDuration int `json:"estimatedDuration"`
Executor interface{} `json:"executor"`
FullDisplayName string `json:"fullDisplayName"`
ID string `json:"id"`
Number int `json:"number"`
QueueID int `json:"queueId"`
Result string `json:"result"`
Status string `json:"status"`
StartTimeMillis int64 `json:"startTimeMillis"`
EndTimeMillis int64 `json:"endTimeMillis"`
DurationMillis int `json:"durationMillis"`
Stages []Stage `json:"stages"`
}
// Stage job's stage
type Stage struct {
ID string `json:"id"`
Name string `json:"name"`
ExecNode string `json:"execNode"`
Status string `json:"status"`
StartTimeMillis int64 `json:"startTimeMillis"`
DurationMillis int `json:"durationMillis"`
PauseDurationMillis int `json:"pauseDurationMillis"`
}