File: issue_link.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (52 lines) | stat: -rw-r--r-- 1,714 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# frozen_string_literal: true

module ErrorTracking
  class SentryClient
    module IssueLink
      # Creates a link in Sentry corresponding to the provided
      # Sentry issue and GitLab issue
      # @param integration_id [Integer, nil] Representing a global
      #          GitLab integration in Sentry. Nil for plugins.
      # @param sentry_issue_id [Integer] Id for an issue from Sentry
      # @param issue [Issue] Issue for which the link should be created
      def create_issue_link(integration_id, sentry_issue_id, issue)
        return create_plugin_link(sentry_issue_id, issue) unless integration_id

        create_global_integration_link(integration_id, sentry_issue_id, issue)
      end

      private

      def create_global_integration_link(integration_id, sentry_issue_id, issue)
        issue_link_url = global_integration_link_api_url(integration_id, sentry_issue_id)

        params = {
          project: issue.project.id,
          externalIssue: "#{issue.project.id}##{issue.iid}"
        }

        http_put(issue_link_url, params)
      end

      def global_integration_link_api_url(integration_id, sentry_issue_id)
        issue_link_url = URI(url)
        issue_link_url.path = "/api/0/groups/#{sentry_issue_id}/integrations/#{integration_id}/"

        issue_link_url
      end

      def create_plugin_link(sentry_issue_id, issue)
        issue_link_url = plugin_link_api_url(sentry_issue_id)

        http_post(issue_link_url, issue_id: issue.iid)
      end

      def plugin_link_api_url(sentry_issue_id)
        issue_link_url = URI(url)
        issue_link_url.path = "/api/0/issues/#{sentry_issue_id}/plugins/gitlab/link/"

        issue_link_url
      end
    end
  end
end