#!/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'"