GitHub integration does not implement all webhook actions for pull requests
This issue has turned into a documentation task - see this thread #281946 (comment 608716325).
Old Summary
Summary
Tested on 13.5.1-ee
If a user has setup the GitHub integration using GitLab CI/CD for external repositories, not all of the GitHub actions are supported.
According to https://gitlab.com/gitlab-org/gitlab/blob/master/ee/app/services/ci/external_pull_requests/process_github_event_service.rb#L8, we support:
opened, reopened, synchronize, closed
GitHub's documentation https://developer.github.com/webhooks/event-payloads/#webhook-payload-object-14 has the following:
opened, edited, deleted, pinned, unpinned, closed, reopened, assigned, unassigned, labeled, unlabeled, locked, unlocked, transferred, milestoned, demilestoned
If GitHub sends a PR webhook request to GitLab and the payload contains an action
that isn't supported by GitLab, GitLab returns a 422
error with The pull request event is not processable
.
Steps to reproduce
- Setup GitLab CI/CD for external repositories with a GitHub project.
- Toggle merge request visibility to enabled under visibility and access controls (by default, GitLab will disable merge request visibility with external repositories).
- Create a pull request in GitHub. Observe that GitHub creates a webhook request to GitLab, and then the pull request should now be converted into a merge request in GitLab.
- In GitHub, edit the title of the pull request. Observe that the request to GitLab fails with a 422 error. This can be checked in the GitHub's project Settings > Webhooks >
https://<GITLAB_DOMAIN/api/v4/projects/<PROJECT_ID>/mirror/pull
.
Example Project
N/A
What is the current bug behavior?
The GitHub integration in GitLab does not support all the payload actions that GitHub provides.
What is the expected correct behavior?
The GitHub integration in GitLab should support all the payload actions that GitHub provides. A better error message would help too.
Relevant logs and/or screenshots
==> /var/log/gitlab/gitlab-rails/api_json.log <==
{"time":"2020-11-12T20:47:28.989Z","severity":"INFO","duration_s":0.05163,"db_duration_s":0.00388,"view_duration_s":0.04775,"status":422,"method":"POST","path":"/api/v4/projects/378/mirror/pull","params":[{"key":"action","value":"edited"},{"key":"number","value":null},{"key":"truncated","value":"..."}],"host":"gitlab.domain.tld","remote_ip":"140.82.115.148, 140.82.115.148","ua":"GitHub-Hookshot/6767b47","route":"/api/:version/projects/:id/mirror/pull","queue_duration_s":0.055671,"redis_calls":4,"redis_duration_s":0.001388,"redis_read_bytes":422,"redis_write_bytes":366,"redis_cache_calls":4,"redis_cache_duration_s":0.001388,"redis_cache_read_bytes":422,"redis_cache_write_bytes":366,"correlation_id":"gNWeDmSNSa5","meta.project":"anton/180189-cicd-github","meta.root_namespace":"anton","meta.caller_id":"/api/:version/projects/:id/mirror/pull"}