Files
plezy/scripts/upload-symbols.sh
T

126 lines
3.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Usage: upload-symbols.sh <platform> [source-root]
# Env: SENTRY_AUTH_TOKEN or BUGS_ADMIN_TOKEN (required unless BUGS_UPLOAD_DRY_RUN is set)
# SENTRY_URL or BUGS_URL (default https://bugs.plezy.app)
# Platforms: macos | ios | android-apk | android-aab | linux-x64 | linux-arm64
set -euo pipefail
PLATFORM="${1:?platform arg required}"
DRY_RUN="${BUGS_UPLOAD_DRY_RUN:-}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$ROOT"
SOURCE_ROOT="${2:-$ROOT}"
if [[ "$SOURCE_ROOT" != /* ]]; then
SOURCE_ROOT="$ROOT/$SOURCE_ROOT"
fi
BUILD_ROOT="$SOURCE_ROOT/build"
SYMBOL_ROOT="$SOURCE_ROOT/debug-info/$PLATFORM"
DART_SYMBOL_MAP_PATH="${SENTRY_DART_SYMBOL_MAP_PATH:-}"
if [ -z "$DART_SYMBOL_MAP_PATH" ]; then
for candidate in \
"$SYMBOL_ROOT/obfuscation.map.json" \
"$BUILD_ROOT/app/obfuscation/$PLATFORM.map.json" \
"$BUILD_ROOT/app/obfuscation.map.json"; do
if [ -f "$candidate" ]; then
DART_SYMBOL_MAP_PATH="$candidate"
break
fi
done
fi
SEARCH_ROOTS=()
add_existing_root() {
if [ -d "$1" ]; then
SEARCH_ROOTS+=("$1")
fi
}
add_existing_root "$SYMBOL_ROOT"
case "$PLATFORM" in
macos)
add_existing_root "$BUILD_ROOT/macos"
;;
ios)
add_existing_root "$BUILD_ROOT/ios"
add_existing_root "$SOURCE_ROOT/ios/build"
;;
linux-x64|linux-arm64)
add_existing_root "$BUILD_ROOT/linux"
;;
android-apk|android-aab)
add_existing_root "$BUILD_ROOT/app"
;;
*)
echo "unknown platform: $PLATFORM" >&2
exit 2
;;
esac
found_symbol_file() {
local first
if [ "${#SEARCH_ROOTS[@]}" -eq 0 ]; then
return 1
fi
first="$(find "${SEARCH_ROOTS[@]}" -type f -print -quit 2>/dev/null || true)"
[ -n "$first" ]
}
if ! found_symbol_file; then
echo "no symbols found for platform ${PLATFORM}" >&2
exit 3
fi
export SENTRY_URL="${SENTRY_URL:-${BUGS_URL:-https://bugs.plezy.app}}"
export SENTRY_RELEASE="${SENTRY_RELEASE:-plezy@$(git rev-parse --short HEAD)}"
export SENTRY_LOG_LEVEL="${SENTRY_LOG_LEVEL:-info}"
if [ -z "${SENTRY_AUTH_TOKEN:-}" ] && [ -n "${BUGS_ADMIN_TOKEN:-}" ]; then
export SENTRY_AUTH_TOKEN="$BUGS_ADMIN_TOKEN"
fi
if [ -z "$DRY_RUN" ] && [ -z "${SENTRY_AUTH_TOKEN:-}" ]; then
echo "SENTRY_AUTH_TOKEN or BUGS_ADMIN_TOKEN env var required" >&2
exit 1
fi
PLUGIN_ARGS=(
"--sentry-define=release=${SENTRY_RELEASE}"
"--sentry-define=url=${SENTRY_URL}"
"--sentry-define=build_path=${BUILD_ROOT}"
)
if [ -n "${SENTRY_DIST:-}" ]; then
PLUGIN_ARGS+=("--sentry-define=dist=${SENTRY_DIST}")
fi
if [ -d "$SYMBOL_ROOT" ]; then
PLUGIN_ARGS+=("--sentry-define=symbols_path=${SYMBOL_ROOT}")
fi
if [ -n "$DART_SYMBOL_MAP_PATH" ]; then
PLUGIN_ARGS+=("--sentry-define=dart_symbol_map_path=${DART_SYMBOL_MAP_PATH}")
fi
if [ -n "$DRY_RUN" ]; then
echo "dry-run: would upload symbols for ${PLATFORM}"
echo "dry-run: release=${SENTRY_RELEASE}"
echo "dry-run: dist=${SENTRY_DIST:-}"
echo "dry-run: source_root=${SOURCE_ROOT}"
echo "dry-run: build_path=${BUILD_ROOT}"
echo "dry-run: symbols_path=${SYMBOL_ROOT}"
echo "dry-run: dart_symbol_map_path=${DART_SYMBOL_MAP_PATH}"
find "${SEARCH_ROOTS[@]}" -type f -print 2>/dev/null || true
exit 0
fi
echo "uploading symbols for ${PLATFORM} release ${SENTRY_RELEASE} dist ${SENTRY_DIST:-}"
dart run sentry_dart_plugin "${PLUGIN_ARGS[@]}"