forgejo/models/fixtures
Earl Warren adc273e3a8 fix: do not ignore automerge while a PR is checking for conflicts (#8189)
Automerge can be ignored when the following race happens:

* Conflict check is happening on a repository and
  `pr.Status = issues_model.PullRequestStatusChecking` for all open pull
  requests (this happens every time a pull request is merged).
* While the conflict check is ongoing, an event (Forgejo Actions being
  successful for instance) happens and and `StartPRCheckAndAutoMerge*` is called.
* Because `pr.CanAutoMerge()` is false, the pull request is not
  selected and not added to the automerge queue.
* When the conflict check completes and `pr.CanAutoMerge()` becomes
  true, there no longer is a task in the auto merge queue and the
  auto merge does not happen.

This is fixed by adding a task to the auto merge queue when the conflict check for a pull request completes. This is done when the mutx protecting the conflict check task is released to prevent a deadlock when a synchronous queues are used in the following situation:

* the conflict check task finds the pull request is mergeable
* it schedules the auto merge tasks that finds it must be merged
* merging concludes with scheduling a conflict check task

Avoid an extra loop where a conflict check task queues an auto merge task that will schedule a conflict check task if the pull request can be merged. The auto merge row is removed from the database before merging. It would otherwise be removed after the merge commit is received via the git hook which happens asynchronously and can lead to a race.

StartPRCheckAndAutoMerge is modified to re-use HeadCommitID when available, such as when called after a pull request conflict check.

---

A note on tests: they cover the new behavior, i.e. automerge being triggered by a successful conflict check. This is also on the critical paths for every test that involve creating, merging or updating a pull request.

- `tests/integration/git_test.go`
- `tests/integration/actions_commit_status_test.go`
- `tests/integration/api_helper_for_declarative_test.go`
- `tests/integration/patch_status_test.go`
- `tests/integration/pull_merge_test.go`

The [missing fixture file](https://codeberg.org/forgejo/forgejo/pulls/8189/files#diff-b86fdd79108b3ba3cb2e56ffcfd1be2a7b32f46c) for the auto merge table can be verified to be necessary simply by removing it an observing that the integration tests fail.

The [scheduling of the auto merge task](https://codeberg.org/forgejo/forgejo/pulls/8189/files#diff-9489262e93967f6bb2db41837f37c06f4e70d978) in `testPR` can be verified to be required by moving it in the `testPRProtected` function and observing that the tests hang forever because of the deadlock.

## Checklist

The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org).

### Tests

- I added test coverage for Go changes...
  - [ ] in their respective `*_test.go` for unit tests.
  - [x] in the `tests/integration` directory if it involves interactions with a live Forgejo server.
- I added test coverage for JavaScript changes...
  - [ ] in `web_src/js/*.test.js` if it can be unit tested.
  - [ ] in `tests/e2e/*.test.e2e.js` if it requires interactions with a live Forgejo server (see also the [developer guide for JavaScript testing](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/tests/e2e/README.md#end-to-end-tests)).

### Documentation

- [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change.
- [x] I did not document these changes and I do not expect someone else to do it.

### Release notes

- [ ] I do not want this change to show in the release notes.
- [x] I want the title to show in the release notes with a link to this pull request.
- [ ] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title.

<!--start release-notes-assistant-->

## Release notes
<!--URL:https://codeberg.org/forgejo/forgejo-->
- Bug fixes
  - [PR](https://codeberg.org/forgejo/forgejo/pulls/8189): <!--number 8189 --><!--line 0 --><!--description ZG8gbm90IGlnbm9yZSBhdXRvbWVyZ2Ugd2hpbGUgYSBQUiBpcyBjaGVja2luZyBmb3IgY29uZmxpY3Rz-->do not ignore automerge while a PR is checking for conflicts<!--description-->
<!--end release-notes-assistant-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8189
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Reviewed-by: Lucas <sclu1034@noreply.codeberg.org>
Co-authored-by: Earl Warren <contact@earl-warren.org>
Co-committed-by: Earl Warren <contact@earl-warren.org>
2025-06-17 10:58:07 +02:00
..
PrivateIssueProjects fix: consider public issues for project boards (#7143) 2025-03-06 23:26:08 +00:00
TestGetUnmergedPullRequestsByHeadInfoMax Add codespell support and fix a good number of typos with its help (#3270) 2024-05-09 13:49:37 +00:00
TestGetUsedForUser fix: ignore expired artifacts for quota calculation (#7976) 2025-05-28 18:22:10 +02:00
TestPackagesGetOrInsertBlob fix: package_blob.has_blake2b may be null (#7520) 2025-04-11 12:28:03 +00:00
TestParseCommitWithSSHSignature [GITEA] Add noreply email address as verified for SSH signed Git commits 2024-02-05 16:09:40 +01:00
TestPrivateRepoProjects fix: consider issues in repository accessible via access table (#7270) 2025-03-19 16:45:42 +00:00
access.yml Allow non-admin users to delete review requests (#29057) 2024-02-26 22:30:27 +01:00
access_token.yml Fix more yaml lint errors (#27284) 2023-09-26 12:56:42 -04:00
action.yml fix: improve dashboard loading performances (#7604) 2025-06-14 23:01:56 +02:00
action_artifact.yml Add artifacts test fixture (#30300) 2024-11-05 09:33:15 +01:00
action_run.yml feat: make action runs available in api (#7699) 2025-06-02 22:05:12 +02:00
action_run_job.yml Add search action jobs for API routes, repo, org and global level (#6300) 2025-01-14 11:17:42 +00:00
action_runner.yml feat: auto cleanup of offline runners (#7803) 2025-06-08 00:13:37 +02:00
action_runner_token.yml Add unit tests for action runner token (#27670) 2023-10-19 07:24:24 +00:00
action_task.yml Fix missing outputs for jobs with matrix (#32823) 2024-12-15 10:14:21 +01:00
action_task_output.yml Fix missing outputs for jobs with matrix (#32823) 2024-12-15 10:14:21 +01:00
action_variable.yml chore: add empty action_variable fixture (#7419) 2025-04-03 23:42:37 +00:00
attachment.yml Allow get release download files and lfs files with oauth2 token format (#26430) 2023-10-01 10:41:52 +00:00
branch.yml fix: fix ci dashboard e2e test (#7338) 2025-03-26 00:19:31 +00:00
collaboration.yml Allow non-admin users to delete review requests (#29057) 2024-02-26 22:30:27 +01:00
comment.yml Implement single-commit PR review flow (#7155) 2025-06-17 09:31:50 +02:00
commit_status.yml feat: improve GetLatestCommitStatusForPairs 2024-11-16 13:23:40 +01:00
commit_status_index.yml Fix more yaml lint errors (#27284) 2023-09-26 12:56:42 -04:00
deploy_key.yml Writable deploy keys (closes #671) (#3225) 2018-01-07 00:55:53 +02:00
email_address.yml Allow non-admin users to delete review requests (#29057) 2024-02-26 22:30:27 +01:00
external_login_user.yml add test coverage for original author conversion during migrations (#18506) 2022-02-01 13:20:28 -05:00
federated_user.yml tests: improve actvititypub integration test code 2024-11-01 22:39:49 +01:00
federation_host.yml tests: improve actvititypub integration test code 2024-11-01 22:39:49 +01:00
follow.yml fix(ui): ensure same width of usercards in grid (#6799) 2025-05-25 13:31:53 +02:00
forgejo_blocked_user.yml [MODERATION] User blocking 2024-02-05 15:56:45 +01:00
gpg_key.yml Fix verifyCommits error when push a new branch (#26664) 2023-08-30 02:27:53 +00:00
gpg_key_import.yml add .gpg url (match github behaviour) (#6610) 2019-04-14 12:43:56 -04:00
hook_task.yml chore: QoL improvements to tests (#7917) 2025-05-21 15:45:56 +02:00
issue.yml [FEAT] Adds x-mode-only anchor styles to display images based if the theme is light or dark mode. (#3985) 2024-06-09 10:50:53 +00:00
issue_assignees.yml Fix issue overview for teams (#19652) 2022-05-16 17:49:17 +08:00
issue_index.yml [MODERATION] User blocking 2024-02-05 15:56:45 +01:00
issue_label.yml Add Organization Wide Labels (#10814) 2020-04-01 01:14:46 -03:00
issue_user.yml [API] ListIssues add more filters (#16174) 2021-06-16 18:33:37 -04:00
issue_watch.yml Refactor Issues Subscription (#8738) 2019-11-20 22:50:54 +08:00
label.yml Support org labels when adding labels by label names (#32988) 2024-12-28 19:32:09 +00:00
lfs_meta_object.yml test: LFS gc should not delete all metadata objects 2024-04-26 10:16:59 +02:00
login_source.yml Add LDAP integration tests (#3897) 2018-05-11 15:55:32 +08:00
milestone.yml Add some api integration tests (#18872) 2022-10-18 00:23:27 +08:00
mirror.yml Fix bug of branches API with tests (#25578) 2023-07-01 10:52:52 +08:00
notice.yml Unit tests for models/admin 2017-01-09 21:49:51 +01:00
notification.yml [API] Add notification endpoint (#9488) 2020-01-09 11:56:32 +00:00
oauth2_application.yml test(oauth): RFC 6749 Section 10.2 conformance 2024-06-05 17:50:15 +02:00
oauth2_authorization_code.yml Record OAuth client type at registration (#21316) 2022-10-24 15:59:24 +08:00
oauth2_grant.yml Record OAuth client type at registration (#21316) 2022-10-24 15:59:24 +08:00
org_user.yml Allow non-admin users to delete review requests (#29057) 2024-02-26 22:30:27 +01:00
project.yml Add default board to new projects, remove uncategorized pseudo-board (#29874) 2024-03-30 07:17:31 +01:00
project_board.yml Add default board to new projects, remove uncategorized pseudo-board (#29874) 2024-03-30 07:17:31 +01:00
project_issue.yml Kanban board (#8346) 2020-08-16 23:07:38 -04:00
protected_branch.yml Don't recreate database in integration tests (#1697) 2017-05-11 23:32:43 +08:00
protected_tag.yml Protected tag is no internal server error (#30962) 2024-05-19 13:12:35 +02:00
public_key.yml Fix more yaml lint errors (#27284) 2023-09-26 12:56:42 -04:00
pull_auto_merge.yml fix: do not ignore automerge while a PR is checking for conflicts (#8189) 2025-06-17 10:58:07 +02:00
pull_request.yml fix: remove artificial delay for PR update (#7773) 2025-05-04 21:54:55 +00:00
push_mirror.yml tests(api): POST /repos/{owner}/{repo}/push_mirrors coverage 2024-06-02 16:31:41 +02:00
reaction.yml Fix more yaml lint errors (#27284) 2023-09-26 12:56:42 -04:00
release.yml [GITEA] Improve HTML title on repositories 2024-02-05 16:05:50 +01:00
renamed_branch.yml Add a simple way to rename branch like gh (#15870) 2021-10-08 19:03:04 +02:00
repo_archiver.yml Rework repository archive (#14723) 2021-06-23 17:12:38 -04:00
repo_indexer_status.yml Code/repo search (#2582) 2017-10-27 09:10:54 +03:00
repo_redirect.yml Unit tests for repo redirects (#961) 2017-02-17 08:55:33 +08:00
repo_topic.yml Add API endpoint for accessing repo topics (#7963) 2019-09-03 23:46:24 +08:00
repo_transfer.yml Repository transfer has to be confirmed, if user can not create repo for new owner (#14792) 2021-03-01 01:47:30 +01:00
repo_unit.yml feat: make action runs available in api (#7699) 2025-06-02 22:05:12 +02:00
repository.yml feat: make action runs available in api (#7699) 2025-06-02 22:05:12 +02:00
review.yml Fix the logic of finding the latest pull review commit ID (#32139) 2024-10-06 07:44:28 +02:00
secret.yml chore: add empty secret table fixtures 2025-02-24 01:00:51 +01:00
star.yml Unit tests for models/star (#752) 2017-01-25 18:37:10 +08:00
stopwatch.yml [API] extend StopWatch (#9196) 2019-12-11 23:23:05 -05:00
system_setting.yml disable gravatar in test (#32529) 2024-11-24 15:42:36 +00:00
team.yml fix: always render detailed team permissions table in sidebar (#8108) 2025-06-09 10:37:31 +02:00
team_repo.yml Allow non-admin users to delete review requests (#29057) 2024-02-26 22:30:27 +01:00
team_unit.yml fix: always render detailed team permissions table in sidebar (#8108) 2025-06-09 10:37:31 +02:00
team_user.yml Allow non-admin users to delete review requests (#29057) 2024-02-26 22:30:27 +01:00
topic.yml Add some api integration tests (#18872) 2022-10-18 00:23:27 +08:00
tracked_time.yml [API] Extend times API (#9200) 2019-12-27 20:30:58 +00:00
two_factor.yml feat: migrate TOTP secrets to keying 2024-11-27 00:34:16 +01:00
user.yml fix: always render detailed team permissions table in sidebar (#8108) 2025-06-09 10:37:31 +02:00
user_open_id.yml Show user OpenID URIs in their profile (#1314) 2017-03-20 09:31:08 +01:00
user_redirect.yml feat: add configurable cooldown to claim usernames (#6422) 2025-01-24 04:16:56 +00:00
watch.yml [MODERATION] User blocking 2024-02-05 15:56:45 +01:00
webauthn_credential.yml [FEAT] Add support for webauthn credential level 3 2024-08-29 10:05:03 +02:00
webhook.yml test: webhook fix branch filter tests 2024-04-30 09:38:35 +02:00