fastlane-plugin-fivethree_ionic 0.2.0 → 0.2.1

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
- SHA1:
3
- metadata.gz: 6277de46ffd8b42bf647408dfe5783cc611c38a9
4
- data.tar.gz: b7878a099a83b46bf7e0809d27c3c520d774e462
2
+ SHA256:
3
+ metadata.gz: 2f509270835008441453a133f18e5ce76088d0d186e9d7f4408f0b500071f4e3
4
+ data.tar.gz: 1e23ccf97a7bd6591a08ab86ff2077669e24c6ecd8d3b94f0a993a9f428906b3
5
5
  SHA512:
6
- metadata.gz: 39c93d9e9fa5e3e3b93f88c6325e750d334384db68567c5390944624acd328288b92463bb91b81ab362fed435c3a30095c17df7bfb8106bd337828e0053f9b22
7
- data.tar.gz: dbb12e9f54f07111cc7a26c6a7a3a4912c8de05d76e63d32ae7154e19e09c4fd7b8b7f03274011e7e1d82ef5f8708c23d0dad4bf2770dcd962dc217fbfc6a27d
6
+ metadata.gz: a56f30758cb636aba517021be7ed3997372820a6fd8c936e1ba22becb1fd386513c6ad8ca0c70414b7bcaec82ccf56dcfd36e12dcef40669d544e1c13bca47c3
7
+ data.tar.gz: 1c31eb89a21c546fd40c08e117d08e9cca9383d519a57a6f578154cf4abf6787b540ebb0bc43ce2a5035dccb53199c33b28647b69839eaefb995c32b68105a1e
@@ -0,0 +1,125 @@
1
+ module Fastlane
2
+ module Actions
3
+ class FivAndroidKeystoreAction < Action
4
+ def self.run(params)
5
+ keystore_path = params[:keystore_path]
6
+ keystore_name = params[:keystore_name]
7
+ keystore_file = File.join(keystore_path, keystore_name) + '.keystore'
8
+
9
+ # Validating output doesn't exist yet for our android signing info
10
+ if File.directory?(keystore_path)
11
+ if File.exists?(keystore_file)
12
+ return keystore_file
13
+ end
14
+ else
15
+ UI.message "android keystore doesnt exist yet. creating one for you..."
16
+ Dir.mkdir keystore_path
17
+ end
18
+
19
+
20
+ puts "Please enter the keystore password for new keystore with atleast 6 characters:"
21
+ keychain_entry = CredentialsManager::AccountManager.new(user: "#{keystore_name}_android_keystore_storepass")
22
+ password = keychain_entry.password
23
+
24
+ puts "Please enter the keystore password for new keystore atleast 6 characters:"
25
+ keypass_entry = CredentialsManager::AccountManager.new(user: "#{keystore_name}_android_keystore_keypass")
26
+ key_password = keypass_entry.password
27
+
28
+ alias_name = params[:key_alias]
29
+ puts "Keystore alias #{alias_name}"
30
+
31
+ full_name = Fastlane::Actions::PromptAction.run(text:"Enter kexystore full name")
32
+ org = Fastlane::Actions::PromptAction.run(text:"Enter kexystore org")
33
+ org_unit = Fastlane::Actions::PromptAction.run(text:"Enter kexystore org unit")
34
+ city_locality = Fastlane::Actions::PromptAction.run(text:"Enter city")
35
+ state_province = Fastlane::Actions::PromptAction.run(text:"Enter state")
36
+ country = Fastlane::Actions::PromptAction.run(text:"country")
37
+
38
+ # Create keystore with command
39
+ unless File.file?(keystore_file)
40
+ keytool = "keytool -genkey -v \
41
+ -keystore #{keystore_file} \
42
+ -alias #{alias_name} \
43
+ -keyalg RSA -keysize 2048 -validity 10000 \
44
+ -storepass #{password} \
45
+ -keypass #{key_password} \
46
+ -dname \"CN=#{full_name}, OU=#{org_unit}, O=#{org}, L=#{city_locality}, S=#{state_province}, C=#{country}\"
47
+ "
48
+ sh keytool
49
+ else
50
+ UI.message "Keystore file already exists - #{keystore_file}"
51
+ end
52
+
53
+ # Create release-signing.properties for automatic signing with Ionic
54
+ release_signing_path = File.join(keystore_path, "release-signing.properties")
55
+
56
+ unless File.file?(release_signing_path)
57
+ out_file = File.new(release_signing_path, "w")
58
+ out_file.puts("storeFile=#{keystore_name}")
59
+ out_file.puts("storePassword=#{password}")
60
+ out_file.puts("keyAlias=#{alias_name}")
61
+ out_file.puts("keyPassword=#{key_password}")
62
+ out_file.close
63
+ else
64
+ UI.message "release-signing.properties file already exists - #{release_signing_path}"
65
+ end
66
+
67
+ return keystore_file
68
+ end
69
+
70
+ #####################################################
71
+ # @!group Documentation
72
+ #####################################################
73
+
74
+ def self.description
75
+ "Generate an Android keystore file or validate keystore exists"
76
+ end
77
+
78
+ def self.details
79
+ "Generate an Android keystore file or validate keystore exists"
80
+ end
81
+
82
+ def self.available_options
83
+ [
84
+ FastlaneCore::ConfigItem.new(
85
+ key: :keystore_path,
86
+ env_name: "FIV_KEYSTORE_PATH",
87
+ description: "Path to android keystore",
88
+ is_string: true,
89
+ default_value: "./fastlane/android"),
90
+ FastlaneCore::ConfigItem.new(
91
+ key: :keystore_name,
92
+ env_name: "FIV_KEYSTORE_NAME",
93
+ description: "Name of the keystore",
94
+ is_string: true,
95
+ optional: false),
96
+ FastlaneCore::ConfigItem.new(
97
+ key: :key_alias,
98
+ env_name: "FIV_ANDROID_KEYSTORE_ALIAS",
99
+ description: "Key alias of the keystore",
100
+ is_string: true,
101
+ optional: false)
102
+ ]
103
+ end
104
+
105
+ def self.output
106
+ [
107
+ ['ANDROID_KEYSTORE_KEYSTORE_PATH', 'Path to keystore'],
108
+ ['ANDROID_KEYSTORE_RELEASE_SIGNING_PATH', 'Path to release-signing.properties']
109
+ ]
110
+ end
111
+
112
+ def self.return_value
113
+ "Path to keystore"
114
+ end
115
+
116
+ def self.authors
117
+ ["fivethree"]
118
+ end
119
+
120
+ def self.is_supported?(platform)
121
+ platform == :android
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,59 @@
1
+ module Fastlane
2
+ module Actions
3
+ class FivSelectClientAction < Action
4
+ def self.run(params)
5
+ Dir.chdir "#{params[:clients_folder]}" do
6
+ clients_folders = Dir.glob('*').sort.select {|f| File.directory? f}
7
+ if (ENV["CLIENT"])
8
+ if (clients_folders.include?(ENV["CLIENT"]))
9
+ puts("
10
+ ***********************************************
11
+ Selected client: #{ENV["CLIENT"]}
12
+ ***********************************************
13
+ ")
14
+ return ENV["CLIENT"]
15
+ else
16
+ UI.user_error!("Client #{ENV["CLIENT"]} is not available.")
17
+ end
18
+ end
19
+
20
+ selected_client = UI.select("Select one client: ", clients_folders)
21
+
22
+ puts("
23
+ ***********************************************
24
+ Selected client: #{selected_client}
25
+ ***********************************************
26
+ ")
27
+ return selected_client
28
+ end
29
+ end
30
+
31
+ def self.description
32
+ "Select a client"
33
+ end
34
+
35
+ def self.available_options
36
+ [
37
+ FastlaneCore::ConfigItem.new(
38
+ key: :clients_folder,
39
+ env_name: "FIV_CLIENTS_FOLDER", # The name of the environment variable
40
+ description: "Clients folder path for SelectClientAction", # a short description of this parameter
41
+ default_value: "clients",
42
+ is_string: true,
43
+ verify_block: proc do |value|
44
+ UI.user_error!("No client folder path for SelectClientAction given, pass using `client_folder: '../path_to_clients_folder'`") unless (value and not value.empty?)
45
+ UI.user_error!("Couldn't find clients folder at path '#{value}'") unless File.directory?(value)
46
+ end)
47
+ ]
48
+ end
49
+
50
+ def self.author
51
+ "Marc"
52
+ end
53
+
54
+ def self.is_supported?(platform)
55
+ [:ios, :mac, :android].include? platform
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,74 @@
1
+ module Fastlane
2
+ module Actions
3
+ class FivSelectClientsAction < Action
4
+ def self.run(params)
5
+ clients = []
6
+ Dir.chdir "#{params[:clients_folder]}" do
7
+ clients_folders = Dir.glob('*').sort.select {|f| File.directory? f}
8
+
9
+ if(ENV["CLIENTS"])
10
+ envClients = ENV["CLIENTS"].split(",")
11
+ selectedClients = envClients.select{|x| clients_folders.include?(x) }
12
+ puts("
13
+ ***********************************************
14
+ Selected clients: #{selectedClients}
15
+ ***********************************************
16
+ ")
17
+ return selectedClients
18
+ end
19
+
20
+ clients_folders.unshift("All")
21
+ selected_client = UI.select("Select clients: ", clients_folders)
22
+
23
+ if (selected_client === "All")
24
+ clients_folders.shift()
25
+ puts("
26
+ ***********************************************
27
+ Selected clients: #{clients_folders}
28
+ ***********************************************
29
+ ")
30
+ return clients_folders
31
+ end
32
+
33
+
34
+ puts("
35
+ ***********************************************
36
+ Selected client: #{selected_client}
37
+ ***********************************************
38
+ ")
39
+ clients.push(selected_client)
40
+
41
+ end
42
+
43
+ return clients
44
+ end
45
+
46
+ def self.description
47
+ "Select list of clients"
48
+ end
49
+
50
+ def self.available_options
51
+ [
52
+ FastlaneCore::ConfigItem.new(
53
+ key: :clients_folder,
54
+ env_name: "FIV_CLIENTS_FOLDER", # The name of the environment variable
55
+ description: "Clients folder path for SelectClientAction", # a short description of this parameter
56
+ default_value: "clients",
57
+ is_string: true,
58
+ verify_block: proc do |value|
59
+ UI.user_error!("No client folder path for FivSelectClientAction given, pass using `client_folder: '../path_to_clients_folder'`") unless (value and not value.empty?)
60
+ UI.user_error!("Couldn't find clients folder at path '#{value}'") unless File.directory?(value)
61
+ end)
62
+ ]
63
+ end
64
+
65
+ def self.author
66
+ "Marc"
67
+ end
68
+
69
+ def self.is_supported?(platform)
70
+ [:ios, :mac, :android].include? platform
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,73 @@
1
+ module Fastlane
2
+ module Actions
3
+ class FivSelectEnvAction < Action
4
+ def self.run(params)
5
+ Dir.chdir "#{params[:clients_folder]}/#{params[:client]}/#{params[:environments_folder]}" do
6
+ environment = Dir.glob('*').sort.select {|f| File.directory? f}
7
+ if (ENV["ENV"] && environment.include?(ENV["ENV"]))
8
+ puts("
9
+ ***********************************************
10
+ Selected environment: #{ENV["ENV"]}
11
+ ***********************************************
12
+ ")
13
+ return ENV["ENV"]
14
+ end
15
+
16
+ selected_env = UI.select("Select one environment: ", environment)
17
+
18
+ puts("
19
+ ***********************************************
20
+ Selected environment: #{selected_env}
21
+ ***********************************************
22
+ ")
23
+ return selected_env
24
+ end
25
+ end
26
+
27
+ def self.description
28
+ "Select a client"
29
+ end
30
+
31
+ def self.available_options
32
+ [
33
+ FastlaneCore::ConfigItem.new(
34
+ key: :clients_folder,
35
+ env_name: "FIV_CLIENTS_FOLDER", # The name of the environment variable
36
+ description: "Clients folder path for SelectEnvAction", # a short description of this parameter
37
+ default_value: "clients",
38
+ is_string: true,
39
+ verify_block: proc do |value|
40
+ UI.user_error!("No client folder path for SelectClientAction given, pass using `client_folder: '../path_to_clients_folder'`") unless (value and not value.empty?)
41
+ UI.user_error!("Couldn't find clients folder at path '#{value}'") unless File.directory?(value)
42
+ end),
43
+ FastlaneCore::ConfigItem.new(
44
+ key: :environments_folder,
45
+ env_name: "FIV_ENVIRONMENT_FOLDER", # The name of the environment variable
46
+ description: "Environment folder path for SelectEnvAction", # a short description of this parameter
47
+ default_value: "environments",
48
+ is_string: true,
49
+ verify_block: proc do |value|
50
+ UI.user_error!("No environment folder path for SelectClientAction given, pass using `environment: '../path_to_environment_folder'`") unless (value and not value.empty?)
51
+ end),
52
+ FastlaneCore::ConfigItem.new(
53
+ key: :client,
54
+ env_name: "FIV_CLIENT", # The name of the environment variable
55
+ description: "Client folder path for SelectEnvAction", # a short description of this parameter
56
+ is_string: true,
57
+ optional: false,
58
+ verify_block: proc do |value|
59
+ UI.user_error!("No client folder path for SelectEnvAction given, pass using `client: '../path_to_client_folder'`") unless (value and not value.empty?)
60
+ end)
61
+ ]
62
+ end
63
+
64
+ def self.author
65
+ "Marc"
66
+ end
67
+
68
+ def self.is_supported?(platform)
69
+ [:ios, :mac, :android].include? platform
70
+ end
71
+ end
72
+ end
73
+ end
@@ -1,14 +1,7 @@
1
1
  module Fastlane
2
2
  module Actions
3
- module SharedValues
4
- CORDOVA_IOS_RELEASE_BUILD_PATH = :CORDOVA_IOS_RELEASE_BUILD_PATH
5
- CORDOVA_ANDROID_RELEASE_BUILD_PATH = :CORDOVA_ANDROID_RELEASE_BUILD_PATH
6
- end
7
-
8
3
  class FivSignAndroidAction < Action
9
4
  def self.run(params)
10
-
11
-
12
5
  keystore_path = Fastlane::Actions::FivAndroidKeystoreAction.run(params)
13
6
 
14
7
  keychain_entry = CredentialsManager::AccountManager.new(user: "#{params[:keystore_name]}_android_keystore_storepass")
@@ -17,20 +10,35 @@ module Fastlane
17
10
  keychain_entry = CredentialsManager::AccountManager.new(user: "#{params[:keystore_name]}_android_keystore_keypass")
18
11
  keystore_keypass = keychain_entry.password
19
12
 
20
- puts "Silent execution of jarsigner because we don't want to print passwords. You can delete the password if they are wrong stored in the keychain: 'fastlane fastlane-credentials remove --username android_keystore_storepass' and 'fastlane fastlane-credentials remove --username android_keystore_keypass'"
21
- sign = "jarsigner -tsa http://timestamp.digicert.com -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore #{keystore_path} -storepass #{keystore_storepass} -keypass #{keystore_keypass} #{ENV['CORDOVA_ANDROID_RELEASE_BUILD_PATH']} #{params[:key_alias]}"
22
- path = "./platforms/android/app/build/outputs/apk/release/app-release-#{params[:version]}-#{params[:build_no]}.apk"
23
- zipalign = "$ANDROID_SDK/build-tools/$ANDROID_BUILD_TOOL_VERSION/zipalign -v 4 \"#{ENV['CORDOVA_ANDROID_RELEASE_BUILD_PATH']}\" \"#{path}\""
24
- if params[:silent]
25
- self.run_silent(sign)
26
- self.run_silent(zipalign)
27
- else
28
- sh sign
29
- sh zipalign
13
+ puts "You can delete the password if they are wrong stored in the keychain: 'fastlane fastlane-credentials remove --username android_keystore_storepass' and 'fastlane fastlane-credentials remove --username android_keystore_keypass'"
14
+
15
+ android_build_tool_path = "#{params[:android_sdk_path]}/build-tools/#{params[:android_build_tool_version]}"
16
+
17
+ # zipalign APK
18
+ remove_zipalign = "rm -Rf ../platforms/android/app/build/outputs/apk/release/app-release-unsigned-zipalign.apk"
19
+ sh remove_zipalign
20
+ zipalign = "#{android_build_tool_path}/zipalign -v 4 \
21
+ ../platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk \
22
+ ../platforms/android/app/build/outputs/apk/release/app-release-unsigned-zipalign.apk"
23
+ sh zipalign
24
+
25
+ if(!File.directory?(params[:apk_output_dir]))
26
+ Dir.mkdir params[:apk_output_dir]
30
27
  end
31
-
32
- return path
28
+ output_path = "#{params[:apk_output_dir]}/app-release-#{params[:app_version]}-#{params[:app_build_no]}.apk"
29
+
30
+ sign = "#{android_build_tool_path}/apksigner sign \
31
+ --ks #{keystore_path} \
32
+ --ks-key-alias #{params[:key_alias]} \
33
+ --ks-pass pass:#{keystore_keypass} \
34
+ --out #{output_path} \
35
+ ../platforms/android/app/build/outputs/apk/release/app-release-unsigned-zipalign.apk"
36
+ self.run_shell_script(sign, params[:silent])
33
37
 
38
+ verify = ("#{android_build_tool_path}/apksigner verify -v #{output_path}")
39
+ self.run_shell_script(verify, params[:silent])
40
+
41
+ return output_path
34
42
  end
35
43
 
36
44
  #####################################################
@@ -38,12 +46,12 @@ module Fastlane
38
46
  #####################################################
39
47
 
40
48
  def self.description
41
- "A short description with <= 80 characters of what this action does"
42
- end
43
- def self.run_silent(command)
44
- Fastlane::Actions::sh(command, log: false)
49
+ "Zipalign, sign and verify android apk"
45
50
  end
46
51
 
52
+ def self.run_shell_script(command, silent)
53
+ Fastlane::Actions::sh(command, log: silent)
54
+ end
47
55
 
48
56
  def self.details
49
57
  # Optional:
@@ -56,40 +64,60 @@ module Fastlane
56
64
 
57
65
  # Below a few examples
58
66
  [
59
- FastlaneCore::ConfigItem.new(key: :output_directory,
60
- env_name: "ANDROID_KEYSTORE_OUTPUT_DIRECTORY",
61
- description: "",
67
+ FastlaneCore::ConfigItem.new(
68
+ key: :keystore_path,
69
+ env_name: "FIV_KEYSTORE_PATH",
70
+ description: "Path to android keystore",
62
71
  is_string: true,
63
- optional: false,
64
- default_value: File.absolute_path(File.join(Dir.pwd, ".android_signing"))),
65
- FastlaneCore::ConfigItem.new(key: :keystore_name,
66
- env_name: "ANDROID_KEYSTORE_KEYSTORE_NAME",
67
- description: "",
72
+ default_value: "./fastlane/android"),
73
+ FastlaneCore::ConfigItem.new(
74
+ key: :keystore_name,
75
+ env_name: "FIV_KEYSTORE_NAME",
76
+ description: "Name of the keystore",
68
77
  is_string: true,
69
78
  optional: false),
70
- FastlaneCore::ConfigItem.new(key: :key_alias,
71
- env_name: "ANDROID_KEYSTORE_KEYSTORE_ALIAS",
72
- description: "",
79
+ FastlaneCore::ConfigItem.new(
80
+ key: :android_sdk_path,
81
+ env_name: "FIV_ANDROID_SDK_PATH",
82
+ description: "Path to your installed Android SDK",
83
+ is_string: true,
84
+ default_value: "~/Library/Android/sdk"),
85
+ FastlaneCore::ConfigItem.new(
86
+ key: :android_build_tool_version,
87
+ env_name: "FIV_ANDROID_SDK_BUILD_TOOL_VERSION",
88
+ description: "Android Build Tool version used for `zipalign`, `sign` and `verify`",
89
+ is_string: true,
90
+ default_value: "28.0.3"),
91
+ FastlaneCore::ConfigItem.new(
92
+ key: :apk_output_dir,
93
+ env_name: "FIV_APK_OUTPUT_DIR",
94
+ description: "Output path of the signed apk",
95
+ is_string: true,
96
+ default_value: "../platforms/android/app/build/outputs/apk/release"),
97
+ FastlaneCore::ConfigItem.new(
98
+ key: :key_alias,
99
+ env_name: "FIV_ANDROID_KEYSTORE_ALIAS",
100
+ description: "Key alias of the keystore",
73
101
  is_string: true,
74
102
  optional: false),
75
103
  FastlaneCore::ConfigItem.new(
76
- key: :version,
77
- env_name: "CURRENT_BUILD_VERSION",
78
- description: "current build version from config.xml",
104
+ key: :app_version,
105
+ env_name: "FIV_APP_VERSION",
106
+ description: "App version",
79
107
  is_string: true,
80
108
  default_value: ''
81
109
  ),
82
110
  FastlaneCore::ConfigItem.new(
83
- key: :build_no,
84
- env_name: "CURRENT_BUILD_NUMBER",
85
- description: "current build number from config.xml",
111
+ key: :app_build_no,
112
+ env_name: "FIV_APP_BUILD_NO",
113
+ description: "App build number",
86
114
  is_string: true,
87
115
  default_value: ''
88
116
  ),
89
117
  FastlaneCore::ConfigItem.new(
90
118
  key: :silent,
91
- env_name: "SIGN_ANDROID_SLIENT",
92
- description: "wether to sign android silently",
119
+ env_name: "FIV_SIGN_ANDROID_SILENT",
120
+ description: "Wether to sign android silently",
93
121
  is_string: false,
94
122
  default_value: true
95
123
  )
@@ -110,7 +138,7 @@ FastlaneCore::ConfigItem.new(key: :key_alias,
110
138
 
111
139
  def self.authors
112
140
  # So no one will ever forget your contribution to fastlane :) You are awesome btw!
113
- ["Your GitHub/Twitter Name"]
141
+ ["marcjulian"]
114
142
  end
115
143
 
116
144
  def self.is_supported?(platform)
@@ -7,8 +7,13 @@ module Fastlane
7
7
  module Actions
8
8
  class FivUpdateVersionAndBuildNoAction < Action
9
9
  def self.run(params)
10
-
11
- version = Fastlane::Actions::FivUpdateVersionAction.run(pathToConfigXML:params[:pathToConfigXML])
10
+ version;
11
+ if(params[:skip_version])
12
+ old_version = sh "echo \"cat //*[local-name()='widget']/@version\" | xmllint --shell #{params[:pathToConfigXML]}| awk -F'[=\"]' '!/>/{print $(NF-1)}'"
13
+ version = old_version.delete!("\n")
14
+ else
15
+ version = Fastlane::Actions::FivUpdateVersionAction.run(pathToConfigXML:params[:pathToConfigXML])
16
+ end
12
17
  build_no = Fastlane::Actions::FivIncrementBuildNoAction.run(
13
18
  pathToConfigXML: params[:pathToConfigXML],
14
19
  ios: params[:ios]
@@ -9,20 +9,19 @@ module Fastlane
9
9
  version_and_build_no = Fastlane::Actions::FivUpdateVersionAndBuildNoAction.run(ios: params[:ios],pathToConfigXML:params[:pathToConfigXML])
10
10
 
11
11
  Fastlane::Actions::FivBumpVersionAction.run(
12
- message: "Version Bump: build #{version_and_build_no[:build_no]}, version: #{version_and_build_no[:version]}"
12
+ message: "fastlane(#{params[:ios] ? "ios" : "android"}): build #{version_and_build_no[:build_no]}, version: #{version_and_build_no[:version]}"
13
13
  )
14
14
 
15
15
 
16
- Fastlane::Actions::PushToGitRemoteAction.run(
17
- remote: params[:remote],
18
- local_branch: params[:local_branch],
19
- remote_branch: params[:remote_branch],
20
- force: params[:force],
21
- tags: params[:tags]
22
- )
23
-
24
- return version_and_build_no
16
+ Fastlane::Actions::PushToGitRemoteAction.run(
17
+ remote: params[:remote],
18
+ local_branch: params[:local_branch],
19
+ remote_branch: params[:remote_branch],
20
+ force: params[:force],
21
+ tags: params[:tags]
22
+ )
25
23
 
24
+ return version_and_build_no
26
25
  end
27
26
 
28
27
  #####################################################
@@ -98,7 +97,7 @@ FastlaneCore::ConfigItem.new(key: :pathToConfigXML,
98
97
 
99
98
  def self.authors
100
99
  # So no one will ever forget your contribution to fastlane :) You are awesome btw!
101
- ["Your GitHub/Twitter Name"]
100
+ ["garygrossgarten"]
102
101
  end
103
102
 
104
103
  def self.is_supported?(platform)
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module FivethreeIonic
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-fivethree_ionic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marc Stammerjohann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-21 00:00:00.000000000 Z
11
+ date: 2020-02-11 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.102.0
139
139
  description:
140
- email: marcstammerjohann@web.de
140
+ email: marc@fivethree.io
141
141
  executables: []
142
142
  extensions: []
143
143
  extra_rdoc_files: []
@@ -146,14 +146,15 @@ files:
146
146
  - README.md
147
147
  - lib/fastlane/plugin/fivethree_ionic.rb
148
148
  - lib/fastlane/plugin/fivethree_ionic/actions/fiv_add_transparent_statusbar.rb
149
- - lib/fastlane/plugin/fivethree_ionic/actions/fiv_android_keystore_action.rb
149
+ - lib/fastlane/plugin/fivethree_ionic/actions/fiv_android_keystore.rb
150
150
  - lib/fastlane/plugin/fivethree_ionic/actions/fiv_build_ionic_android.rb
151
151
  - lib/fastlane/plugin/fivethree_ionic/actions/fiv_bump_version.rb
152
152
  - lib/fastlane/plugin/fivethree_ionic/actions/fiv_clean_install.rb
153
153
  - lib/fastlane/plugin/fivethree_ionic/actions/fiv_increment_build_no.rb
154
154
  - lib/fastlane/plugin/fivethree_ionic/actions/fiv_ionic.rb
155
- - lib/fastlane/plugin/fivethree_ionic/actions/fiv_select_branding.rb
156
- - lib/fastlane/plugin/fivethree_ionic/actions/fiv_select_brandings.rb
155
+ - lib/fastlane/plugin/fivethree_ionic/actions/fiv_select_client.rb
156
+ - lib/fastlane/plugin/fivethree_ionic/actions/fiv_select_clients.rb
157
+ - lib/fastlane/plugin/fivethree_ionic/actions/fiv_select_env.rb
157
158
  - lib/fastlane/plugin/fivethree_ionic/actions/fiv_sign_android.rb
158
159
  - lib/fastlane/plugin/fivethree_ionic/actions/fiv_take_screenshots.rb
159
160
  - lib/fastlane/plugin/fivethree_ionic/actions/fiv_update_version.rb
@@ -180,8 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
181
  - !ruby/object:Gem::Version
181
182
  version: '0'
182
183
  requirements: []
183
- rubyforge_project:
184
- rubygems_version: 2.5.2.3
184
+ rubygems_version: 3.0.3
185
185
  signing_key:
186
186
  specification_version: 4
187
187
  summary: Fastlane plugin for Ionic v4 Projects
@@ -1,129 +0,0 @@
1
- module Fastlane
2
- module Actions
3
- module SharedValues
4
- ANDROID_KEYSTORE_KEYSTORE_PATH = :ANDROID_KEYSTORE_KEYSTORE_PATH
5
- ANDROID_KEYSTORE_RELEASE_SIGNING_PATH = :ANDROID_KEYSTORE_RELEASE_SIGNING_PATH
6
- end
7
-
8
- class FivAndroidKeystoreAction < Action
9
- def self.run(params)
10
-
11
- output_directory = params[:output_directory]
12
- keystore_name = params[:keystore_name]
13
- keystore_path = File.join(output_directory, keystore_name) + '.keystore'
14
-
15
- # Validating output doesn't exist yet for our android signing info
16
- if File.directory?(output_directory)
17
- if File.exists?(keystore_path)
18
- return keystore_path
19
- end
20
- else
21
- UI.message "android keystore doesnt exist yet. creating one for you..."
22
- Dir.mkdir output_directory
23
- end
24
-
25
-
26
- puts "Please enter the keystore password for new keystore:"
27
- keychain_entry = CredentialsManager::AccountManager.new(user: "#{keystore_name}_android_keystore_storepass")
28
- password = keychain_entry.password
29
-
30
- puts "Please enter the keystore password for new keystore:"
31
- keypass_entry = CredentialsManager::AccountManager.new(user: "#{keystore_name}_android_keystore_keypass")
32
- key_password = keypass_entry.password
33
-
34
- alias_name = Fastlane::Actions::PromptAction.run(text:"Enter kexystore alias")
35
-
36
-
37
- full_name = Fastlane::Actions::PromptAction.run(text:"Enter kexystore full name")
38
- org = Fastlane::Actions::PromptAction.run(text:"Enter kexystore org")
39
- org_unit = Fastlane::Actions::PromptAction.run(text:"Enter kexystore org unit")
40
- city_locality = Fastlane::Actions::PromptAction.run(text:"Enter city")
41
- state_province = Fastlane::Actions::PromptAction.run(text:"Enter state")
42
- country = Fastlane::Actions::PromptAction.run(text:"country")
43
-
44
- Actions.lane_context[SharedValues::ANDROID_KEYSTORE_KEYSTORE_PATH] = keystore_path
45
-
46
- # Create keystore with command
47
- unless File.file?(keystore_path)
48
- keytool_parts = [
49
- "keytool -genkey -v",
50
- "-keystore #{keystore_path}",
51
- "-alias #{alias_name}",
52
- "-keyalg RSA -keysize 2048 -validity 10000",
53
- "-storepass #{password} ",
54
- "-keypass #{key_password}",
55
- "-dname \"CN=#{full_name}, OU=#{org_unit}, O=#{org}, L=#{city_locality}, S=#{state_province}, C=#{country}\"",
56
- ]
57
- sh keytool_parts.join(" ")
58
- else
59
- UI.message "Keystore file already exists - #{keystore_path}"
60
- end
61
-
62
- # Create release-signing.properties for automatic signing with Ionic
63
-
64
- release_signing_path = File.join(output_directory, "release-signing.properties")
65
- Actions.lane_context[SharedValues::ANDROID_KEYSTORE_RELEASE_SIGNING_PATH] = release_signing_path
66
-
67
- unless File.file?(release_signing_path)
68
- out_file = File.new(release_signing_path, "w")
69
- out_file.puts("storeFile=#{keystore_name}")
70
- out_file.puts("storePassword=#{password}")
71
- out_file.puts("keyAlias=#{alias_name}")
72
- out_file.puts("keyPassword=#{key_password}")
73
- out_file.close
74
- else
75
- UI.message "release-signing.properties file already exists - #{release_signing_path}"
76
- end
77
-
78
- return keystore_path
79
- end
80
-
81
- #####################################################
82
- # @!group Documentation
83
- #####################################################
84
-
85
- def self.description
86
- "Generate an Android keystore file"
87
- end
88
-
89
- def self.details
90
- "Generate an Android keystore file"
91
- end
92
-
93
- def self.available_options
94
- [
95
- FastlaneCore::ConfigItem.new(key: :output_directory,
96
- env_name: "ANDROID_KEYSTORE_OUTPUT_DIRECTORY",
97
- description: "",
98
- is_string: true,
99
- optional: false,
100
- default_value: File.absolute_path(File.join(Dir.pwd, ".android_signing"))),
101
- FastlaneCore::ConfigItem.new(key: :keystore_name,
102
- env_name: "ANDROID_KEYSTORE_KEYSTORE_NAME",
103
- description: "",
104
- is_string: true,
105
- optional: false)
106
- ]
107
- end
108
-
109
- def self.output
110
- [
111
- ['ANDROID_KEYSTORE_KEYSTORE_PATH', 'Path to keystore'],
112
- ['ANDROID_KEYSTORE_RELEASE_SIGNING_PATH', 'Path to release-signing.properties']
113
- ]
114
- end
115
-
116
- def self.return_value
117
- "Path to keystore"
118
- end
119
-
120
- def self.authors
121
- ["fivethree"]
122
- end
123
-
124
- def self.is_supported?(platform)
125
- platform == :android
126
- end
127
- end
128
- end
129
- end
@@ -1,91 +0,0 @@
1
- module Fastlane
2
- module Actions
3
- module SharedValues
4
- FIV_SELECTED_BRANDING_KEY = :FIV_SELECTED_BRANDING_KEY
5
- FIV_SELECTED_BRANDING_PATH = :FIV_SELECTED_BRANDING_PATH
6
- end
7
-
8
- class FivSelectBrandingAction < Action
9
- def self.run(params)
10
- Dir.chdir "#{params[:branding_folder]}" do
11
- branding_folders = Dir.glob('*').select {|f| File.directory? f}
12
- selected_branding_key = UI.select("Select one branding: ", branding_folders)
13
-
14
- puts "
15
- ***********************************************
16
- Selected branding key = #{selected_branding_key}
17
- ***********************************************
18
- "
19
-
20
- ENV['FIV_SELECTED_BRANDING_KEY'] = selected_branding_key
21
- ENV['FIV_SELECTED_BRANDING_PATH'] = "#{params[:branding_folder]}/#{selected_branding_key}"
22
-
23
- return selected_branding_key
24
- end
25
- end
26
-
27
- #####################################################
28
- # @!group Documentation
29
- #####################################################
30
-
31
- def self.description
32
- "Action lets the user select one branding key from a folder"
33
- end
34
-
35
- def self.details
36
- # Optional:
37
- # this is your chance to provide a more detailed description of this action
38
- "For whitelabel programming it is very helpful to extract all assets into a `brandings` folder.
39
- This actions helps to select one branding key which can further be used to copy assets, build application or more."
40
- end
41
-
42
- def self.available_options
43
- # Define all options your action supports.
44
-
45
- # Below a few examples
46
- [
47
- FastlaneCore::ConfigItem.new(key: :branding_folder,
48
- env_name: "FIV_SELECT_BRANDING_API_TOKEN", # The name of the environment variable
49
- description: "Branding folder path for FivSelectBrandingAction", # a short description of this parameter
50
- default_value: "brandings",
51
- is_string: true,
52
- verify_block: proc do |value|
53
- UI.user_error!("No branding folder path for FivSelectBrandingAction given, pass using `branding_folder: '../path_to_branding_folder'`") unless (value and not value.empty?)
54
- UI.user_error!("Couldn't find branding folder at path '#{value}'") unless File.directory?(value)
55
- end)
56
- ]
57
- end
58
-
59
- def self.output
60
- # Define the shared values you are going to provide
61
- # Example
62
- [
63
- ['FIV_SELECTED_BRANDING_KEY', 'Selected branding key'],
64
- ['FIV_SELECTED_BRANDING_PATH', 'Selected branding path']
65
- ]
66
- end
67
-
68
- def self.return_value
69
- # If your method provides a return value, you can describe here what it does
70
- end
71
-
72
- def self.authors
73
- # So no one will ever forget your contribution to fastlane :) You are awesome btw!
74
- ["marcjulian"]
75
- end
76
-
77
- def self.is_supported?(platform)
78
- # you can do things like
79
- #
80
- # true
81
- #
82
- # platform == :ios
83
- #
84
- # [:ios, :mac].include?(platform)
85
- #
86
-
87
- true
88
- end
89
- end
90
- end
91
- end
@@ -1,106 +0,0 @@
1
- module Fastlane
2
- module Actions
3
- module SharedValues
4
- FIV_SELECT_BRANDING_KEYS = :FIV_SELECT_BRANDING_KEYS
5
- end
6
-
7
- class FivSelectBrandingsAction < Action
8
- def self.run(params)
9
- branding_keys = []
10
-
11
- if (ENV["SELECTED_BRANDING"])
12
- # If comma separated branding array is specified via console parameter
13
- ENV["SELECTED_BRANDING"].split(",").each {|branding| branding_keys.push(branding)}
14
- else
15
- puts "
16
- ***********************************************************************
17
- You can also specify one or more brandings via command line parameter
18
- e.g. 'brandings:branding1'
19
- ***********************************************************************
20
- "
21
- Dir.chdir "#{params[:branding_folder]}" do
22
- branding_folders = Dir.glob('*').select {|f| File.directory? f}
23
- branding_folders.unshift("ALL")
24
- selected_branding_key = UI.select("Select branding: ", branding_folders)
25
-
26
- if (selected_branding_key == "ALL")
27
- branding_folders.shift # remove "ALL" entry
28
- branding_keys = branding_folders
29
- else
30
- selected_branding_key.split(",").each {|branding| branding_keys.push(branding)}
31
- end
32
- end
33
- end
34
-
35
- puts "
36
- ***********************************************
37
- Selected branding keys = #{branding_keys}
38
- ***********************************************
39
- "
40
-
41
- return branding_keys
42
- end
43
-
44
- #####################################################
45
- # @!group Documentation
46
- #####################################################
47
-
48
- def self.description
49
- "A short description with <= 80 characters of what this action does"
50
- end
51
-
52
- def self.details
53
- # Optional:
54
- # this is your chance to provide a more detailed description of this action
55
- "You can use this action to do cool things..."
56
- end
57
-
58
- def self.available_options
59
- # Define all options your action supports.
60
-
61
- # Below a few examples
62
- [
63
- FastlaneCore::ConfigItem.new(key: :branding_folder,
64
- env_name: "FIV_SELECT_BRANDING_FOLDER", # The name of the environment variable
65
- description: "Branding folder path for FivSelectBrandingsAction", # a short description of this parameter
66
- default_value: "brandings",
67
- is_string: true,
68
- verify_block: proc do |value|
69
- UI.user_error!("No branding folder path for FivSelectBrandingAction given, pass using `branding_folder: '../path_to_branding_folder'`") unless (value and not value.empty?)
70
- UI.user_error!("Couldn't find branding folder at path '#{value}'") unless File.directory?(value)
71
- end)
72
- ]
73
- end
74
-
75
- def self.output
76
- # Define the shared values you are going to provide
77
- # Example
78
- [
79
- ['FIV_SELECT_BRANDING_KEYS', 'A description of what this value contains']
80
- ]
81
- end
82
-
83
- def self.return_value
84
- # If your method provides a return value, you can describe here what it does
85
- end
86
-
87
- def self.authors
88
- # So no one will ever forget your contribution to fastlane :) You are awesome btw!
89
- ["marcjulian"]
90
- end
91
-
92
- def self.is_supported?(platform)
93
- # you can do things like
94
- #
95
- # true
96
- #
97
- # platform == :ios
98
- #
99
- # [:ios, :mac].include?(platform)
100
- #
101
-
102
- true
103
- end
104
- end
105
- end
106
- end