diff --git a/.gitignore b/.gitignore index e3882f7..5e8ec3a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,5 @@ *.swp *.swo *.orig - +.DS_Store dist/ diff --git a/internal/mergequeue/coordinator.go b/internal/mergequeue/coordinator.go index 30e2cee..b757c27 100644 --- a/internal/mergequeue/coordinator.go +++ b/internal/mergequeue/coordinator.go @@ -432,6 +432,13 @@ func (a *Coordinator) processPullRequestEvent(ctx context.Context, logger *zap.L ) return } + // If pr == nil, it means that the queue has already been deleted earlier by another event. + if pr == nil { + logger.Warn( + "PR already dequeued or queue non-existent", + ) + return + } if ev.PullRequest.GetMerged() { metrics.RecordTimeToMerge(time.Since(pr.EnqueuedAt), owner, repo) @@ -926,6 +933,10 @@ func (a *Coordinator) Dequeue(_ context.Context, baseBranch *BaseBranch, prNumbe pr, err := q.Dequeue(prNumber, setPendingStatusState) if err != nil { + // If there is a queue but no PR in it, this may also be a duplicate. + if errors.Is(err, ErrNotFound) { + return nil, nil + } return nil, fmt.Errorf("removing pr from merge queue failed: %w", err) }