Don't execute project/system Web hooks or services when issues have not changed

From gitlab-com/gl-infra/production#1039 (comment 201662081):

One thing observed from this incident:

  1. We saw a lot of duplicate payloads for project Web hooks and services.
  2. There are API calls to update issues (e.g. https://log.gitlab.net/goto/18059f79a9f1eed3cc19f6d5e61574b7) and merge requests that appear to generate a Web hook for every update.
  3. In many cases, the API calls are just PUT requests that ensures a label exists by a name (e.g. test). This will always generate a Web hook.
  4. We should consider disabling sending of Web hooks for PUT requests that don't actually change anything.

For example, one PUT request to api/:version/projects/:id/issues/:issue_iid looks like:

{
  "key": "labels",
  "value": "Low"
}
Assignee Loading
Time tracking Loading