Files
Repo/update.sh
2025-05-23 12:47:57 +02:00

110 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
cd /var/www/html || exit 1
# First, let's clear the F-Droid index
rm -f repo/index*
rm -f repo/entry.jar
# Make sure we have the tools we need
command -v aapt >/dev/null 2>&1 || { echo "Error: aapt is required but not installed. Please install Android SDK build tools."; exit 1; }
command -v jq >/dev/null 2>&1 || { echo "Error: jq is required but not installed. Please install jq for JSON parsing."; exit 1; }
# Configuration
GITEA_URL="https://git.felo.gg"
REPO_OWNER="FeloStore"
REPO_NAME="Data"
RELEASE_TAG="latest"
# Function to extract version from APK
get_version() {
apk_file=$1
version=$(aapt dump badging "$apk_file" 2>/dev/null | grep versionName | awk -F"'" '{print $4}')
echo "$version"
}
# Function to download and update only if changed
update_app() {
filename=$1
app_url=$2
echo "Processing $filename..."
# Create temp directory
mkdir -p ./temp
# Download to temp file
wget -q -O "./temp/${filename}.new" "$app_url"
# Check if download was successful
if [ ! -f "./temp/${filename}.new" ] || [ ! -s "./temp/${filename}.new" ]; then
echo "$filename: Download failed, skipping..."
rm -f "./temp/${filename}.new"
return
fi
# Extract version info from the new APK
new_version=$(get_version "./temp/${filename}.new")
echo " Downloaded version: $new_version"
# Check if app exists and if it's different
if [ -f "./repo/${filename}" ]; then
# Extract version info from the existing APK
current_version=$(get_version "./repo/${filename}")
echo " Current version: $current_version"
# Compare files (binary comparison to be absolutely sure)
if ! cmp -s "./temp/${filename}.new" "./repo/${filename}"; then
echo "$filename: New version detected ($current_version$new_version), updating..."
mv "./temp/${filename}.new" "./repo/${filename}"
touch -d "$(date +%Y-%m-%d)" "./repo/${filename}"
else
echo "$filename: No changes detected (version $current_version), keeping existing version"
rm "./temp/${filename}.new"
fi
else
echo "$filename: File does not exist yet, adding version $new_version..."
mv "./temp/${filename}.new" "./repo/${filename}"
touch -d "$(date +%Y-%m-%d)" "./repo/${filename}"
fi
}
echo "Fetching release information from Gitea..."
# Get release information from Gitea API
RELEASE_API_URL="${GITEA_URL}/api/v1/repos/${REPO_OWNER}/${REPO_NAME}/releases/tags/${RELEASE_TAG}"
release_info=$(wget -q -O - "$RELEASE_API_URL")
if [ -z "$release_info" ]; then
echo "Error: Could not fetch release information from Gitea API"
exit 1
fi
# Extract APK download URLs from the release
apk_urls=$(echo "$release_info" | jq -r '.assets[] | select(.name | endswith(".apk")) | .browser_download_url')
if [ -z "$apk_urls" ]; then
echo "Error: No APK files found in the latest release"
exit 1
fi
echo "Found APK files in release:"
echo "$apk_urls" | while read -r url; do
filename=$(basename "$url")
echo " - $filename"
done
# Process each APK
echo "$apk_urls" | while read -r url; do
if [ -n "$url" ]; then
filename=$(basename "$url")
update_app "$filename" "$url"
fi
done
# Clean up temp directory
rm -rf ./temp
echo "Updating F-Droid repository..."
/root/.local/bin/fdroid update --allow-disabled-algorithms
echo "Done! Repository updated with all available apps."