Files
Flutter_Shell/scripts/deploy-apk.sh
2026-05-18 13:36:54 +07:00

95 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
APK_PATH="${APK_PATH:-$PROJECT_ROOT/build/app/outputs/flutter-apk/app-release.apk}"
REMOTE_USER="${REMOTE_USER:-root}"
REMOTE_HOST="${REMOTE_HOST:-54.116.29.247}"
REMOTE_PORT="${REMOTE_PORT:-22}"
REMOTE_DIR="${REMOTE_DIR:-/data/wwwroot/apk}"
REMOTE_SCRIPT="${REMOTE_SCRIPT:-/data/wwwroot/apk/show_apk_link.sh}"
SHOULD_BUILD=true
usage() {
cat <<'EOF'
Usage: scripts/deploy-apk.sh [options]
Options:
--skip-build Upload the existing APK without running flutter build.
--apk PATH APK path to upload.
--host HOST Remote host. Default: 54.116.29.247
--user USER Remote user. Default: root
--port PORT SSH port. Default: 22
--remote-dir DIR Remote APK directory. Default: /data/wwwroot/apk
--remote-script PATH Remote link script. Default: /data/wwwroot/apk/show_apk_link.sh
-h, --help Show this help.
Environment variables with the same names are also supported:
APK_PATH, REMOTE_USER, REMOTE_HOST, REMOTE_PORT, REMOTE_DIR, REMOTE_SCRIPT
EOF
}
while [[ $# -gt 0 ]]; do
case "$1" in
--skip-build)
SHOULD_BUILD=false
shift
;;
--apk)
APK_PATH="$2"
shift 2
;;
--host)
REMOTE_HOST="$2"
shift 2
;;
--user)
REMOTE_USER="$2"
shift 2
;;
--port)
REMOTE_PORT="$2"
shift 2
;;
--remote-dir)
REMOTE_DIR="$2"
shift 2
;;
--remote-script)
REMOTE_SCRIPT="$2"
shift 2
;;
-h|--help)
usage
exit 0
;;
*)
echo "Unknown option: $1" >&2
usage
exit 1
;;
esac
done
if [[ "$SHOULD_BUILD" == true ]]; then
(cd "$PROJECT_ROOT" && flutter build apk --release)
fi
if [[ ! -f "$APK_PATH" ]]; then
echo "APK not found: $APK_PATH" >&2
exit 1
fi
APK_NAME="$(basename "$APK_PATH")"
REMOTE_TARGET="$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
echo "Uploading $APK_PATH to $REMOTE_TARGET"
scp -P "$REMOTE_PORT" "$APK_PATH" "$REMOTE_TARGET"
echo "Generating APK link on $REMOTE_HOST"
ssh -p "$REMOTE_PORT" "$REMOTE_USER@$REMOTE_HOST" \
"bash '$REMOTE_SCRIPT' '$APK_NAME'"