fastlane-plugin-react_native_release 0.3.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +120 -41
- data/lib/fastlane/plugin/react_native_release/actions/accept_android_sdk_licenses.rb +46 -0
- data/lib/fastlane/plugin/react_native_release/actions/add_app_var.rb +107 -0
- data/lib/fastlane/plugin/react_native_release/actions/add_fastlane_var.rb +99 -0
- data/lib/fastlane/plugin/react_native_release/actions/create_changelog.rb +92 -0
- data/lib/fastlane/plugin/react_native_release/actions/create_fastlane_session.rb +75 -0
- data/lib/fastlane/plugin/react_native_release/actions/decrypt_android_keystore.rb +131 -0
- data/lib/fastlane/plugin/react_native_release/actions/decrypt_app_vars.rb +117 -0
- data/lib/fastlane/plugin/react_native_release/actions/decrypt_fastlane_vars.rb +101 -0
- data/lib/fastlane/plugin/react_native_release/actions/decrypt_google_play_credentials.rb +62 -0
- data/lib/fastlane/plugin/react_native_release/actions/determine_release_from_commits.rb +61 -0
- data/lib/fastlane/plugin/react_native_release/actions/encrypt_app_vars.rb +121 -0
- data/lib/fastlane/plugin/react_native_release/actions/encrypt_fastlane_vars.rb +76 -0
- data/lib/fastlane/plugin/react_native_release/actions/encrypt_google_play_credentials.rb +64 -0
- data/lib/fastlane/plugin/react_native_release/actions/generate_android_keystore.rb +137 -0
- data/lib/fastlane/plugin/react_native_release/actions/{react_native_release_action.rb → react_native_release.rb} +35 -66
- data/lib/fastlane/plugin/react_native_release/actions/read_fastlane_session.rb +55 -0
- data/lib/fastlane/plugin/react_native_release/actions/tag_release.rb +65 -0
- data/lib/fastlane/plugin/react_native_release/helper/react_native_release_helper.rb +14 -5
- data/lib/fastlane/plugin/react_native_release/version.rb +1 -1
- metadata +20 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b8d333b98e735533f90b2cb2e443f0565756066be831850f3a981b6c4522228
|
4
|
+
data.tar.gz: b5ed1dda7f25ce3804805f150b871db2eaa90178b6c3c0bb1bbb8f812f0d406f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8ee11d162d5ef17168b9d39e882bbc5018036082cf9d4b70b090e66cd568183e620ec1eb7735c01275f9bd1d7a3c35d534dd9472c86fc55d8b4728d355d230c
|
7
|
+
data.tar.gz: 84658b6da50fa4f8bd13eb471201a611068874091891bf864106739314338db646d1cde5719fc8d0c8ba36e229b84953d0a097b2fd4b8dd3b8bf2a27582cfc6c
|
data/README.md
CHANGED
@@ -1,80 +1,159 @@
|
|
1
|
-
# React Native Release
|
1
|
+
# React Native Release
|
2
2
|
|
3
3
|
[![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-react_native_release)
|
4
4
|
|
5
|
-
|
5
|
+
Simplify releases for your React Native apps. This plugin contains many actions to help you with your release workflow.
|
6
6
|
|
7
|
-
|
7
|
+
It helps cut a new `beta` or `release` version of your app:
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
- Authenticates and stores an encrypted App Store Connect session that is later used for TestFlight and App Store operations
|
10
|
+
- Prompts the user for a `major/minor/patch` version bump
|
11
|
+
- Bumps the version of the iOS and Android app appropriately
|
12
|
+
- Creates a tag
|
13
|
+
- Handles hotfix releases
|
14
|
+
- Handles merging version bumps and hotfixes back to the appropriate branches
|
15
|
+
|
16
|
+
It encrypts, and on CI, decrypts values from a standalone "context" git repository:
|
17
|
+
|
18
|
+
- Android keystore file (including helping you generate one)
|
19
|
+
- Google Play Credentials to upload to the Play Store
|
20
|
+
- Fastlane config ENV variables
|
21
|
+
- App ENV variables (API_URL, feature flags, etc)
|
22
|
+
|
23
|
+
### Philosophies
|
24
|
+
|
25
|
+
**Use Fastlane Match**
|
26
|
+
|
27
|
+
Certificates and provisioning profiles should be created and managed by Fastlane Match
|
28
|
+
|
29
|
+
**Builds Run on CI**
|
30
|
+
|
31
|
+
We support local builds for projects, but they should only be used in emergency situations.
|
32
|
+
|
33
|
+
**CI uses a machine user**
|
34
|
+
|
35
|
+
This is a best practice.
|
36
|
+
|
37
|
+
**ENV vars are managed through React Native Release**
|
38
|
+
|
39
|
+
We do this for portability and ease of configuration. Outside of the ENV vars to configure CRYPTEX, you shouldn't have to add ENV vars to CI.
|
40
|
+
|
41
|
+
For App ENV vars, we provide some additional functionality via namespaces. Valid namespaces are `alpha`, `beta`, `release`, and empty (root). Root ENV vars are "global". Namespaced variables are merged into the Root ENV vars at build time via the `decrypt_app_vars` action. This allows you to easily overwrite ENV vars for specific types of builds, all without configuring separate targets and schemes in XCode.
|
42
|
+
|
43
|
+
The main branch and tagging flow looks like this (note this may be out of date. Revisit after workflow updates):
|
44
|
+
|
45
|
+
![Branch / Tag Flow](https://monosnap.com/image/Tn71leeWdCwwjSdwjYKHK4pnyjG1v4.png)
|
46
|
+
|
47
|
+
If a hotfix is required the flow looks like this (note this may be out of date. Revisit after workflow updates):
|
48
|
+
|
49
|
+
![Hotfix Flow](https://monosnap.com/image/ctwlef0A3TbLbRk1xJrlVroNB8F9ot.png)
|
50
|
+
|
51
|
+
Here's what it looks like in action:
|
52
|
+
![Releasing a beta](https://api.monosnap.com/image/download?id=IEISpG4vgMeGPl31it8GxPbiTror2i)
|
53
|
+
(this example uses `"release": "bundle exec fastlane run react_native_release"` as a yarn script)e
|
54
|
+
|
55
|
+
## Prerequisites
|
12
56
|
|
13
57
|
### Ensure your project confirms to Semantic Versioning
|
58
|
+
|
14
59
|
Projects using React Native Release should use Semantic Versioning. At the very least, you need major, minor, and patch numbers in your version.
|
15
60
|
|
16
61
|
**iOS**
|
17
62
|
Use `agvtool` to get and set a version across your project. From the `ios` directory, do the following:
|
18
|
-
|
19
|
-
|
63
|
+
|
64
|
+
- `agvtool what-marketing-version` to see your current version
|
65
|
+
- `agvtool new-marketing-version 0.1.0` to set a new version
|
20
66
|
|
21
67
|
**Android**
|
22
|
-
|
68
|
+
|
69
|
+
- Set `versionName` in `app/build.gradle`. (`versionName "0.1.0"`)
|
23
70
|
|
24
71
|
:exclamation: If you don't complete these steps, releases will fail. :exclamation:
|
25
72
|
|
26
|
-
|
73
|
+
## Installation
|
74
|
+
|
75
|
+
This project is a [_fastlane_](https://github.com/fastlane/fastlane) plugin. Since React Native projects contain both `iOS` and `Android` apps, we need to install the plugin in multiple places:
|
76
|
+
|
77
|
+
### Install plugin into fastlane folders
|
78
|
+
|
79
|
+
1. In the root of your project. This is used to run release commands over the entire project.
|
80
|
+
|
81
|
+
```bash
|
82
|
+
fastlane add_plugin react_native_release
|
83
|
+
```
|
84
|
+
|
85
|
+
2. In `./android/fastlane`
|
86
|
+
|
87
|
+
```bash
|
88
|
+
fastlane add_plugin react_native_release
|
89
|
+
```
|
27
90
|
|
28
|
-
|
91
|
+
3. In `./ios/fastlane`
|
92
|
+
|
93
|
+
```bash
|
94
|
+
fastlane add_plugin react_native_release
|
95
|
+
```
|
29
96
|
|
30
|
-
|
97
|
+
### Add or update .env files
|
31
98
|
|
32
|
-
|
33
|
-
|-----|------|-------------|
|
34
|
-
| FASTLANE_ENV_GIT_URL | String | The repository where the hashed session token will be stored. **Ensure this repository before running the release script!** (Must be a separate repository solely for securely storing the session token). |
|
35
|
-
| FASTLANE_ENV_USERNAME | String | The Apple Developer Account email to authenticate with 2FA and generate a session token for. |
|
99
|
+
We leverage `.env` files in a number of different places.
|
36
100
|
|
37
|
-
|
101
|
+
`<root>/fastlane/.env`:
|
38
102
|
|
39
|
-
|
103
|
+
| KEY | TYPE | DESCRIPTION |
|
104
|
+
| ----------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
105
|
+
| CRYPTEX_GIT_URL | String | The repository where the hashed session token will be stored. **Ensure this repository before running the release script!** (You can leverage the same repository you use for Fastlane Match) |
|
106
|
+
| CRYPTEX_PASSWORD | String | The secret key used to encrypt/decrypt the `FASTLANE_SESSION` value. |
|
107
|
+
| CRYPTEX_SKIP_DOCS | Boolean | Force the underlying encryption plugin to skip README generation. |
|
40
108
|
|
41
|
-
|
109
|
+
`<root>/android/fastlane/.env`:
|
42
110
|
|
43
|
-
|
111
|
+
| KEY | TYPE | DESCRIPTION |
|
112
|
+
| -------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
113
|
+
| ANDROID_KEY_PASSWORD | String | The password generated from `generate_android_keystore` or a manual keystore command.` |
|
114
|
+
| ANDROID_KEY_ALIAS | String | The alias for the keystore |
|
115
|
+
| CRYPTEX_GIT_URL | String | The repository where the hashed session token will be stored. **Ensure this repository before running the release script!** (You can leverage the same repository you use for Fastlane Match) |
|
116
|
+
| CRYPTEX_PASSWORD | String | The secret key used to encrypt/decrypt the `FASTLANE_SESSION` value. |
|
117
|
+
| CRYPTEX_SKIP_DOCS | Boolean | Force the underlying encryption plugin to skip README generation. |
|
44
118
|
|
45
|
-
|
119
|
+
`<root>/ios/fastlane/.env`:
|
46
120
|
|
47
|
-
|
121
|
+
| KEY | TYPE | DESCRIPTION |
|
122
|
+
| ----------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
123
|
+
| MATCH_GIT_URL | String | The repository used for Fastlane match. Typically the same as CRYPTEX_GIT_URL |
|
124
|
+
| MATCH_PASSWORD | String | The password used to encrypt / decrypt Fastlane Match certs and profiles |
|
125
|
+
| GYM_WORKSPACE | String | The name of the workspace file (Myproject.xcworkspace) |
|
126
|
+
| GYM_SCHEME | String | The scheme to build within the workspace (Myproject) |
|
127
|
+
| GYM_OUTPUT_NAME | String | The name of the `.ipa` file to output (Myproject) |
|
128
|
+
| CRYPTEX_GIT_URL | String | The repository where the hashed session token will be stored. **Ensure this repository before running the release script!** (You can leverage the same repository you use for Fastlane Match) |
|
129
|
+
| CRYPTEX_PASSWORD | String | The secret key used to encrypt/decrypt the `FASTLANE_SESSION` value. |
|
130
|
+
| CRYPTEX_SKIP_DOCS | Boolean | Force the underlying encryption plugin to skip README generation. |
|
48
131
|
|
132
|
+
**Note: In followup releases, we will add a `react-native-release init` script to generate these for you.**
|
49
133
|
|
50
|
-
|
134
|
+
### Setup CI
|
51
135
|
|
52
|
-
|
136
|
+
Step 1. If you've already setup Fastlane Match, skip this section. Each provider is different, but conceptually you'll want to:
|
53
137
|
|
54
|
-
|
138
|
+
- Create a machine user account on your source code provider (GitHub or BitBucket) and invite that account to both the mobile and certs repo.
|
139
|
+
- Enable CI on the main mobile repository by pressing "Follow" or "Build"
|
140
|
+
- In an Incognito tab, log into your CI provider with the machine user account.
|
141
|
+
- Add a user key instead of the default deploy key. This will allow CI to auth as the machine user and gain access to _both_ the mobile repo and the context repo.
|
55
142
|
|
56
|
-
|
57
|
-
- prompts the user for a `major/minor/patch` version bump
|
58
|
-
- bumps the version of the iOS and Android app appropriately
|
59
|
-
- tags a release based on the iOS and Android version
|
60
|
-
- handles hotfix releases
|
61
|
-
- handles merging version bumps and hotfixes back to the appropriate branches
|
143
|
+
Step 2. Add the following to your CI environment variables:
|
62
144
|
|
63
|
-
|
64
|
-
|
145
|
+
- CRYPTEX_GIT_URL=(your context repo ssh git url)
|
146
|
+
- CRYPTEX_PASSWORD=(your context repo password)
|
147
|
+
- CRYPTEX_VERBOSE=true
|
148
|
+
- CRYPTEX_DIGEST=sha256 (note: if you have a pre-existing setup, you should set this to md5 - see https://github.com/hjanuschka/fastlane-plugin-cryptex/pull/10)
|
65
149
|
|
66
|
-
|
67
|
-
![Hotfix Flow](https://monosnap.com/image/ctwlef0A3TbLbRk1xJrlVroNB8F9ot.png)
|
150
|
+
### Configuring builds to upload to TestFlight and AppStore Connect on CI
|
68
151
|
|
69
|
-
|
70
|
-
![Releasing a beta](https://api.monosnap.com/image/download?id=IEISpG4vgMeGPl31it8GxPbiTror2i)
|
71
|
-
(this example uses `"release": "bundle exec fastlane run react_native_release"` as a yarn script)
|
152
|
+
To upload builds to TestFlight or AppStore Connect, CI will need to restore a previously generated session. While possible to use an Application Specific Password to upload builds, it will not have the additional permissions required for other TestFlight / App Store operations. As such, we require generating a session.
|
72
153
|
|
73
154
|
## Example
|
74
155
|
|
75
|
-
|
76
|
-
|
77
|
-
**Note to author:** Please set up a sample project to make it easy for users to explore what your plugin does. Provide everything that is necessary to try out the plugin in this project (including a sample Xcode/Android project if necessary)
|
156
|
+
See /example to see how to use the plugin. (TODO)
|
78
157
|
|
79
158
|
## Run tests for this plugin
|
80
159
|
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'fastlane/action'
|
2
|
+
require 'fastlane/plugin/cryptex'
|
3
|
+
|
4
|
+
module Fastlane
|
5
|
+
module Actions
|
6
|
+
class AcceptAndroidSdkLicensesAction < Action
|
7
|
+
def self.run(params)
|
8
|
+
sh("yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses || if [ $? -ne '141' ]; then exit $?; fi;")
|
9
|
+
end
|
10
|
+
|
11
|
+
#####################################################
|
12
|
+
# @!group Documentation
|
13
|
+
#####################################################
|
14
|
+
|
15
|
+
def self.description
|
16
|
+
"Accepts Android sdk licenses"
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.details
|
20
|
+
# Optional:
|
21
|
+
# this is your chance to provide a more detailed description of this action
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.available_options
|
25
|
+
[]
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.return_value
|
29
|
+
# If your method provides a return value, you can describe here what it does
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.details
|
33
|
+
# "Saves the current vars in android/fastlane/.env and ios/fastlane/.env"
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.authors
|
37
|
+
# So no one will ever forget your contribution to fastlane :) You are awesome btw!
|
38
|
+
["cball", "isaiahgrey93"]
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.is_supported?(platform)
|
42
|
+
[:ios, :android].include?(platform)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'fastlane/action'
|
2
|
+
require 'fastlane/plugin/cryptex'
|
3
|
+
|
4
|
+
module Fastlane
|
5
|
+
module Actions
|
6
|
+
class AddAppVarAction < Action
|
7
|
+
def self.run(params)
|
8
|
+
is_ci = ENV['CI'] === 'true'
|
9
|
+
namespace = params[:namespace]
|
10
|
+
key = params[:key]
|
11
|
+
value = params[:value]
|
12
|
+
skip_confirmation= params[:skip_confirmation]
|
13
|
+
cryptex_app_key = app_key_for(namespace)
|
14
|
+
existing_app_vars = {}
|
15
|
+
|
16
|
+
if !is_ci && !skip_confirmation && !UI.confirm("This will add #{key}=#{value} to the #{cryptex_app_key} namespace in the encrypted context repo. Proceed?")
|
17
|
+
UI.abort_with_message!("Stepping away...")
|
18
|
+
end
|
19
|
+
|
20
|
+
begin
|
21
|
+
existing_app_vars = other_action.cryptex(
|
22
|
+
type: 'export_env',
|
23
|
+
key: cryptex_app_key,
|
24
|
+
)
|
25
|
+
rescue => ex
|
26
|
+
# If key doesn't exist cryptex will error
|
27
|
+
end
|
28
|
+
|
29
|
+
other_action.cryptex(
|
30
|
+
type: "import_env",
|
31
|
+
key: cryptex_app_key,
|
32
|
+
hash: existing_app_vars.merge({ key => value })
|
33
|
+
)
|
34
|
+
|
35
|
+
UI.success('Encrypted app ENV vars')
|
36
|
+
end
|
37
|
+
|
38
|
+
#####################################################
|
39
|
+
# @!group Documentation
|
40
|
+
#####################################################
|
41
|
+
|
42
|
+
def self.description
|
43
|
+
"Adds a single ENV var to the encrypted repository"
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.details
|
47
|
+
# Optional:
|
48
|
+
# this is your chance to provide a more detailed description of this action
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.available_options
|
52
|
+
[
|
53
|
+
FastlaneCore::ConfigItem.new(key: :namespace,
|
54
|
+
env_name: "FL_ADD_APP_VAR_NAMESPACE",
|
55
|
+
description: "What namespace should we use? (alpha, beta, release, ENTER = root)", # a short description of this parameter
|
56
|
+
type: String,
|
57
|
+
verify_block: lambda do |value|
|
58
|
+
unless Helper::ReactNativeReleaseHelper::VALID_NAMESPACES.include?(value)
|
59
|
+
UI.user_error!("Invalid namespace #{value}. Valid targets are #{Helper::ReactNativeReleaseHelper::VALID_NAMESPACES.join(', ')}")
|
60
|
+
next
|
61
|
+
end
|
62
|
+
end),
|
63
|
+
FastlaneCore::ConfigItem.new(key: :key,
|
64
|
+
env_name: "FL_ADD_APP_VAR_KEY",
|
65
|
+
description: "Enter the ENV name",
|
66
|
+
type: String),
|
67
|
+
FastlaneCore::ConfigItem.new(key: :value,
|
68
|
+
env_name: "FL_ADD_APP_VAR_VALUE",
|
69
|
+
description: "Enter the ENV value",
|
70
|
+
type: String),
|
71
|
+
FastlaneCore::ConfigItem.new(key: :skip_confirmation,
|
72
|
+
env_name: "FL_ENCRYPT_APP_VARS_SKIP_CONFIRMATION", # The name of the environment variable
|
73
|
+
description: "Allows commands to be run from within CLI and skip the UI.message confirmation dialog", # a short description of this parameter
|
74
|
+
type: Boolean,
|
75
|
+
short_option:'s',
|
76
|
+
default_value: false,
|
77
|
+
optional: true),
|
78
|
+
]
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.return_value
|
82
|
+
# If your method provides a return value, you can describe here what it does
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.details
|
86
|
+
# "Saves the current vars in android/fastlane/.env and ios/fastlane/.env"
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.authors
|
90
|
+
# So no one will ever forget your contribution to fastlane :) You are awesome btw!
|
91
|
+
["cball", "isaiahgrey93","cmejet"]
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.is_supported?(platform)
|
95
|
+
[:ios, :android].include?(platform)
|
96
|
+
end
|
97
|
+
|
98
|
+
# Returns the app key for cryptex. optionally namespaced
|
99
|
+
def self.app_key_for(namespace)
|
100
|
+
default_app_key = Helper::ReactNativeReleaseHelper::APP_CRYPTEX_KEY
|
101
|
+
return default_app_key if namespace.strip.empty?
|
102
|
+
|
103
|
+
"#{namespace}_#{default_app_key}"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'fastlane/action'
|
2
|
+
require 'fastlane/plugin/cryptex'
|
3
|
+
|
4
|
+
module Fastlane
|
5
|
+
module Actions
|
6
|
+
class AddFastlaneVarAction < Action
|
7
|
+
def self.run(params)
|
8
|
+
is_ci = ENV['CI'] === 'true'
|
9
|
+
cryptex_key = Helper::ReactNativeReleaseHelper::FASTLANE_CRYPTEX_KEY
|
10
|
+
|
11
|
+
key = params[:key]
|
12
|
+
value = params[:value]
|
13
|
+
existing_app_vars = {}
|
14
|
+
|
15
|
+
if !is_ci && !UI.confirm("This will add #{key}=#{value} to the #{cryptex_key} namespace in the encrypted context repo. Proceed?")
|
16
|
+
UI.abort_with_message!("Stepping away...")
|
17
|
+
end
|
18
|
+
|
19
|
+
begin
|
20
|
+
existing_vars = other_action.cryptex(
|
21
|
+
type: 'export_env',
|
22
|
+
key: cryptex_key
|
23
|
+
)
|
24
|
+
rescue => ex
|
25
|
+
# If key doesn't exist cryptex will error
|
26
|
+
end
|
27
|
+
|
28
|
+
other_action.cryptex(
|
29
|
+
type: "import_env",
|
30
|
+
key: cryptex_key,
|
31
|
+
hash: existing_vars.merge({ key => value })
|
32
|
+
)
|
33
|
+
|
34
|
+
UI.success('Encrypted fastlane ENV vars')
|
35
|
+
end
|
36
|
+
|
37
|
+
#####################################################
|
38
|
+
# @!group Documentation
|
39
|
+
#####################################################
|
40
|
+
|
41
|
+
def self.description
|
42
|
+
"Adds a single ENV var for fastlane to the encrypted repository"
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.details
|
46
|
+
# Optional:
|
47
|
+
# this is your chance to provide a more detailed description of this action
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.available_options
|
51
|
+
[
|
52
|
+
FastlaneCore::ConfigItem.new(key: :key,
|
53
|
+
env_name: "FL_ADD_APP_VAR_KEY",
|
54
|
+
description: "Enter the ENV name",
|
55
|
+
type: String),
|
56
|
+
FastlaneCore::ConfigItem.new(key: :value,
|
57
|
+
env_name: "FL_ADD_APP_VAR_VALUE",
|
58
|
+
description: "Enter the ENV value",
|
59
|
+
type: String),
|
60
|
+
]
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.return_value
|
64
|
+
# If your method provides a return value, you can describe here what it does
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.details
|
68
|
+
# "Saves the current vars in android/fastlane/.env and ios/fastlane/.env"
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.authors
|
72
|
+
# So no one will ever forget your contribution to fastlane :) You are awesome btw!
|
73
|
+
["cball", "isaiahgrey93"]
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.is_supported?(platform)
|
77
|
+
[:ios, :android].include?(platform)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Returns a path for an env var. optionally namespaced
|
81
|
+
def self.env_path_for(namespace)
|
82
|
+
return default_env_path if namespace.strip.empty?
|
83
|
+
"#{default_env_path}.#{namespace}"
|
84
|
+
end
|
85
|
+
|
86
|
+
# Returns the app key for cryptex. optionally namespaced
|
87
|
+
def self.app_key_for(namespace)
|
88
|
+
default_app_key = Helper::ReactNativeReleaseHelper::APP_CRYPTEX_KEY
|
89
|
+
return default_app_key if namespace.strip.empty?
|
90
|
+
|
91
|
+
"#{namespace}_#{default_app_key}"
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.default_env_path
|
95
|
+
Helper::ReactNativeReleaseHelper::APP_ENV_PATH
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|