Class: Fastlane::Actions::FivAndroidKeystoreAction

Inherits:
Action
  • Object
show all
Defined in:
lib/fastlane/plugin/fivethree_ionic/actions/fiv_android_keystore.rb

Documentation collapse

Class Method Summary collapse

Class Method Details

.authorsObject



144
145
146
# File 'lib/fastlane/plugin/fivethree_ionic/actions/fiv_android_keystore.rb', line 144

def self.authors
  %w[fivethree]
end

.available_optionsObject



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/fastlane/plugin/fivethree_ionic/actions/fiv_android_keystore.rb', line 104

def self.available_options
  [
    FastlaneCore::ConfigItem.new(
      key: :keystore_path,
      env_name: 'FIV_KEYSTORE_PATH',
      description: 'Path to android keystore',
      is_string: true,
      default_value: './fastlane/android'
    ),
    FastlaneCore::ConfigItem.new(
      key: :keystore_name,
      env_name: 'FIV_KEYSTORE_NAME',
      description: 'Name of the keystore',
      is_string: true,
      optional: false
    ),
    FastlaneCore::ConfigItem.new(
      key: :key_alias,
      env_name: 'FIV_ANDROID_KEYSTORE_ALIAS',
      description: 'Key alias of the keystore',
      is_string: true,
      optional: false
    )
  ]
end

.descriptionObject



96
97
98
# File 'lib/fastlane/plugin/fivethree_ionic/actions/fiv_android_keystore.rb', line 96

def self.description
  'Generate an Android keystore file or validate keystore exists'
end

.detailsObject



100
101
102
# File 'lib/fastlane/plugin/fivethree_ionic/actions/fiv_android_keystore.rb', line 100

def self.details
  'Generate an Android keystore file or validate keystore exists'
end

.is_supported?(platform) ⇒ Boolean

Returns:

  • (Boolean)


148
149
150
# File 'lib/fastlane/plugin/fivethree_ionic/actions/fiv_android_keystore.rb', line 148

def self.is_supported?(platform)
  platform == :android
end

.outputObject



130
131
132
133
134
135
136
137
138
# File 'lib/fastlane/plugin/fivethree_ionic/actions/fiv_android_keystore.rb', line 130

def self.output
  [
    ['ANDROID_KEYSTORE_KEYSTORE_PATH', 'Path to keystore'],
    [
      'ANDROID_KEYSTORE_RELEASE_SIGNING_PATH',
      'Path to release-signing.properties'
    ]
  ]
end

.return_valueObject



140
141
142
# File 'lib/fastlane/plugin/fivethree_ionic/actions/fiv_android_keystore.rb', line 140

def self.return_value
  'Path to keystore'
end

.run(params) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/fastlane/plugin/fivethree_ionic/actions/fiv_android_keystore.rb', line 4

def self.run(params)
  keystore_path = params[:keystore_path]
  keystore_name = params[:keystore_name]
  keystore_file = File.join(keystore_path, keystore_name) + '.keystore'

  # Validating output doesn't exist yet for our android signing info
  if File.directory?(keystore_path)
    return keystore_file if File.exists?(keystore_file)
  else
    UI.message 'android keystore doesnt exist yet. creating one for you...'
    Dir.mkdir keystore_path
  end

  puts 'Please enter the keystore password for new keystore with atleast 6 characters:'
  keychain_entry =
    CredentialsManager::AccountManager.new(
      user: "#{keystore_name}_android_keystore_storepass"
    )
  password = keychain_entry.password

  puts 'Please enter the keystore password for new keystore atleast 6 characters:'
  keypass_entry =
    CredentialsManager::AccountManager.new(
      user: "#{keystore_name}_android_keystore_keypass"
    )
  key_password = keypass_entry.password

  alias_name = params[:key_alias]
  puts "Keystore alias #{alias_name}"

  full_name =
    Fastlane::Actions::PromptAction.run(text: 'Enter kexystore full name')
  org = Fastlane::Actions::PromptAction.run(text: 'Enter kexystore org')
  org_unit =
    Fastlane::Actions::PromptAction.run(text: 'Enter kexystore org unit')
  city_locality = Fastlane::Actions::PromptAction.run(text: 'Enter city')
  state_province =
    Fastlane::Actions::PromptAction.run(text: 'Enter state')
  country = Fastlane::Actions::PromptAction.run(text: 'country')

  # Create keystore with command
  unless File.file?(keystore_file)
    keytool =
      "keytool -genkey -v \
        -keystore #{
        keystore_file
      } \
        -alias #{
        alias_name
      } \
        -keyalg RSA -keysize 2048 -validity 10000 \
        -storepass #{
        password
      } \
        -keypass #{
        key_password
      } \
        -dname \"CN=#{full_name}, OU=#{org_unit}, O=#{
        org
      }, L=#{city_locality}, S=#{state_province}, C=#{
        country
      }\"
      "
    sh keytool
  else
    UI.message "Keystore file already exists - #{keystore_file}"
  end

  # Create release-signing.properties for automatic signing with Ionic
  release_signing_path =
    File.join(keystore_path, 'release-signing.properties')

  unless File.file?(release_signing_path)
    out_file = File.new(release_signing_path, 'w')
    out_file.puts("storeFile=#{keystore_name}")
    out_file.puts("storePassword=#{password}")
    out_file.puts("keyAlias=#{alias_name}")
    out_file.puts("keyPassword=#{key_password}")
    out_file.close
  else
    UI.message "release-signing.properties file already exists - #{
                 release_signing_path
               }"
  end

  return keystore_file
end