repositories / bugabinga.net
bugabinga.net
personal infrastructure for bugabinga!
owned by admin
services/luci/internal/ciconfig/cron.go
Rawpackage ciconfig
import (
"fmt"
"strings"
"time"
"github.com/robfig/cron/v3"
)
var cronParser = cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow)
func ParseSchedule(expression string) (schedule cron.Schedule, err error) {
defer func() {
if recovered := recover(); recovered != nil {
schedule = nil
err = fmt.Errorf("invalid schedule %q", expression)
}
}()
if strings.Contains(expression, "=") || len(strings.Fields(expression)) != 5 {
return nil, fmt.Errorf("schedule requires five-field cron in UTC")
}
schedule, err = cronParser.Parse(expression)
if err != nil {
return nil, fmt.Errorf("invalid five-field cron schedule")
}
return schedule, nil
}
func ScheduleMatches(expression string, minute time.Time) bool {
schedule, err := ParseSchedule(expression)
if err != nil {
return false
}
minute = minute.UTC().Truncate(time.Minute)
return schedule.Next(minute.Add(-time.Minute)).Equal(minute)
}