forgejo/services/actions/main_test.go

21 lines
377 B
Go
Raw Permalink Normal View History

[ACTIONS] skip superflous pull request synchronized event (#2314) Skip a HookEventPullRequestSync event if it has the same CommitSHA as an existing HookEventPullRequest event in the ActionRun table. A HookEventPullRequestSync event must only create an ActionRun if the CommitSHA is different from what it was when the PR was open. This guards against a race that can happen when the following is done in parallel: * A commit C is pushed to a repo on branch B * A pull request with head on branch B it is then possible that the pull request is created first, successfully. The commit that was just pushed is not known yet but the PR only references the repository and the B branch so it is fine. A HookEventPullRequest event is sent to the notification queue but not processed immediately. The commit C is pushed and processed successfully. Since the PR already exists and has a head that matches the branch, the head of the PR is updated with the commit C and a HookEventPullRequestSync event is sent to the notification queue. The HookEventPullRequest event is processed and since the head of the PR was updated to be commit C, an ActionRun with CommitSHA C is created. The HookEventPullRequestSync event is then processed and also has a CommitSHA equal to C. Refs: https://codeberg.org/forgejo/forgejo/issues/2009 Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2314 Co-authored-by: Earl Warren <contact@earl-warren.org> Co-committed-by: Earl Warren <contact@earl-warren.org> (cherry picked from commit 7b4dba3aa07b2a54c922010eab63f61078123ef2) Conflicts: services/actions/notifier_helper.go tests/integration/actions_trigger_test.go trivial context conficts services/actions/main_test.go is different in v1.21
2024-02-11 13:06:54 +00:00
// Copyright 2024 The Forgejo Authors
// SPDX-License-Identifier: MIT
package actions
import (
"path/filepath"
"testing"
"code.gitea.io/gitea/models/unittest"
_ "code.gitea.io/gitea/models/actions"
_ "code.gitea.io/gitea/models/activities"
)
func TestMain(m *testing.M) {
unittest.MainTest(m, &unittest.TestOptions{
GiteaRootPath: filepath.Join("..", ".."),
})
}