Class: Fastlane::Actions::AddAppVarAction

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

Documentation collapse

Class Method Summary collapse

Class Method Details

.app_key_for(namespace) ⇒ Object

Returns the app key for cryptex. optionally namespaced



97
98
99
100
101
102
# File 'lib/fastlane/plugin/react_native_release/actions/add_app_var.rb', line 97

def self.app_key_for(namespace)
  default_app_key = Helper::ReactNativeReleaseHelper::APP_CRYPTEX_KEY 
  return default_app_key if namespace.strip.empty?

  "#{namespace}_#{default_app_key}"
end

.authorsObject



81
82
83
84
# File 'lib/fastlane/plugin/react_native_release/actions/add_app_var.rb', line 81

def self.authors
  # So no one will ever forget your contribution to fastlane :) You are awesome btw!
  ["cball", "isaiahgrey93"]
end

.available_optionsObject



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/fastlane/plugin/react_native_release/actions/add_app_var.rb', line 50

def self.available_options
  [
    FastlaneCore::ConfigItem.new(key: :namespace,
                                 env_name: "FL_ADD_APP_VAR_NAMESPACE",
                                 description: "What namespace should we use? (alpha, beta, release, ENTER = root)", # a short description of this parameter
                                 type: String,
                                 verify_block: lambda do |value|
                                  unless Helper::ReactNativeReleaseHelper::VALID_NAMESPACES.include?(value)
                                    UI.user_error!("Invalid namespace #{value}. Valid targets are #{Helper::ReactNativeReleaseHelper::VALID_NAMESPACES.join(', ')}") 
                                    next
                                  end
                                end),
    FastlaneCore::ConfigItem.new(key: :key,
                                 env_name: "FL_ADD_APP_VAR_KEY",
                                 description: "Enter the ENV name",
                                 type: String),
    FastlaneCore::ConfigItem.new(key: :value,
                                 env_name: "FL_ADD_APP_VAR_VALUE",
                                 description: "Enter the ENV value",
                                 type: String),
  ]
end

.default_env_pathObject



104
105
106
# File 'lib/fastlane/plugin/react_native_release/actions/add_app_var.rb', line 104

def self.default_env_path
  Helper::ReactNativeReleaseHelper::APP_ENV_PATH
end

.descriptionObject



41
42
43
# File 'lib/fastlane/plugin/react_native_release/actions/add_app_var.rb', line 41

def self.description
  "Adds a single ENV var to the encrypted repository"
end

.detailsObject



45
46
47
48
# File 'lib/fastlane/plugin/react_native_release/actions/add_app_var.rb', line 45

def self.details
  # Optional:
  # this is your chance to provide a more detailed description of this action
end

.env_path_for(namespace) ⇒ Object

Returns a path for an env var. optionally namespaced



91
92
93
94
# File 'lib/fastlane/plugin/react_native_release/actions/add_app_var.rb', line 91

def self.env_path_for(namespace)
  return default_env_path if namespace.strip.empty?
  "#{default_env_path}.#{namespace}"
end

.is_supported?(platform) ⇒ Boolean

Returns:

  • (Boolean)


86
87
88
# File 'lib/fastlane/plugin/react_native_release/actions/add_app_var.rb', line 86

def self.is_supported?(platform)
  [:ios, :android].include?(platform)
end

.return_valueObject



73
74
75
# File 'lib/fastlane/plugin/react_native_release/actions/add_app_var.rb', line 73

def self.return_value
  # If your method provides a return value, you can describe here what it does
end

.run(params) ⇒ Object



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
# File 'lib/fastlane/plugin/react_native_release/actions/add_app_var.rb', line 7

def self.run(params)
  is_ci = ENV['CI'] === 'true'
  namespace = params[:namespace]
  key = params[:key]
  value = params[:value]
  cryptex_app_key = app_key_for(namespace)
  existing_app_vars = {}

  if !is_ci && !UI.confirm("This will add #{key}=#{value} to the #{cryptex_app_key} namespace in the encrypted context repo. Proceed?")
    UI.abort_with_message!("Stepping away...")
  end

  begin
    existing_app_vars = other_action.cryptex(
      type: 'export_env',
      key: cryptex_app_key,
    )
  rescue => ex
    # If key doesn't exist cryptex will error
  end

  other_action.cryptex(
    type: "import_env",
    key: cryptex_app_key,
    hash: existing_app_vars.merge({ key => value })
  )

  UI.success('Encrypted app ENV vars')
end