Expose all git push options in Push and Tag Event Webhooks

Problem to solve

We want to allow customers to receive all git push options passed in during a git push via Push and Tag Event Webhooks.

Presently, only git push options that are recognised by Gitlab::PushOptions will be present in the Push and Tag Event Webhook payloads. This means that customers cannot build systems around their own customised git push options.

For example, the following two push options:

git push -u origin -o 'foo' -o 'bar'

Should become exposed in the Push and Tag Event Webhooks payloads as:

"push_options": ["foo", "bar"]

Further details

This feature was previously added in 11.7 as part of https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/15643, but was unintentionally removed in 11.10 https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/26752.

The regression was raised and discussed in https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/26752#note_164043657.

What caused the regression?

https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/26752 introduced a class Gitlab::PushOptions to parse push options passed to the post_receive API endpoint to make it easier for GitLab to extract their namespaced push option values. At the same time, the Gitlab::PushOptions class also filters out unrecognised push options. In the post_receive API endpoint the PostReceive worker class receives the push options, which eventually are passed to classes that execute the push webhooks. Any unrecognised push options will have been removed.

What should be fixed?

The git push option data exposed in the Push and Tag Event Webhooks needs to be the unparsed data.

The parsed data from Gitlab::PushOptions is a Hash. The push_options data in the webhook payloads will need to be reverted back to being an Array of the raw push options, which the post_receive API endpoint receives as params[:push_options].

What does success look like?

All Git push options passed via the command line should be exposed in the Push and Tag Event Webhook payloads (without any filtering or manipulation of the data).

Documentation

These docs should be updated with the new :

  • https://docs.gitlab.com/ee/user/project/integrations/webhooks.html#push-events
  • https://docs.gitlab.com/ee/user/project/integrations/webhooks.html#tag-events

Testing

An integration test for this feature should be added to the post_receive internal API endpoint.

Links / references

Edited May 11, 2019 by Luke Duncalfe
Assignee Loading
Time tracking Loading