Загрузка данных
#!/bin/bash
set -euo pipefail
SERVER="http://192.168.205.1:8765"
WORK_ROOT="$HOME/VMBuildAgent"
KEYTOOL="/Applications/Unity/Hub/Editor/6000.3.6f1/PlaybackEngines/AndroidPlayer/OpenJDK/bin/keytool"
APP_ID="${1:-}"
if [ -z "$APP_ID" ]; then
echo "ERROR: app id required"
exit 1
fi
if [[ ! "$APP_ID" =~ ^[a-zA-Z0-9_-]+$ ]]; then
echo "ERROR: invalid app id"
exit 1
fi
JOB_DIR="$WORK_ROOT/working/$APP_ID"
JSON_FILE="$JOB_DIR/$APP_ID.json"
UNITYPACKAGE_FILE="$JOB_DIR/$APP_ID.unitypackage"
JSON_URL="$SERVER/inbox/$APP_ID/$APP_ID.json"
UNITYPACKAGE_URL="$SERVER/inbox/$APP_ID/$APP_ID.unitypackage"
mkdir -p "$JOB_DIR"
echo ""
echo "=================================="
echo " VM BUILD AGENT"
echo "=================================="
echo ""
echo "App ID: $APP_ID"
echo ""
echo "[1/5] Downloading JSON..."
curl -f -sS -o "$JSON_FILE" "$JSON_URL"
echo "OK"
echo ""
echo "[2/5] Reading config..."
ID_FROM_JSON=$(
/usr/bin/plutil -extract id raw -o - "$JSON_FILE"
)
PRODUCT_NAME=$(
/usr/bin/plutil -extract productName raw -o - "$JSON_FILE"
)
PACKAGE_NAME=$(
/usr/bin/plutil -extract packageName raw -o - "$JSON_FILE"
)
KEYSTORE_MODE=$(
/usr/bin/plutil -extract keystore.mode raw -o - "$JSON_FILE"
)
if [ "$ID_FROM_JSON" != "$APP_ID" ]; then
echo "ERROR: JSON id does not match job id"
exit 1
fi
echo "OK"
echo ""
echo "[3/5] Downloading UnityPackage..."
curl -f -sS -o "$UNITYPACKAGE_FILE" "$UNITYPACKAGE_URL"
echo "OK"
echo ""
echo "[4/5] Processing keystore..."
if [ "$KEYSTORE_MODE" = "create" ]; then
if [ ! -x "$KEYTOOL" ]; then
echo "ERROR: keytool not found"
echo "$KEYTOOL"
exit 1
fi
VALIDITY_DAYS=$(
/usr/bin/plutil -extract keystore.validityDays raw -o - "$JSON_FILE"
)
DNAME=$(
/usr/bin/plutil -extract keystore.dname raw -o - "$JSON_FILE"
)
STORE_NAME="$APP_ID"
STORE_PASSWORD="${APP_ID}pass"
KEY_ALIAS="${APP_ID}d"
KEY_PASSWORD="${APP_ID}dpass"
KEYSTORE_FILE="$JOB_DIR/$APP_ID.keystore"
rm -f "$KEYSTORE_FILE"
"$KEYTOOL" -genkeypair -noprompt -v -storetype JKS -keystore "$KEYSTORE_FILE" -storepass "$STORE_PASSWORD" -alias "$KEY_ALIAS" -keypass "$KEY_PASSWORD" -keyalg RSA -keysize 2048 -validity "$VALIDITY_DAYS" -dname "$DNAME"
if [ ! -s "$KEYSTORE_FILE" ]; then
echo "ERROR: keystore creation failed"
exit 1
fi
echo ""
echo "Keystore created."
echo "File: $(basename "$KEYSTORE_FILE")"
echo "Store name: $STORE_NAME"
echo "Store password: $STORE_PASSWORD"
echo "Alias: $KEY_ALIAS"
echo "Alias password: $KEY_PASSWORD"
elif [ "$KEYSTORE_MODE" = "existing" ]; then
STORE_PASSWORD=$(
/usr/bin/plutil -extract keystore.storePassword raw -o - "$JSON_FILE"
)
KEY_ALIAS=$(
/usr/bin/plutil -extract keystore.alias raw -o - "$JSON_FILE"
)
KEY_PASSWORD=$(
/usr/bin/plutil -extract keystore.aliasPassword raw -o - "$JSON_FILE"
)
KEYSTORE_NAME=$(
curl -f -sS "$SERVER/keystore-info/$APP_ID"
)
if [ -z "$KEYSTORE_NAME" ]; then
echo "ERROR: keystore filename is empty"
exit 1
fi
if [[ "$KEYSTORE_NAME" == *"/"* ]] || [[ "$KEYSTORE_NAME" == *"\\"* ]]; then
echo "ERROR: invalid keystore filename"
exit 1
fi
KEYSTORE_FILE="$JOB_DIR/$KEYSTORE_NAME"
rm -f "$KEYSTORE_FILE"
curl \
-f \
-sS \
-o "$KEYSTORE_FILE" \
"$SERVER/keystore/$APP_ID"
if [ ! -s "$KEYSTORE_FILE" ]; then
echo "ERROR: existing keystore download failed"
exit 1
fi
if [ ! -x "$KEYTOOL" ]; then
echo "ERROR: keytool not found"
echo "$KEYTOOL"
exit 1
fi
"$KEYTOOL" \
-list \
-keystore "$KEYSTORE_FILE" \
-storepass "$STORE_PASSWORD" \
-alias "$KEY_ALIAS" \
> /dev/null
echo ""
echo "Existing keystore downloaded."
echo "Original name: $KEYSTORE_NAME"
echo "Alias: $KEY_ALIAS"
else
echo "ERROR: unknown keystore mode: $KEYSTORE_MODE"
exit 1
fi
echo ""
echo "[5/5] Checking files..."
if [ ! -s "$JSON_FILE" ]; then
echo "ERROR: JSON is empty"
exit 1
fi
if [ ! -s "$UNITYPACKAGE_FILE" ]; then
echo "ERROR: UnityPackage is empty"
exit 1
fi
if [ ! -s "$KEYSTORE_FILE" ]; then
echo "ERROR: keystore is empty"
exit 1
fi
echo "OK"
echo ""
echo "=================================="
echo " JOB READY"
echo "=================================="
echo ""
echo "ID: $ID_FROM_JSON"
echo "Product Name: $PRODUCT_NAME"
echo "Package Name: $PACKAGE_NAME"
echo "Keystore Mode: $KEYSTORE_MODE"
echo "Keystore: $KEYSTORE_FILE"
echo "Alias: $KEY_ALIAS"
echo ""