err = s.Done(schedule, now)
if err != nil {
- return err
+ return fmt.Errorf("acknowledge schedule run: %w", err)
}
attrs := []any{"id", schedule.ID}
if schedule.Cron == "" {
s.file.Schedules = slices.Delete(s.file.Schedules, index, index+1)
- return s.save()
+ err := s.save()
+ if err != nil {
+ return fmt.Errorf("save completed one-time schedule: %w", err)
+ }
+
+ return nil
}
cron, err := scheduleParseCron(schedule.Cron)
if !found {
s.file.Schedules = slices.Delete(s.file.Schedules, index, index+1)
- return s.save()
+ err = s.save()
+ if err != nil {
+ return fmt.Errorf("save exhausted schedule: %w", err)
+ }
+
+ return nil
}
s.file.Schedules[index].Due = next
- return s.save()
+ err = s.save()
+ if err != nil {
+ return fmt.Errorf("save next schedule run: %w", err)
+ }
+
+ return nil
}
// sorted returns a copy of the schedules by due time, then by ID.
default:
parsed, err := scheduleParseCron(*cron)
if err != nil {
- return "", err
+ return "", fmt.Errorf("parse schedule expression: %w", err)
}
next, found := parsed.Next(now)
s.file.Schedules = append(s.file.Schedules, schedule)
err := s.save()
if err != nil {
- return "", err
+ return "", fmt.Errorf("save new schedule: %w", err)
}
s.change()
s.file.Schedules = slices.Delete(s.file.Schedules, index, index+1)
err := s.save()
if err != nil {
- return "", err
+ return "", fmt.Errorf("save removed schedule: %w", err)
}
s.change()