forgejo/services/actions
Earl Warren ce96379aef
[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 7b4dba3aa0)

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-13 12:00:27 +01:00
..
cleanup.go Artifacts retention and auto clean up (#26131) 2023-09-06 07:41:06 +00:00
clear_tasks.go Make Actions tasks/jobs timeouts configurable by the user (#27400) (#27402) 2023-10-03 10:26:35 +08:00
commit_status.go Fix pull request check list is limited (#26179) 2023-07-31 02:21:09 +00:00
init.go Move notification interface to services layer (#26915) 2023-09-05 18:37:47 +00:00
job_emitter.go Rewrite queue (#24505) 2023-05-08 19:49:59 +08: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-13 12:00:27 +01:00
notifier.go Implement MigrateRepository for the actions notifier (#28920) (#28923) 2024-01-31 14:18:26 +01:00
notifier_helper.go [ACTIONS] skip superflous pull request synchronized event (#2314) 2024-02-13 12:00:27 +01:00
notifier_helper_test.go [ACTIONS] skip superflous pull request synchronized event (#2314) 2024-02-13 12:00:27 +01:00
schedule_tasks.go [ACTIONS] on.schedule: the event is always "schedule" 2023-12-23 15:58:37 +01:00