#!/usr/bin/env bash # Deploy the latest signed APK to the server and update AppVersionController.php set -euo pipefail # Server and paths: override with environment variables for another server, e.g. # APK_REMOTE_HOST=example.org APK_REMOTE_APP_DIR=/var/www/myorg scripts/deploy-apk.sh REMOTE_USER="${APK_REMOTE_USER:-root}" REMOTE_HOST="${APK_REMOTE_HOST:-timebank.cc}" REMOTE_APP_DIR="${APK_REMOTE_APP_DIR:-/var/www/timebank_cc}" REMOTE_APK_DIR="$REMOTE_APP_DIR/storage/app/public/apk" REMOTE_CONTROLLER="$REMOTE_APP_DIR/app/Http/Controllers/AppVersionController.php" # The local checkout is the one this script lives in LOCAL_APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" APK_DIR="$LOCAL_APP_DIR/storage/app/public/apk" CONTROLLER="$LOCAL_APP_DIR/app/Http/Controllers/AppVersionController.php" # --- Find the most recently modified APK in the local storage folder ---------- LOCAL_APK=$(ls -t "$APK_DIR"/timebank-cc-*.apk 2>/dev/null | head -1) if [[ -z "$LOCAL_APK" ]]; then echo "ERROR: No timebank-cc-*.apk found in $APK_DIR" >&2 exit 1 fi REMOTE_FILENAME=$(basename "$LOCAL_APK") # Read versionCode and versionName from build.gradle.kts — single source of truth GRADLE="${APK_GRADLE_FILE:-$HOME/AndroidStudioProjects/Timebankcc/app/build.gradle.kts}" VERSION_CODE=$(grep -oP 'versionCode\s*=\s*\K[0-9]+' "$GRADLE" | head -1) VERSION_NAME=$(grep -oP 'versionName\s*=\s*"\K[^"]+' "$GRADLE" | head -1) if [[ -z "$VERSION_CODE" || -z "$VERSION_NAME" ]]; then echo "ERROR: Could not read version from $GRADLE" >&2 exit 1 fi # Sanity check: filename should match the versionName in build.gradle.kts EXPECTED_FILENAME="timebank-cc-${VERSION_NAME}.apk" if [[ "$REMOTE_FILENAME" != "$EXPECTED_FILENAME" ]]; then echo "WARNING: APK filename '$REMOTE_FILENAME' does not match build.gradle.kts versionName '$VERSION_NAME'" echo " Expected: $EXPECTED_FILENAME" read -r -p "Continue anyway? [y/N] " confirm [[ "$confirm" =~ ^[Yy]$ ]] || exit 1 fi echo "APK : $LOCAL_APK" echo "Version: $VERSION_NAME (code $VERSION_CODE)" echo "Remote : ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_APK_DIR}/${REMOTE_FILENAME}" echo "" # --- Upload APK --------------------------------------------------------------- echo "Uploading APK..." scp "$LOCAL_APK" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_APK_DIR}/" echo "Upload complete." # --- Update AppVersionController on the server -------------------------------- echo "Updating AppVersionController..." ssh "${REMOTE_USER}@${REMOTE_HOST}" bash <