ParseRawOn support schedules (#29)

Fix gitea/act_runner#71

Reviewed-on: https://gitea.com/gitea/act/pulls/29
Reviewed-by: Jason Song <[email protected]>
Reviewed-by: Zettat123 <[email protected]>
Co-authored-by: Lunny Xiao <[email protected]>
Co-committed-by: Lunny Xiao <[email protected]>
This commit is contained in:
Lunny Xiao authored and appleboy committed 2023-03-24 20:15:46 +08:00
1 parent 929ea6df75
commit 7c5400d75b
2 files changed
+66 -15

No files matched your search

+44 -6
View File
@@ -125,8 +125,21 @@ type RunDefaults struct {
}
type Event struct {
Name string
Acts map[string][]string
Name string
acts map[string][]string
schedules []map[string]string
}
func (evt *Event) IsSchedule() bool {
return evt.schedules != nil
}
func (evt *Event) Acts() map[string][]string {
return evt.acts
}
func (evt *Event) Schedules() []map[string]string {
return evt.schedules
}
func ParseRawOn(rawOn *yaml.Node) ([]*Event, error) {
@@ -168,12 +181,12 @@ func ParseRawOn(rawOn *yaml.Node) ([]*Event, error) {
case string:
res = append(res, &Event{
Name: k,
Acts: map[string][]string{},
acts: map[string][]string{},
})
case []string:
res = append(res, &Event{
Name: k,
Acts: map[string][]string{},
acts: map[string][]string{},
})
case map[string]interface{}:
acts := make(map[string][]string, len(t))
@@ -186,7 +199,10 @@ func ParseRawOn(rawOn *yaml.Node) ([]*Event, error) {
case []interface{}:
acts[act] = make([]string, len(b))
for i, v := range b {
acts[act][i] = v.(string)
var ok bool
if acts[act][i], ok = v.(string); !ok {
return nil, fmt.Errorf("unknown on type: %#v", branches)
}
}
default:
return nil, fmt.Errorf("unknown on type: %#v", branches)
@@ -194,7 +210,29 @@ func ParseRawOn(rawOn *yaml.Node) ([]*Event, error) {
}
res = append(res, &Event{
Name: k,
Acts: acts,
acts: acts,
})
case []interface{}:
if k != "schedule" {
return nil, fmt.Errorf("unknown on type: %#v", v)
}
schedules := make([]map[string]string, len(t))
for i, tt := range t {
vv, ok := tt.(map[string]interface{})
if !ok {
return nil, fmt.Errorf("unknown on type: %#v", v)
}
schedules[i] = make(map[string]string, len(vv))
for k, vvv := range vv {
var ok bool
if schedules[i][k], ok = vvv.(string); !ok {
return nil, fmt.Errorf("unknown on type: %#v", v)
}
}
}
res = append(res, &Event{
Name: k,
schedules: schedules,
})
default:
return nil, fmt.Errorf("unknown on type: %#v", v)