forgejo-experimental/services/actions
Earl Warren 7b4dba3aa0 [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>
2024-02-11 13:06:54 +00:00
..
auth.go Add artifacts v4 jwt to job message and accept it (#28885) 2024-02-02 14:25:59 +00:00
auth_test.go Add artifacts v4 jwt to job message and accept it (#28885) 2024-02-02 14:25:59 +00:00
cleanup.go Artifacts retention and auto clean up (#26131) 2023-09-06 07:41:06 +00:00
clear_tasks.go Use db.Find instead of writing methods for every object (#28084) 2023-11-24 03:49:41 +00:00
commit_status.go Improve ObjectFormat interface (#28496) 2023-12-19 07:20:47 +00:00
init.go Move notification interface to services layer (#26915) 2023-09-05 18:37:47 +00:00
job_emitter.go Use db.Find instead of writing methods for every object (#28084) 2023-11-24 03:49:41 +00:00
job_emitter_test.go Implement actions (#21937) 2023-01-31 09:45:19 +08:00
main_test.go [ACTIONS] skip superflous pull request synchronized event (#2314) 2024-02-11 13:06:54 +00:00
notifier.go Implement `MigrateRepository` for the actions notifier (#28920) 2024-01-25 20:06:29 +08:00
notifier_helper.go [ACTIONS] skip superflous pull request synchronized event (#2314) 2024-02-11 13:06:54 +00:00
notifier_helper_test.go [ACTIONS] skip superflous pull request synchronized event (#2314) 2024-02-11 13:06:54 +00:00
schedule_tasks.go [ACTIONS] on.schedule: the event is always "schedule" 2024-02-05 16:54:44 +01:00