Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/atlassian/jira_connect/client.rb')
-rw-r--r--lib/atlassian/jira_connect/client.rb75
1 files changed, 56 insertions, 19 deletions
diff --git a/lib/atlassian/jira_connect/client.rb b/lib/atlassian/jira_connect/client.rb
index f81ed462174..da24d0e20ee 100644
--- a/lib/atlassian/jira_connect/client.rb
+++ b/lib/atlassian/jira_connect/client.rb
@@ -12,31 +12,68 @@ module Atlassian
@shared_secret = shared_secret
end
+ def send_info(project:, update_sequence_id: nil, **args)
+ common = { project: project, update_sequence_id: update_sequence_id }
+ dev_info = args.slice(:commits, :branches, :merge_requests)
+ build_info = args.slice(:pipelines)
+
+ responses = []
+
+ responses << store_dev_info(**common, **dev_info) if dev_info.present?
+ responses << store_build_info(**common, **build_info) if build_info.present?
+ raise ArgumentError, 'Invalid arguments' if responses.empty?
+
+ responses.compact
+ end
+
+ private
+
+ def store_build_info(project:, pipelines:, update_sequence_id: nil)
+ return unless Feature.enabled?(:jira_sync_builds, project)
+
+ builds = pipelines.map do |pipeline|
+ build = Serializers::BuildEntity.represent(
+ pipeline,
+ update_sequence_id: update_sequence_id
+ )
+ next if build.issue_keys.empty?
+
+ build
+ end.compact
+ return if builds.empty?
+
+ post('/rest/builds/0.1/bulk', { builds: builds })
+ end
+
def store_dev_info(project:, commits: nil, branches: nil, merge_requests: nil, update_sequence_id: nil)
- dev_info_json = {
- repositories: [
- Serializers::RepositoryEntity.represent(
- project,
- commits: commits,
- branches: branches,
- merge_requests: merge_requests,
- user_notes_count: user_notes_count(merge_requests),
- update_sequence_id: update_sequence_id
- )
- ]
- }.to_json
-
- uri = URI.join(@base_uri, '/rest/devinfo/0.10/bulk')
-
- headers = {
+ repo = Serializers::RepositoryEntity.represent(
+ project,
+ commits: commits,
+ branches: branches,
+ merge_requests: merge_requests,
+ user_notes_count: user_notes_count(merge_requests),
+ update_sequence_id: update_sequence_id
+ )
+
+ post('/rest/devinfo/0.10/bulk', { repositories: [repo] })
+ end
+
+ def post(path, payload)
+ uri = URI.join(@base_uri, path)
+
+ self.class.post(uri, headers: headers(uri), body: metadata.merge(payload).to_json)
+ end
+
+ def headers(uri)
+ {
'Authorization' => "JWT #{jwt_token('POST', uri)}",
'Content-Type' => 'application/json'
}
-
- self.class.post(uri, headers: headers, body: dev_info_json)
end
- private
+ def metadata
+ { providerMetadata: { product: "GitLab #{Gitlab::VERSION}" } }
+ end
def user_notes_count(merge_requests)
return unless merge_requests