Run reviews and nudges on the state-driven coordinator
This commit is contained in:
@@ -78,64 +78,16 @@ func (m *Manager) clearMergeAfterReview(ctx context.Context, taskID string) {
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Manager) recoverMergeAfterReviews(ctx context.Context) {
|
||||
ids, err := m.store.FinishedMergeAfterReviews(ctx)
|
||||
if err != nil {
|
||||
slog.Error("list merges after finished reviews", "err", err)
|
||||
return
|
||||
}
|
||||
for _, id := range ids {
|
||||
m.reviewFinished(id, false)
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Manager) reviewFinished(reviewID string, deliver bool) {
|
||||
ctx := context.Background()
|
||||
r, err := m.store.GetReview(ctx, reviewID)
|
||||
if err != nil {
|
||||
slog.Error("load finished review", "review", reviewID, "err", err)
|
||||
return
|
||||
}
|
||||
if m.advanceReviews(ctx, r) {
|
||||
return
|
||||
}
|
||||
reviews, err := m.store.SnapshotReviews(ctx, r.TaskId, r.SnapshotN)
|
||||
if err != nil {
|
||||
slog.Error("list snapshot reviews", "task", r.TaskId, "err", err)
|
||||
return
|
||||
}
|
||||
settled, err := m.reviewsSettled(ctx, reviews)
|
||||
if err != nil {
|
||||
slog.Error("check snapshot reviews settled", "task", r.TaskId, "err", err)
|
||||
return
|
||||
}
|
||||
if !settled {
|
||||
return
|
||||
}
|
||||
if deliver {
|
||||
m.deliverFindings(ctx, r, reviews)
|
||||
}
|
||||
ids := []string{}
|
||||
for _, sr := range reviews {
|
||||
ids = append(ids, sr.Id)
|
||||
}
|
||||
mar, err := m.store.TakeMergeAfterReview(ctx, r.TaskId, ids)
|
||||
if err != nil {
|
||||
slog.Error("take merge after review", "task", r.TaskId, "err", err)
|
||||
return
|
||||
}
|
||||
if mar.By == "" {
|
||||
return
|
||||
}
|
||||
reason := m.startMergeAfterReview(ctx, r, reviews, mar)
|
||||
func (m *Manager) mergeAfterReview(ctx context.Context, ref store.SnapshotRef, reviews []api.Review, mar store.MergeAfterReview) {
|
||||
reason := m.startMergeAfterReview(ctx, ref, reviews, mar)
|
||||
if reason == "" {
|
||||
slog.Info("merge after review started", "task", r.TaskId, "review", r.Id, "by", mar.By)
|
||||
slog.Info("merge after review started", "task", ref.TaskID, "snapshot", ref.N, "by", mar.By)
|
||||
return
|
||||
}
|
||||
slog.Info("merge after review dropped", "task", r.TaskId, "review", r.Id, "reason", reason)
|
||||
task, err := m.store.GetTask(ctx, r.TaskId)
|
||||
slog.Info("merge after review dropped", "task", ref.TaskID, "snapshot", ref.N, "reason", reason)
|
||||
task, err := m.store.GetTask(ctx, ref.TaskID)
|
||||
if err != nil {
|
||||
slog.Error("load task for dropped merge after review", "task", r.TaskId, "err", err)
|
||||
slog.Error("load task for dropped merge after review", "task", ref.TaskID, "err", err)
|
||||
return
|
||||
}
|
||||
err = m.store.AppendEvent(ctx, api.Event{Kind: "task.merge_after_review_dropped", ProjectId: &task.ProjectId, TaskId: &task.Id, Actor: "byre", Payload: map[string]any{"id": task.Id, "reason": reason}})
|
||||
@@ -144,7 +96,7 @@ func (m *Manager) reviewFinished(reviewID string, deliver bool) {
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Manager) startMergeAfterReview(ctx context.Context, r api.Review, reviews []api.Review, mar store.MergeAfterReview) string {
|
||||
func (m *Manager) startMergeAfterReview(ctx context.Context, ref store.SnapshotRef, reviews []api.Review, mar store.MergeAfterReview) string {
|
||||
findings := []any{}
|
||||
for _, sr := range reviews {
|
||||
switch {
|
||||
@@ -165,7 +117,7 @@ func (m *Manager) startMergeAfterReview(ctx context.Context, r api.Review, revie
|
||||
default:
|
||||
return fmt.Sprintf("the review found %d findings", len(findings))
|
||||
}
|
||||
task, project, err := m.activeTask(ctx, r.TaskId)
|
||||
task, project, err := m.activeTask(ctx, ref.TaskID)
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
@@ -176,7 +128,7 @@ func (m *Manager) startMergeAfterReview(ctx context.Context, r api.Review, revie
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
if latest.N != r.SnapshotN {
|
||||
if latest.N != ref.N {
|
||||
return "a newer snapshot was taken"
|
||||
}
|
||||
sess, found, err := m.liveSession(ctx, task.Id)
|
||||
|
||||
Reference in New Issue
Block a user