Integrate Sentry and implement a feature flagged feature (disabled by default) to force crash the app using the function mobile/status.go#IntendedPanic() provided by status-go. Because the feature is feature flagged and disabled, it is not available in release builds. Fixes: https://github.com/status-im/status-mobile/issues/21656 Documentation about Sentry in status-go: https://github.com/status-im/status-go/blob/3466ac2661bb19cd0eaa27761551de3b4d31b393/internal/sentry/README.md#L60 Areas that may be impacted: Whenever a panic happens in status-go and usage data collection is enabled we will send error data to Sentry. In theory, nothing should change for the user, therefore nothing should be visibly different in the app's behavior. Steps to test: Before following the steps below, the CI must be configured with the appropriate SENTRY_DSN_STATUS_GO value. You can also use a free tier cloud instance to do your own testing in case you want to play around with Sentry. 1. Login with any profile. 2. Enable usage data collection (for now, Sentry and analytics are tied to the same setting in status-go). 3. Go to Settings > Feature flags and enable app-monitoring > intentional-crash 4. Go to Settings > Advanced > and press on Force crash immediately Usually you should see the error in the Sentry dashboard in a matter of seconds.
77 lines
2.2 KiB
Bash
Executable File
77 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Needed to fail on must_get_env()
|
|
set -e
|
|
|
|
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
|
|
source "${GIT_ROOT}/scripts/colors.sh"
|
|
|
|
function must_get_env() {
|
|
declare -n VAR_VALUE="$1"
|
|
if [[ -n "${VAR_VALUE}" ]]; then
|
|
echo "${VAR_VALUE}"
|
|
return
|
|
fi
|
|
echo -e "${RED}No required env variable:${RST} ${BLD}${!VAR_VALUE}${RST}" 1>&2
|
|
exit 1
|
|
}
|
|
|
|
function append_env_export() {
|
|
VAR_NAME=${1}
|
|
VAR_VALUE=$(must_get_env "${VAR_NAME}")
|
|
echo "export ${VAR_NAME}=\"${VAR_VALUE}\";" >> "${SECRETS_FILE_PATH}"
|
|
}
|
|
nixOpts=()
|
|
|
|
# We create if now so the trap knows its location
|
|
export SECRETS_FILE_PATH=$(mktemp)
|
|
chmod 644 ${SECRETS_FILE_PATH}
|
|
# If secrets file was created we want to remove it.
|
|
trap "rm -vf ${SECRETS_FILE_PATH}" EXIT ERR INT QUIT
|
|
|
|
# Names of variables containing secrets to save in env file.
|
|
SECRETS_ENV_VARS=(
|
|
'ALCHEMY_ETHEREUM_MAINNET_TOKEN'
|
|
'ALCHEMY_ETHEREUM_SEPOLIA_TOKEN'
|
|
'ALCHEMY_ARBITRUM_MAINNET_TOKEN'
|
|
'ALCHEMY_ARBITRUM_SEPOLIA_TOKEN'
|
|
'ALCHEMY_OPTIMISM_MAINNET_TOKEN'
|
|
'ALCHEMY_OPTIMISM_SEPOLIA_TOKEN'
|
|
'ALCHEMY_BASE_MAINNET_TOKEN'
|
|
'ALCHEMY_BASE_SEPOLIA_TOKEN'
|
|
'RARIBLE_MAINNET_API_KEY'
|
|
'RARIBLE_TESTNET_API_KEY'
|
|
'INFURA_TOKEN'
|
|
'INFURA_TOKEN_SECRET'
|
|
'OPENSEA_API_KEY'
|
|
'MIXPANEL_APP_ID'
|
|
'MIXPANEL_APP_TOKEN'
|
|
'POKT_TOKEN'
|
|
'SENTRY_DSN_STATUS_GO'
|
|
)
|
|
|
|
# Secrets like this can't be passed via args or they end up in derivation.
|
|
for SECRET_VAR_NAME in "${SECRETS_ENV_VARS[@]}"; do
|
|
[[ -n "${!SECRET_VAR_NAME}" ]] && append_env_export "${SECRET_VAR_NAME}"
|
|
done
|
|
|
|
# If no secrets were passed there's no need to pass the 'secretsFile'.
|
|
if [[ -s "${SECRETS_FILE_PATH}" ]]; then
|
|
nixOpts+=("--option" "extra-sandbox-paths" "${SECRETS_FILE_PATH}")
|
|
nixOpts+=("--argstr" "secretsFile" "${SECRETS_FILE_PATH}")
|
|
fi
|
|
|
|
# Used by Clojure at compile time to include JS modules
|
|
nixOpts+=("--argstr" "buildEnv" "$(must_get_env BUILD_ENV)")
|
|
|
|
# On Darwin we hit a sandbox serialization limit of 65535.
|
|
# https://github.com/NixOS/nix/issues/4119
|
|
if [[ "$(uname -s)" =~ Darwin ]]; then
|
|
nixOpts+=("--option" "build-use-sandbox" "false")
|
|
else
|
|
nixOpts+=("--option" "build-use-sandbox" "true")
|
|
fi
|
|
|
|
|
|
"${GIT_ROOT}/nix/scripts/build.sh" targets.mobile.android.build "${nixOpts[@]}"
|