fastlane-plugin-youtrack 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5a66742ed0bb2545446435c91506fd57e184db3bd6f8d8f420a2c37427ce6601
4
- data.tar.gz: 86d873d7a519a82900f3f5910bbb12c5c09d7f919c73eeb4c722b05384242fca
3
+ metadata.gz: 63739100a15102a8154ce4b8a104229e05498267a3a8fb72bff732f3a9ca7fa4
4
+ data.tar.gz: 370c2da7869a2a25919e6af585f93fd2d33266e7d6e841cc66337f8977da39e0
5
5
  SHA512:
6
- metadata.gz: 6ba0e67c263e98caafbbf6cc18937feae5026a9dc5ce3d902d6dc42ee1ed08cc0454521f87d296a8f0202dfd13088eccc6c5681549510e98a679304a4bbcfdd6
7
- data.tar.gz: 941a22b5be7532afa2c0ac992947f454ad5eb73cf238071427718d2c518fc389030fb041400adf92de8359e4748880bce378faa9dc356a68330857e36fd1457e
6
+ metadata.gz: fb43d2f3478621984dac2622c410488b469ea45401016b117c3b921bbc13cdaefb508f3ea98b898105ba42b23d74ab2e0bce146ef4d483825ac673cd5bdced69
7
+ data.tar.gz: 84f1a1264f078903a33c10c1b970acbd1dc6e77885f562af69a900a230a9406251763856b2606bf6576c2a60a786e195651a78c1c4575d1552e06439ee61d5e4
@@ -0,0 +1,96 @@
1
+ require 'fastlane/action'
2
+ require_relative '../helper/youtrack_helper'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ class YtCommentIssueAction < Action
7
+ def self.run(params)
8
+ issue_id = params[:issue_id]
9
+ comment = params[:comment]
10
+ base_url = params[:base_url]
11
+ access_token = params[:access_token]
12
+
13
+ result = Helper::YoutrackHelper.comment_issue(issue_id, comment, base_url, access_token)
14
+ return {} unless result.success?
15
+
16
+ begin
17
+ response_body = JSON.parse(result.body)
18
+ rescue JSON::ParserError => e
19
+ puts e
20
+ end
21
+
22
+ response_body
23
+ rescue => ex
24
+ UI.error(ex)
25
+ UI.error('Failed')
26
+ end
27
+
28
+ def self.description
29
+ 'Add a comment to issue by passed identifier'
30
+ end
31
+
32
+ def self.details
33
+ ''
34
+ end
35
+
36
+ def self.available_options
37
+ [
38
+ FastlaneCore::ConfigItem.new(
39
+ key: :issue_id,
40
+ description: 'Identifier of commented issue',
41
+ optional: false,
42
+ type: String
43
+ ),
44
+ FastlaneCore::ConfigItem.new(
45
+ key: :comment,
46
+ description: 'Text of comment',
47
+ optional: false,
48
+ type: String
49
+ ),
50
+ FastlaneCore::ConfigItem.new(
51
+ key: :base_url,
52
+ env_name: 'YOUTRACK_BASE_URL',
53
+ description: 'Base YouTrack URL',
54
+ optional: false,
55
+ type: String
56
+ ),
57
+ FastlaneCore::ConfigItem.new(
58
+ key: :access_token,
59
+ env_name: 'YOUTRACK_API_TOKEN',
60
+ description: 'Access token for YouTrack API',
61
+ optional: false,
62
+ type: String
63
+ )
64
+ ]
65
+ end
66
+
67
+ def self.return_value
68
+ 'Nothing'
69
+ end
70
+
71
+ def self.authors
72
+ ['Semen Kologrivov']
73
+ end
74
+
75
+ def self.is_supported?(_)
76
+ true
77
+ end
78
+
79
+ def self.example_code
80
+ [
81
+ 'yt_comment_issue(issue_id: "ios_1234", comment: "Lorem ipsum")'
82
+ ]
83
+ end
84
+
85
+ def self.output
86
+ [
87
+ []
88
+ ]
89
+ end
90
+
91
+ def self.return_type
92
+ :array
93
+ end
94
+ end
95
+ end
96
+ end
@@ -8,21 +8,57 @@ module Fastlane
8
8
  end
9
9
  class YtIssuesInfoAction < Action
10
10
  def self.run(params)
11
- isssue_ids = params[:issue_ids]
11
+ issue_ids = params[:issue_ids]
12
12
  fields = params[:issue_fields]
13
+ custom_fields_names = params[:issue_custom_fields_names]
13
14
  base_url = params[:base_url]
14
15
  access_token = params[:access_token]
15
16
 
16
- issues_info = isssue_ids.map do |issue_id|
17
+ issues_info = issue_ids.map do |issue_id|
17
18
  info = {
19
+ id: issue_id,
18
20
  url: "#{base_url}/issue/#{issue_id}"
19
21
  }
20
- result = Helper::YoutrackHelper.get_issue_info(issue_id, fields, base_url, access_token)
21
- return info unless result.success?
22
+
23
+ issue_info_result = Helper::YoutrackHelper.get_issue_info(
24
+ issue_id,
25
+ fields,
26
+ base_url,
27
+ access_token
28
+ )
29
+ return info unless issue_info_result.success?
22
30
 
23
31
  begin
24
- response_body = JSON.parse(result.body)
25
- fields.each { |field| info[field.to_sym] = response_body[field] }
32
+ issue_info_response_body = JSON.parse(issue_info_result.body)
33
+ fields.each { |field| info[field.to_sym] = issue_info_response_body[field] }
34
+ rescue JSON::ParserError => e
35
+ puts e
36
+ return info
37
+ end
38
+
39
+ issue_custom_fields_result = Helper::YoutrackHelper.get_issue_custom_fields(
40
+ issue_id,
41
+ base_url,
42
+ access_token
43
+ )
44
+
45
+ return info unless issue_custom_fields_result.success?
46
+
47
+ begin
48
+ issue_custom_fields_response_body = JSON.parse(issue_custom_fields_result.body)
49
+ custom_fields_names.each do |field_name|
50
+ custom_field = issue_custom_fields_response_body.find { |field|
51
+ field['name'] == field_name
52
+ }
53
+
54
+ next if custom_field.nil?
55
+
56
+ info[field_name.to_sym] = {
57
+ type: custom_field['$type'],
58
+ name: custom_field['name'],
59
+ value: custom_field['value']['name']
60
+ }
61
+ end
26
62
  rescue JSON::ParserError => e
27
63
  puts e
28
64
  return info
@@ -33,7 +69,7 @@ module Fastlane
33
69
 
34
70
  Actions.lane_context[SharedValues::YOUTRACK_RELEASED_ISSUES] = issues_info
35
71
 
36
- return issues_info
72
+ issues_info
37
73
  rescue => ex
38
74
  UI.error(ex)
39
75
  UI.error('Failed')
@@ -49,25 +85,40 @@ module Fastlane
49
85
 
50
86
  def self.available_options
51
87
  [
52
- FastlaneCore::ConfigItem.new(key: :issue_ids,
53
- description: 'Array of issue\'s ids',
54
- optional: false,
55
- type: Array),
56
- FastlaneCore::ConfigItem.new(key: :issue_fields,
57
- description: 'Array of neccessary fields of issue',
58
- optional: true,
59
- default_value: ['summary', 'description'],
60
- type: Array),
61
- FastlaneCore::ConfigItem.new(key: :base_url,
62
- env_name: 'YOUTRACK_BASE_URL',
63
- description: 'Base YouTrack URL',
64
- optional: false,
65
- type: String),
66
- FastlaneCore::ConfigItem.new(key: :access_token,
67
- env_name: 'YOUTRACK_API_TOKEN',
68
- description: 'Access token for YouTrack API',
69
- optional: false,
70
- type: String)
88
+ FastlaneCore::ConfigItem.new(
89
+ key: :issue_ids,
90
+ description: 'Array of issue\'s ids',
91
+ optional: false,
92
+ type: Array
93
+ ),
94
+ FastlaneCore::ConfigItem.new(
95
+ key: :issue_fields,
96
+ description: 'Array of neccessary fields of issue',
97
+ optional: true,
98
+ default_value: ['summary', 'description'],
99
+ type: Array
100
+ ),
101
+ FastlaneCore::ConfigItem.new(
102
+ key: :issue_custom_fields_names,
103
+ description: 'Array of names of neccessary custom fields of issue',
104
+ optional: true,
105
+ default_value: ['Kanban State', 'Stage'],
106
+ type: Array
107
+ ),
108
+ FastlaneCore::ConfigItem.new(
109
+ key: :base_url,
110
+ env_name: 'YOUTRACK_BASE_URL',
111
+ description: 'Base YouTrack URL',
112
+ optional: false,
113
+ type: String
114
+ ),
115
+ FastlaneCore::ConfigItem.new(
116
+ key: :access_token,
117
+ env_name: 'YOUTRACK_API_TOKEN',
118
+ description: 'Access token for YouTrack API',
119
+ optional: false,
120
+ type: String
121
+ )
71
122
  ]
72
123
  end
73
124
 
@@ -100,4 +151,4 @@ module Fastlane
100
151
  end
101
152
  end
102
153
  end
103
- end
154
+ end
@@ -0,0 +1,109 @@
1
+ require 'fastlane/action'
2
+ require_relative '../helper/youtrack_helper'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ class YtSetIssueCustomFieldValueAction < Action
7
+ def self.run(params)
8
+ issue_id = params[:issue_id]
9
+ field = params[:field]
10
+ field_value = params[:field_value]
11
+ base_url = params[:base_url]
12
+ access_token = params[:access_token]
13
+
14
+ result = Helper::YoutrackHelper.set_custom_field_value(
15
+ issue_id,
16
+ field,
17
+ field_value,
18
+ base_url,
19
+ access_token
20
+ )
21
+ return {} unless result.success?
22
+
23
+ begin
24
+ response_body = JSON.parse(result.body)
25
+ rescue JSON::ParserError => e
26
+ puts e
27
+ end
28
+
29
+ response_body
30
+ rescue => ex
31
+ UI.error(ex)
32
+ UI.error('Failed')
33
+ end
34
+
35
+ def self.description
36
+ 'Set value for passed custom field name'
37
+ end
38
+
39
+ def self.details
40
+ ''
41
+ end
42
+
43
+ def self.available_options
44
+ [
45
+ FastlaneCore::ConfigItem.new(
46
+ key: :issue_id,
47
+ description: 'Identifier of issue',
48
+ optional: false,
49
+ type: String
50
+ ),
51
+ FastlaneCore::ConfigItem.new(
52
+ key: :field,
53
+ description: 'Custom field info',
54
+ optional: false,
55
+ type: Hash
56
+ ),
57
+ FastlaneCore::ConfigItem.new(
58
+ key: :field_value,
59
+ description: 'Value of custom field',
60
+ optional: false,
61
+ type: String
62
+ ),
63
+ FastlaneCore::ConfigItem.new(
64
+ key: :base_url,
65
+ env_name: 'YOUTRACK_BASE_URL',
66
+ description: 'Base YouTrack URL',
67
+ optional: false,
68
+ type: String
69
+ ),
70
+ FastlaneCore::ConfigItem.new(
71
+ key: :access_token,
72
+ env_name: 'YOUTRACK_API_TOKEN',
73
+ description: 'Access token for YouTrack API',
74
+ optional: false,
75
+ type: String
76
+ )
77
+ ]
78
+ end
79
+
80
+ def self.return_value
81
+ 'Nothing'
82
+ end
83
+
84
+ def self.authors
85
+ ['Semen Kologrivov']
86
+ end
87
+
88
+ def self.is_supported?(_)
89
+ true
90
+ end
91
+
92
+ def self.example_code
93
+ [
94
+ 'yt_set_issue_custom_field_value(issue_id: "ios_1234", field_name: "Foo", field_value: "Bar")'
95
+ ]
96
+ end
97
+
98
+ def self.output
99
+ [
100
+ []
101
+ ]
102
+ end
103
+
104
+ def self.return_type
105
+ :array
106
+ end
107
+ end
108
+ end
109
+ end
@@ -19,6 +19,53 @@ module Fastlane
19
19
  req.headers['Authorization'] = "Bearer #{token}"
20
20
  end
21
21
  end
22
+
23
+ def self.get_issue_custom_fields(issue_id, url, token)
24
+ Faraday.get("#{url}/api/issues/#{issue_id}/customFields") do |req|
25
+ req.params['fields'] = 'id,name,value(id,name)'
26
+
27
+ req.headers['Content-Type'] = 'application/json'
28
+ req.headers['Accept'] = 'application/json'
29
+ req.headers['Cache-Control'] = 'no-cache'
30
+ req.headers['Authorization'] = "Bearer #{token}"
31
+ end
32
+ end
33
+
34
+ def self.comment_issue(issue_id, comment, url, token)
35
+ Faraday.post("#{url}/api/issues/#{issue_id}/comments") do |req|
36
+ body = {
37
+ text: comment
38
+ }
39
+ req.body = JSON.generate(body)
40
+
41
+ req.headers['Content-Type'] = 'application/json'
42
+ req.headers['Accept'] = 'application/json'
43
+ req.headers['Cache-Control'] = 'no-cache'
44
+ req.headers['Authorization'] = "Bearer #{token}"
45
+ end
46
+ end
47
+
48
+ def self.set_custom_field_value(issue_id, field, field_value, url, token)
49
+ Faraday.post("#{url}/api/issues/#{issue_id}") do |req|
50
+ body = {
51
+ 'customFields' => [
52
+ {
53
+ 'name' => field[:name],
54
+ '$type' => field[:type],
55
+ 'value' => {
56
+ 'name' => field_value
57
+ }
58
+ }
59
+ ]
60
+ }
61
+ req.body = JSON.generate(body)
62
+
63
+ req.headers['Content-Type'] = 'application/json'
64
+ req.headers['Accept'] = 'application/json'
65
+ req.headers['Cache-Control'] = 'no-cache'
66
+ req.headers['Authorization'] = "Bearer #{token}"
67
+ end
68
+ end
22
69
  end
23
70
  end
24
71
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module Youtrack
3
- VERSION = "0.1.0"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-youtrack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Semen Kologrivov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-09 00:00:00.000000000 Z
11
+ date: 2022-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -137,7 +137,7 @@ dependencies:
137
137
  - !ruby/object:Gem::Version
138
138
  version: 2.172.0
139
139
  description:
140
- email: firedragon855@gmail.com
140
+ email: semen@sequenia.com
141
141
  executables: []
142
142
  extensions: []
143
143
  extra_rdoc_files: []
@@ -145,7 +145,9 @@ files:
145
145
  - LICENSE
146
146
  - README.md
147
147
  - lib/fastlane/plugin/youtrack.rb
148
+ - lib/fastlane/plugin/youtrack/actions/yt_comment_issue_action.rb
148
149
  - lib/fastlane/plugin/youtrack/actions/yt_issues_info_action.rb
150
+ - lib/fastlane/plugin/youtrack/actions/yt_set_issue_custom_field_value_action.rb
149
151
  - lib/fastlane/plugin/youtrack/helper/youtrack_helper.rb
150
152
  - lib/fastlane/plugin/youtrack/version.rb
151
153
  homepage:
@@ -167,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
169
  - !ruby/object:Gem::Version
168
170
  version: '0'
169
171
  requirements: []
170
- rubygems_version: 3.0.3
172
+ rubygems_version: 3.1.6
171
173
  signing_key:
172
174
  specification_version: 4
173
175
  summary: Use for communicating with YouTrack (fetching issue's info, adding comments