fastlane-plugin-match_keystore 0.1.3 → 0.1.4

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
  SHA256:
3
- metadata.gz: dc39c27ae6c902a6fcd405d5eef892687e663bb85cccb0fbbeb10dfb69b00751
4
- data.tar.gz: b6aebe60f441bfc603aac48563763fc18ec57f8079276780ae871795d833a67f
3
+ metadata.gz: 0af6b5ad125ace188811247b482ba84e38bd73cad908e32cb2ddd2193059fd9b
4
+ data.tar.gz: 01dc72217dd581f967e5c9639459af9557fea5921c9dd6fce4580c75b41ada2c
5
5
  SHA512:
6
- metadata.gz: 7582d8c4cc25d65d84b9b77db1bd18eacb4e434733456e1307f9cff59bb55cea15112045f8d6664968a2ec704da32c1c132c563713baf06946b45f07dd7a33a9
7
- data.tar.gz: 6f978721abbfb8110c1ed311dcd366602baba4fac92ada9d1406682201d99a40909cd4400b48c621e32f680b43be73a02f42b0c5770432d522f6019e01558585
6
+ metadata.gz: 61861369ca1cddf195c96ee6402802b01b686a9864974e68563daef6bb0cd79329289a989b16a22e2dacee7348987e1ebaf0e11610625f634e8d7c17aba055d7
7
+ data.tar.gz: 1842d84d9bee7a59192a17c3105d1e202d3addcc86f2ea29a582a64847d862d43bee7326fc51c7705de063a1c6ec4483a857d27101919fdd824fb204cefc3879
data/README.md CHANGED
@@ -12,9 +12,13 @@ fastlane add_plugin match_keystore
12
12
 
13
13
  ## About match_keystore
14
14
 
15
- Easily sync your Android keystores across your team
15
+ Easily sync your Android keystores across your team.
16
16
 
17
- **Note to author:** Add a more detailed description about this plugin here. If your plugin contains multiple actions, make sure to mention them here.
17
+ This plugin was design based on the 'match' plugin and code signing concept: https://codesigning.guide/
18
+
19
+ With **match_keystore** you can store all your Android Keystores in secured private repository and share it to your team and your CI system.
20
+
21
+ The keystore properties are encrypted with AES in order to secure sensitive data in the Git repository itself.
18
22
 
19
23
  ## How to use
20
24
 
@@ -24,11 +28,14 @@ Easily sync your Android keystores across your team
24
28
  gradle(task: "clean")
25
29
  gradle(task: 'assemble', build_type: 'Release')
26
30
 
27
- match_keystore(
28
- git_url: "https://github.com/<GITHUB_USERNAME>/keystores.git",
31
+ signed_apk_path = match_keystore(
32
+ git_url: "https://github.com/<GITHUB_USERNAME>/keystores.git", # Please use a private Git repository !
29
33
  package_name: "com.your.package.name",
30
- apk_path: "/app/build/outputs/apk/app-release.apk"
34
+ apk_path: "/app/build/outputs/apk/app-release.apk" # Or path without APK: /app/build/outputs/apk/
31
35
  )
36
+
37
+ # Return the path of signed APK (useful for other lanes such as `publish_to_firebase`, `upload_to_play_store`)
38
+ puts signed_apk_path
32
39
  end
33
40
  ```
34
41
 
@@ -84,7 +84,7 @@ module Fastlane
84
84
  # https://developer.android.com/studio/command-line/apksigner
85
85
  apk_path_signed = apk_path.gsub(".apk", "-signed.apk")
86
86
  puts `rm -f #{apk_path_signed}`
87
- puts `#{build_tools_path}apksigner sign --ks #{keystore_path} --ks-key-alias #{alias_name} --ks-pass pass:#{alias_password} --key-pass pass:#{key_password} --v1-signing-enabled true --v2-signing-enabled true --out #{apk_path_signed} #{apk_path_aligned}`
87
+ puts `#{build_tools_path}apksigner sign --ks #{keystore_path} --ks-key-alias '#{alias_name}' --ks-pass pass:'#{alias_password}' --key-pass pass:'#{key_password}' --v1-signing-enabled true --v2-signing-enabled true --out #{apk_path_signed} #{apk_path_aligned}`
88
88
 
89
89
  puts `#{build_tools_path}apksigner verify #{apk_path_signed}`
90
90
  puts `rm -f #{apk_path_aligned}`
@@ -93,7 +93,7 @@ module Fastlane
93
93
  end
94
94
 
95
95
  def self.resolve_apk_path(apk_path)
96
-
96
+
97
97
  if !apk_path.to_s.end_with?(".apk")
98
98
 
99
99
  if !File.directory?(apk_path)
@@ -126,6 +126,7 @@ module Fastlane
126
126
  git_url = params[:git_url]
127
127
  package_name = params[:package_name]
128
128
  apk_path = params[:apk_path]
129
+ existing_keystore = params[:existing_keystore]
129
130
  override_keystore = params[:override_keystore]
130
131
 
131
132
  keystore_name = 'keystore.jks'
@@ -173,8 +174,9 @@ module Fastlane
173
174
  properties_path = keystoreAppDir + '/' + properties_name
174
175
  properties_encrypt_path = keystoreAppDir + '/' + properties_encrypt_name
175
176
 
176
- # Create keystore with command
177
- if !File.file?(keystore_path) || override_keystore
177
+ # Create keystore with command
178
+ override_keystore = File.file?(existing_keystore)
179
+ if !File.file?(keystore_path) || override_keystore
178
180
 
179
181
  if File.file?(keystore_path)
180
182
  FileUtils.remove_dir(keystore_path)
@@ -184,25 +186,31 @@ module Fastlane
184
186
  alias_name = other_action.prompt(text: "Keystore Alias name: ")
185
187
  alias_password = other_action.prompt(text: "Keystore Alias password: ")
186
188
 
187
- full_name = other_action.prompt(text: "Certificate First and Last Name: ")
188
- org_unit = other_action.prompt(text: "Certificate Organisation Unit: ")
189
- org = other_action.prompt(text: "Certificate Organisation: ")
190
- city_locality = other_action.prompt(text: "Certificate City or Locality: ")
191
- state_province = other_action.prompt(text: "Certificate State or Province: ")
192
- country = other_action.prompt(text: "Certificate Country Code (XX): ")
193
-
194
189
  # https://developer.android.com/studio/publish/app-signing
195
- UI.message("Generating Android Keystore...")
196
- keytool_parts = [
197
- "keytool -genkey -v",
198
- "-keystore #{keystore_path}",
199
- "-alias #{alias_name}",
200
- "-keyalg RSA -keysize 2048 -validity 10000",
201
- "-storepass #{alias_password} ",
202
- "-keypass #{key_password}",
203
- "-dname \"CN=#{full_name}, OU=#{org_unit}, O=#{org}, L=#{city_locality}, S=#{state_province}, C=#{country}\"",
204
- ]
205
- sh keytool_parts.join(" ")
190
+ if !File.file?(existing_keystore)
191
+ UI.message("Generating Android Keystore...")
192
+
193
+ full_name = other_action.prompt(text: "Certificate First and Last Name: ")
194
+ org_unit = other_action.prompt(text: "Certificate Organisation Unit: ")
195
+ org = other_action.prompt(text: "Certificate Organisation: ")
196
+ city_locality = other_action.prompt(text: "Certificate City or Locality: ")
197
+ state_province = other_action.prompt(text: "Certificate State or Province: ")
198
+ country = other_action.prompt(text: "Certificate Country Code (XX): ")
199
+
200
+ keytool_parts = [
201
+ "keytool -genkey -v",
202
+ "-keystore #{keystore_path}",
203
+ "-alias #{alias_name}",
204
+ "-keyalg RSA -keysize 2048 -validity 10000",
205
+ "-storepass #{alias_password} ",
206
+ "-keypass #{key_password}",
207
+ "-dname \"CN=#{full_name}, OU=#{org_unit}, O=#{org}, L=#{city_locality}, S=#{state_province}, C=#{country}\"",
208
+ ]
209
+ sh keytool_parts.join(" ")
210
+ else
211
+ UI.message("Copy existing keystore to match_keystore repository...")
212
+ puts `cp #{existing_keystore} #{keystore_path}`
213
+ end
206
214
 
207
215
  UI.message("Generating Keystore properties...")
208
216
 
@@ -249,19 +257,25 @@ module Fastlane
249
257
 
250
258
  output_signed_apk = ''
251
259
  apk_path = self.resolve_apk_path(apk_path)
252
- UI.message("APK to sign: " + apk_path)
253
-
254
- if File.file?(keystore_path)
255
- UI.message("Signing the APK...")
256
- output_signed_apk = self.sign_apk(
257
- apk_path,
258
- keystore_path,
259
- key_password,
260
- alias_name,
261
- alias_password,
262
- true
263
- )
264
- end
260
+
261
+ if File.file?(apk_path)
262
+ UI.message("APK to sign: " + apk_path)
263
+
264
+ if File.file?(keystore_path)
265
+
266
+ UI.message("Signing the APK...")
267
+ output_signed_apk = self.sign_apk(
268
+ apk_path,
269
+ keystore_path,
270
+ key_password,
271
+ alias_name,
272
+ alias_password,
273
+ true
274
+ )
275
+ end
276
+ else
277
+ UI.message("No APK file found to sign!")
278
+ end
265
279
 
266
280
  output_signed_apk
267
281
 
@@ -295,12 +309,12 @@ module Fastlane
295
309
 
296
310
  def self.available_options
297
311
  [
298
- FastlaneCore::ConfigItem.new(key: :git_url,
312
+ FastlaneCore::ConfigItem.new(key: :git_url,
299
313
  env_name: "MATCH_KEYSTORE_GIT_URL",
300
314
  description: "The URL of the Git repository (Github, BitBucket...)",
301
315
  optional: false,
302
316
  type: String),
303
- FastlaneCore::ConfigItem.new(key: :package_name,
317
+ FastlaneCore::ConfigItem.new(key: :package_name,
304
318
  env_name: "MATCH_KEYSTORE_PACKAGE_NAME",
305
319
  description: "The package name of the App",
306
320
  optional: false,
@@ -310,7 +324,12 @@ module Fastlane
310
324
  description: "Path of the APK file to sign",
311
325
  optional: false,
312
326
  type: String),
313
- FastlaneCore::ConfigItem.new(key: :override_keystore,
327
+ FastlaneCore::ConfigItem.new(key: :existing_keystore,
328
+ env_name: "MATCH_KEYSTORE_EXISTING",
329
+ description: "Path of an existing Keystore",
330
+ optional: true,
331
+ type: String),
332
+ FastlaneCore::ConfigItem.new(key: :override_keystore,
314
333
  env_name: "MATCH_KEYSTORE_OVERRIDE",
315
334
  description: "Override an existing Keystore (false by default)",
316
335
  optional: true,
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module MatchKeystore
3
- VERSION = "0.1.3"
3
+ VERSION = "0.1.4"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-match_keystore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher NEY