77 lines
3.1 KiB
Bash
Executable File
77 lines
3.1 KiB
Bash
Executable File
#!/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 <<EOF
|
|
sed -i "s/\\\$versionCode = [0-9]*;/\\\$versionCode = ${VERSION_CODE};/" "${REMOTE_CONTROLLER}"
|
|
sed -i "s/\\\$versionName = '[^']*';/\\\$versionName = '${VERSION_NAME}';/" "${REMOTE_CONTROLLER}"
|
|
echo "Controller updated:"
|
|
grep -E "versionCode|versionName" "${REMOTE_CONTROLLER}"
|
|
EOF
|
|
|
|
# --- Update local AppVersionController to keep it in sync ---------------------
|
|
|
|
sed -i "s/\$versionCode = [0-9]*;/\$versionCode = ${VERSION_CODE};/" "$CONTROLLER"
|
|
sed -i "s/\$versionName = '[^']*';/\$versionName = '${VERSION_NAME}';/" "$CONTROLLER"
|
|
echo "Local controller updated."
|
|
|
|
echo ""
|
|
echo "Done. Users on versionCode < ${VERSION_CODE} will be offered the update."
|