fastlane 1.45.0 → 1.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6c527b7a97a0d442bfed70878ae1260f9fa812e7
4
- data.tar.gz: 7e5d085aa8127bdb4a1a4a9c7928ab17afaa2c2b
3
+ metadata.gz: c932c5b2ee42b209b75410e61ed5e82ba492913e
4
+ data.tar.gz: ef284ec7b67e28d72707ebc5d7187a6a9e96eef8
5
5
  SHA512:
6
- metadata.gz: 51102a2598902baa5c1877da30cc805cf94e0565fa5918c41035a1cfcba022e08435d636ef96bbcfc11a094500e75bb8506842e6a6d746e84f2413fef22ae16a
7
- data.tar.gz: 759d872fe3ebed5e5c28fcf2cded21463e90cb805663b10cc95c432e272fc0abe9fff464696d15263e2c47750dfbcf096ba83bb413e2a14bd3359779cc1ee40e
6
+ metadata.gz: 1545e73a7ef3dd23250e7b4e074d6fb93f1aa4a279cafa1646b22cf010419493b45ab602bf8edbaf0f83d7704676e3f1bbacfb3b5b1a502a7af75831ffe27f7c
7
+ data.tar.gz: 4356d2b3d0e65eabe5377cf338194cbbbd897b550c3bd7d9e41e2c8f02f722d65d3db3bad96fa0baeaa7dcf42097e5fdb2c5a3729b88324b69a58a188faef889
@@ -0,0 +1,198 @@
1
+ module Fastlane
2
+ module Actions
3
+ module SharedValues
4
+ PODIO_ITEM_URL = :PODIO_ITEM_URL
5
+ end
6
+
7
+ class PodioItemAction < Action
8
+ AUTH_URL = 'https://podio.com/oauth/token'
9
+ BASE_URL = 'https://api.podio.com'
10
+
11
+ def self.run(params)
12
+ require 'rest_client'
13
+ require 'json'
14
+ require 'uri'
15
+
16
+ post_item(params)
17
+ end
18
+
19
+ #####################################################
20
+ # @!group Documentation
21
+ #####################################################
22
+
23
+ def self.description
24
+ 'Creates or updates an item within your Podio app'
25
+ end
26
+
27
+ def self.details
28
+ "Use this action to create or update an item within your Podio app
29
+ (see https://help.podio.com/hc/en-us/articles/201019278-Creating-apps-).
30
+ Pass in dictionary with field keys and their values.
31
+ Field key is located under Modify app -> Advanced -> Developer -> External ID
32
+ (see https://developers.podio.com/examples/items)"
33
+ end
34
+
35
+ def self.available_options
36
+ [
37
+ FastlaneCore::ConfigItem.new(key: :client_id,
38
+ env_name: 'PODIO_ITEM_CLIENT_ID',
39
+ description: 'Client ID for Podio API (see https://developers.podio.com/api-key)',
40
+ is_string: true,
41
+ verify_block: proc do |value|
42
+ raise "No Client ID for Podio given, pass using `client_id: 'id'`".red unless value && !value.empty?
43
+ end),
44
+ FastlaneCore::ConfigItem.new(key: :client_secret,
45
+ env_name: 'PODIO_ITEM_CLIENT_SECRET',
46
+ description: 'Client secret for Podio API (see https://developers.podio.com/api-key)',
47
+ is_string: true,
48
+ verify_block: proc do |value|
49
+ raise "No Client Secret for Podio given, pass using `client_secret: 'secret'`".red unless value && !value.empty?
50
+ end),
51
+ FastlaneCore::ConfigItem.new(key: :app_id,
52
+ env_name: 'PODIO_ITEM_APP_ID',
53
+ description: 'App ID of the app you intend to authenticate with (see https://developers.podio.com/authentication/app_auth)',
54
+ is_string: true,
55
+ verify_block: proc do |value|
56
+ raise "No App ID for Podio given, pass using `app_id: 'id'`".red unless value && !value.empty?
57
+ end),
58
+ FastlaneCore::ConfigItem.new(key: :app_token,
59
+ env_name: 'PODIO_ITEM_APP_TOKEN',
60
+ description: 'App token of the app you intend to authenticate with (see https://developers.podio.com/authentication/app_auth)',
61
+ is_string: true,
62
+ verify_block: proc do |value|
63
+ raise "No App token for Podio given, pass using `app_token: 'token'`".red unless value && !value.empty?
64
+ end),
65
+ FastlaneCore::ConfigItem.new(key: :identifying_field,
66
+ env_name: 'PODIO_ITEM_IDENTIFYING_FIELD',
67
+ description: 'String specifying the field key used for identification of an item',
68
+ is_string: true,
69
+ verify_block: proc do |value|
70
+ raise "No Identifying field given, pass using `identifying_field: 'field name'`".red unless value && !value.empty?
71
+ end),
72
+ FastlaneCore::ConfigItem.new(key: :identifying_value,
73
+ description: 'String uniquely specifying an item within the app',
74
+ is_string: true,
75
+ verify_block: proc do |value|
76
+ raise "No Identifying value given, pass using `identifying_value: 'unique value'`".red unless value && !value.empty?
77
+ end),
78
+ FastlaneCore::ConfigItem.new(key: :other_fields,
79
+ description: 'Dictionary of your app fields. Podio supports several field types, see https://developers.podio.com/doc/items',
80
+ is_string: false,
81
+ optional: true)
82
+ ]
83
+ end
84
+
85
+ def self.output
86
+ [
87
+ ['PODIO_ITEM_URL', 'URL to newly created (or updated) Podio item']
88
+ ]
89
+ end
90
+
91
+ def self.authors
92
+ ['pprochazka72, laugejepsen']
93
+ end
94
+
95
+ def self.is_supported?(_platform)
96
+ true
97
+ end
98
+
99
+ #####################################################
100
+ # @!group Logic
101
+ #####################################################
102
+
103
+ def self.post_item(options)
104
+ auth_config = authenticate(options[:client_id],
105
+ options[:client_secret],
106
+ options[:app_id],
107
+ options[:app_token])
108
+
109
+ item_id, item_url = get_item(auth_config,
110
+ options[:identifying_field],
111
+ options[:identifying_value],
112
+ options[:app_id])
113
+
114
+ unless options[:other_fields].nil?
115
+ options[:other_fields].each do |key, value|
116
+ uri = URI.parse(value)
117
+ if uri.kind_of?(URI::HTTP)
118
+ link_embed_id = get_embed_id(auth_config, uri)
119
+ options[:other_fields].merge!(key => link_embed_id)
120
+ end
121
+ end
122
+ update_item(auth_config, item_id, options[:other_fields])
123
+ end
124
+
125
+ Actions.lane_context[SharedValues::PODIO_ITEM_URL] = item_url
126
+ end
127
+
128
+ def self.authenticate(client_id, client_secret, app_id, app_token)
129
+ auth_response = RestClient.post AUTH_URL, grant_type: 'app',
130
+ app_id: app_id,
131
+ app_token: app_token,
132
+ client_id: client_id,
133
+ client_secret: client_secret
134
+ raise 'Failed to authenticate with Podio API' if auth_response.code != 200
135
+
136
+ auth_response_dictionary = JSON.parse(auth_response.body)
137
+ access_token = auth_response_dictionary['access_token']
138
+
139
+ { Authorization: "OAuth2 #{access_token}", content_type: :json, accept: :json }
140
+ end
141
+
142
+ def self.get_item(auth_config, identifying_field, identifying_value, app_id)
143
+ item_id, item_url = get_existing_item(auth_config, identifying_value, app_id)
144
+
145
+ unless item_id
146
+ item_id, item_url = create_item(auth_config, identifying_field, identifying_value, app_id)
147
+ end
148
+
149
+ [item_id, item_url]
150
+ end
151
+
152
+ def self.get_existing_item(auth_config, identifying_value, app_id)
153
+ filter_request_body = { query: identifying_value, limit: 1, ref_type: 'item' }.to_json
154
+ filter_response = RestClient.post "#{BASE_URL}/search/app/#{app_id}/", filter_request_body, auth_config
155
+ raise "Failed to search for already existing item #{identifying_value}" if filter_response.code != 200
156
+
157
+ existing_items = JSON.parse(filter_response.body)
158
+ existing_item_id = nil
159
+ existing_item_url = nil
160
+ if existing_items.length > 0
161
+ existing_item = existing_items[0]
162
+ if existing_item['title'] == identifying_value
163
+ existing_item_id = existing_item['id']
164
+ existing_item_url = existing_item['link']
165
+ end
166
+ end
167
+
168
+ [existing_item_id, existing_item_url]
169
+ end
170
+
171
+ def self.create_item(auth_config, identifying_field, identifying_value, app_id)
172
+ item_request_body = { fields: { identifying_field => identifying_value } }.to_json
173
+ item_response = RestClient.post "#{BASE_URL}/item/app/#{app_id}", item_request_body, auth_config
174
+ raise "Failed to create item \"#{identifying_value}\"" if item_response.code != 200
175
+
176
+ item_response_dictionary = JSON.parse(item_response.body)
177
+ [item_response_dictionary['item_id'], item_response_dictionary['link']]
178
+ end
179
+
180
+ def self.update_item(auth_config, item_id, fields)
181
+ if fields.length > 0
182
+ item_request_body = { fields: fields }.to_json
183
+ item_response = RestClient.put "#{BASE_URL}/item/#{item_id}", item_request_body, auth_config
184
+ raise "Failed to update item values \"#{fields}\"" unless item_response.code != 200 || item_response.code != 204
185
+ end
186
+ end
187
+
188
+ def self.get_embed_id(auth_config, url)
189
+ embed_request_body = { url: url }.to_json
190
+ embed_response = RestClient.post "#{BASE_URL}/embed/", embed_request_body, auth_config
191
+ raise "Failed to create embed for link #{link}" if embed_response.code != 200
192
+
193
+ embed_response_dictionary = JSON.parse(embed_response.body)
194
+ embed_response_dictionary['embed_id']
195
+ end
196
+ end
197
+ end
198
+ end
@@ -0,0 +1,36 @@
1
+ module Fastlane
2
+ module Actions
3
+ class RecreateSchemesAction < Action
4
+ def self.run(params)
5
+ require 'xcodeproj'
6
+
7
+ Helper.log.info "Recreate schemes for project: #{params[:project]}"
8
+
9
+ project = Xcodeproj::Project.open(params[:project])
10
+ project.recreate_user_schemes
11
+ end
12
+
13
+ def self.description
14
+ "Recreate not shared Xcode project schemes"
15
+ end
16
+
17
+ def self.available_options
18
+ [
19
+ FastlaneCore::ConfigItem.new(
20
+ key: :project,
21
+ env_name: "XCODE_PROJECT",
22
+ description: "The Xcode project"
23
+ )
24
+ ]
25
+ end
26
+
27
+ def self.authors
28
+ "jerolimov"
29
+ end
30
+
31
+ def self.is_supported?(platform)
32
+ [:ios, :mac].include? platform
33
+ end
34
+ end
35
+ end
36
+ end
@@ -2,6 +2,8 @@ module Fastlane
2
2
  module Actions
3
3
  def self.git_log_between(pretty_format, from, to)
4
4
  Actions.sh("git log --pretty=#{pretty_format} #{from}...#{to}", log: false).chomp
5
+ rescue
6
+ nil
5
7
  end
6
8
 
7
9
  def self.last_git_tag_name(match_lightweight = true)
@@ -9,9 +11,13 @@ module Fastlane
9
11
  command << '--tags' if match_lightweight
10
12
  command << '--abbrev=0'
11
13
  Actions.sh(command.join(' '), log: false).chomp
14
+ rescue
15
+ nil
12
16
  end
13
17
 
14
18
  def self.last_git_commit_dict
19
+ return nil if last_git_commit_formatted_with('%an').nil?
20
+
15
21
  {
16
22
  author: last_git_commit_formatted_with('%an'),
17
23
  message: last_git_commit_formatted_with('%B')
@@ -22,6 +28,8 @@ module Fastlane
22
28
  # pretty format String. See the git-log documentation for valid format placeholders
23
29
  def self.last_git_commit_formatted_with(pretty_format)
24
30
  Actions.sh("git log -1 --pretty=#{pretty_format}", log: false).chomp
31
+ rescue
32
+ nil
25
33
  end
26
34
 
27
35
  # Get the author email of the last git commit
@@ -36,8 +44,6 @@ module Fastlane
36
44
  s = last_git_commit_formatted_with('%ae')
37
45
  return s if s.to_s.length > 0
38
46
  return nil
39
- rescue
40
- return nil
41
47
  end
42
48
 
43
49
  # Returns the unwrapped subject and body of the last commit
@@ -49,7 +55,7 @@ module Fastlane
49
55
 
50
56
  # Returns the unwrapped subject and body of the last commit
51
57
  def self.last_git_commit_message
52
- s = last_git_commit_formatted_with('%B').strip
58
+ s = (last_git_commit_formatted_with('%B') || "").strip
53
59
  return s if s.to_s.length > 0
54
60
  nil
55
61
  end
@@ -57,9 +63,11 @@ module Fastlane
57
63
  # Returns the current git branch - can be replaced using the environment variable `GIT_BRANCH`
58
64
  def self.git_branch
59
65
  return ENV['GIT_BRANCH'] if ENV['GIT_BRANCH'].to_s.length > 0 # set by Jenkins
60
- s = `git rev-parse --abbrev-ref HEAD`
66
+ s = Actions.sh("git rev-parse --abbrev-ref HEAD", log: false).chomp
61
67
  return s.to_s.strip if s.to_s.length > 0
62
68
  nil
69
+ rescue
70
+ nil
63
71
  end
64
72
  end
65
73
  end
@@ -1,3 +1,3 @@
1
1
  module Fastlane
2
- VERSION = '1.45.0'
2
+ VERSION = '1.46.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.45.0
4
+ version: 1.46.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-05 00:00:00.000000000 Z
11
+ date: 2015-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: krausefx-shenzhen
@@ -635,12 +635,14 @@ files:
635
635
  - lib/fastlane/actions/pem.rb
636
636
  - lib/fastlane/actions/pilot.rb
637
637
  - lib/fastlane/actions/pod_push.rb
638
+ - lib/fastlane/actions/podio_item.rb
638
639
  - lib/fastlane/actions/produce.rb
639
640
  - lib/fastlane/actions/prompt.rb
640
641
  - lib/fastlane/actions/push_git_tags.rb
641
642
  - lib/fastlane/actions/push_to_git_remote.rb
642
643
  - lib/fastlane/actions/puts.rb
643
644
  - lib/fastlane/actions/read_podspec.rb
645
+ - lib/fastlane/actions/recreate_schemes.rb
644
646
  - lib/fastlane/actions/register_devices.rb
645
647
  - lib/fastlane/actions/reset_git_repo.rb
646
648
  - lib/fastlane/actions/resign.rb