203 lines
8.8 KiB
Bash
Executable File
203 lines
8.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# ════════════════════════════════════════════════
|
|
# ARIA — Release Script
|
|
# Baut APK, taggt, erstellt Gitea Release
|
|
# Verwendung: ./release.sh 1.2.0
|
|
# Gitea-Kennwort wird interaktiv abgefragt.
|
|
# ════════════════════════════════════════════════
|
|
|
|
set -e
|
|
|
|
# ── Farben ────────────────────────────────────
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
# ── Parameter ─────────────────────────────────
|
|
VERSION=${1:?"Usage: ./release.sh <version> (z.B. 1.2.0)"}
|
|
TAG="v$VERSION"
|
|
|
|
# ── Gitea-Konfiguration ──────────────────────
|
|
# Aus .env lesen falls vorhanden (GITEA_URL, GITEA_REPO, GITEA_USER)
|
|
if [ -f .env ]; then
|
|
source .env
|
|
fi
|
|
|
|
GITEA_URL="${GITEA_URL:?"GITEA_URL nicht gesetzt (in .env oder als Umgebungsvariable)"}"
|
|
GITEA_REPO="${GITEA_REPO:?"GITEA_REPO nicht gesetzt (z.B. stefan/aria-agent)"}"
|
|
GITEA_USER="${GITEA_USER:-$(echo "$GITEA_REPO" | cut -d'/' -f1)}"
|
|
|
|
echo -e "${CYAN}╔═══════════════════════════════════════╗${NC}"
|
|
echo -e "${CYAN}║ ARIA Release — ${TAG}$(printf '%*s' $((19 - ${#TAG})) '')║${NC}"
|
|
echo -e "${CYAN}╚═══════════════════════════════════════╝${NC}"
|
|
echo ""
|
|
|
|
# ── Kennwort abfragen ─────────────────────────
|
|
echo -e "${YELLOW}Gitea-Login: ${GITEA_USER}${NC}"
|
|
read -s -p "Gitea-Kennwort: " GITEA_PASS
|
|
echo ""
|
|
|
|
# Credentials testen
|
|
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
|
|
-u "${GITEA_USER}:${GITEA_PASS}" \
|
|
"$GITEA_URL/api/v1/user")
|
|
|
|
if [ "$HTTP_CODE" != "200" ]; then
|
|
echo -e "${RED}Login fehlgeschlagen (HTTP $HTTP_CODE). Kennwort korrekt?${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e " ${GREEN}✓${NC} Login erfolgreich"
|
|
echo ""
|
|
|
|
# ── Versionsnummern aktualisieren ─────────────
|
|
echo -e "${GREEN}[1/5] Versionsnummern auf $VERSION setzen...${NC}"
|
|
|
|
# package.json
|
|
sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION\"/" android/package.json
|
|
echo -e " ${GREEN}✓${NC} package.json → $VERSION"
|
|
|
|
# build.gradle: versionName + versionCode (aus Version berechnen)
|
|
# Unterstuetzt 3-stellig (1.2.3) und 4-stellig (0.0.1.7)
|
|
IFS='.' read -ra VER_PARTS <<< "$VERSION"
|
|
V1=${VER_PARTS[0]:-0}; V2=${VER_PARTS[1]:-0}; V3=${VER_PARTS[2]:-0}; V4=${VER_PARTS[3]:-0}
|
|
VERSION_CODE=$((V1 * 1000000 + V2 * 10000 + V3 * 100 + V4))
|
|
# Mindestens 1 (Android erfordert versionCode >= 1)
|
|
[ "$VERSION_CODE" -lt 1 ] && VERSION_CODE=1
|
|
sed -i "s/versionName \"[^\"]*\"/versionName \"$VERSION\"/" android/android/app/build.gradle
|
|
sed -i "s/versionCode [0-9]*/versionCode $VERSION_CODE/" android/android/app/build.gradle
|
|
echo -e " ${GREEN}✓${NC} build.gradle → versionName $VERSION, versionCode $VERSION_CODE"
|
|
|
|
# SettingsScreen: Anzeige-Version (beliebiges Versionsformat)
|
|
sed -i "s/Version [0-9][0-9.]*[^<]*/Version $VERSION /" android/src/screens/SettingsScreen.tsx
|
|
echo -e " ${GREEN}✓${NC} SettingsScreen → Version $VERSION"
|
|
|
|
echo ""
|
|
|
|
# ── APK bauen ─────────────────────────────────
|
|
echo -e "${GREEN}[2/5] APK bauen (Cache leeren + Build)...${NC}"
|
|
cd android
|
|
# Metro + Gradle Cache leeren damit neue Version sauber eingebettet wird
|
|
rm -rf node_modules/.cache 2>/dev/null
|
|
cd android && ./gradlew clean 2>/dev/null; cd ..
|
|
./build.sh release
|
|
cd ..
|
|
|
|
APK_PATH="android/ARIA-Cockpit-release.apk"
|
|
if [ ! -f "$APK_PATH" ]; then
|
|
echo -e "${RED}APK nicht gefunden: $APK_PATH${NC}"
|
|
echo -e "${RED}Build fehlgeschlagen.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
APK_NAME="ARIA-${TAG}.apk"
|
|
APK_SIZE=$(du -h "$APK_PATH" | cut -f1)
|
|
echo -e " ${GREEN}✓${NC} APK gebaut ($APK_SIZE)"
|
|
echo ""
|
|
|
|
# ── Git Tag ───────────────────────────────────
|
|
echo -e "${GREEN}[3/5] Git Tag $TAG...${NC}"
|
|
|
|
# Versions-Aenderungen committen
|
|
git add android/package.json android/android/app/build.gradle android/src/screens/SettingsScreen.tsx
|
|
git commit -m "release: bump version to $VERSION" 2>/dev/null || echo -e " ${YELLOW}Keine Aenderungen zum Committen${NC}"
|
|
|
|
if git rev-parse "$TAG" &>/dev/null; then
|
|
echo -e " ${YELLOW}Tag $TAG existiert bereits — überspringe${NC}"
|
|
else
|
|
git tag "$TAG"
|
|
echo -e " ${GREEN}✓${NC} Tag $TAG erstellt"
|
|
fi
|
|
|
|
git push origin main "$TAG"
|
|
echo -e " ${GREEN}✓${NC} Tag gepusht"
|
|
echo ""
|
|
|
|
# ── Release Notes aus CHANGELOG.md lesen ──────
|
|
RELEASE_BODY="ARIA Android App $TAG"
|
|
CHANGELOG_FILE="$SCRIPT_DIR/CHANGELOG.md"
|
|
|
|
if [ -f "$CHANGELOG_FILE" ]; then
|
|
# Abschnitt für diese Version extrahieren (zwischen ## [version] Zeilen)
|
|
SECTION=$(sed -n "/^## \[$VERSION\]/,/^## \[/p" "$CHANGELOG_FILE" | head -n -1)
|
|
if [ -n "$SECTION" ]; then
|
|
RELEASE_BODY="$SECTION"
|
|
echo -e " ${GREEN}✓${NC} Release Notes aus CHANGELOG.md gelesen"
|
|
else
|
|
echo -e " ${YELLOW}Kein Eintrag für [$VERSION] in CHANGELOG.md — verwende Standard-Text${NC}"
|
|
fi
|
|
fi
|
|
|
|
# JSON-Escape: Newlines und Anführungszeichen escapen
|
|
RELEASE_BODY_ESCAPED=$(printf '%s' "$RELEASE_BODY" | python3 -c 'import sys,json; print(json.dumps(sys.stdin.read()))' 2>/dev/null || printf '"%s"' "$RELEASE_BODY" | sed 's/"/\\"/g')
|
|
|
|
# ── Gitea Release erstellen ───────────────────
|
|
echo -e "${GREEN}[4/5] Gitea Release erstellen...${NC}"
|
|
|
|
RELEASE_RESPONSE=$(curl -s -X POST \
|
|
"$GITEA_URL/api/v1/repos/$GITEA_REPO/releases" \
|
|
-u "${GITEA_USER}:${GITEA_PASS}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{
|
|
\"tag_name\": \"$TAG\",
|
|
\"name\": \"ARIA $TAG\",
|
|
\"body\": $RELEASE_BODY_ESCAPED,
|
|
\"draft\": false,
|
|
\"prerelease\": false
|
|
}")
|
|
|
|
RELEASE_ID=$(echo "$RELEASE_RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
|
|
|
|
if [ -z "$RELEASE_ID" ]; then
|
|
echo -e "${RED}Release konnte nicht erstellt werden:${NC}"
|
|
echo "$RELEASE_RESPONSE"
|
|
exit 1
|
|
fi
|
|
echo -e " ${GREEN}✓${NC} Release #$RELEASE_ID erstellt"
|
|
echo ""
|
|
|
|
# ── APK hochladen ─────────────────────────────
|
|
echo -e "${GREEN}[5/5] APK hochladen...${NC}"
|
|
|
|
UPLOAD_RESPONSE=$(curl -s -X POST \
|
|
"$GITEA_URL/api/v1/repos/$GITEA_REPO/releases/$RELEASE_ID/assets?name=$APK_NAME" \
|
|
-u "${GITEA_USER}:${GITEA_PASS}" \
|
|
-F "attachment=@${APK_PATH};type=application/vnd.android.package-archive")
|
|
|
|
if echo "$UPLOAD_RESPONSE" | grep -q '"name"'; then
|
|
echo -e " ${GREEN}✓${NC} $APK_NAME hochgeladen"
|
|
else
|
|
echo -e "${RED}Upload fehlgeschlagen:${NC}"
|
|
echo "$UPLOAD_RESPONSE"
|
|
exit 1
|
|
fi
|
|
|
|
# ── Auto-Update: APK auf RVS-Server kopieren ─
|
|
RVS_UPDATE_HOST="${RVS_UPDATE_HOST:-}"
|
|
if [ -n "$RVS_UPDATE_HOST" ]; then
|
|
echo -e "${GREEN}[6/6] APK auf RVS-Server kopieren (Auto-Update)...${NC}"
|
|
# Alte APKs auf dem RVS loeschen, dann neue hochladen
|
|
ssh "$RVS_UPDATE_HOST" "rm -f ~/ARIA-AGENT/rvs/updates/ARIA-*.apk" 2>/dev/null
|
|
scp "$APK_PATH" "${RVS_UPDATE_HOST}:~/ARIA-AGENT/rvs/updates/${APK_NAME}" 2>/dev/null
|
|
if [ $? -eq 0 ]; then
|
|
echo -e " ${GREEN}✓${NC} APK auf RVS-Server kopiert (alte Versionen geloescht)"
|
|
else
|
|
echo -e " ${YELLOW}APK konnte nicht auf RVS kopiert werden (RVS_UPDATE_HOST=$RVS_UPDATE_HOST)${NC}"
|
|
echo -e " ${YELLOW}Manuell: scp $APK_PATH $RVS_UPDATE_HOST:~/ARIA-AGENT/rvs/updates/${APK_NAME}${NC}"
|
|
fi
|
|
else
|
|
echo -e "${YELLOW}Auto-Update uebersprungen (RVS_UPDATE_HOST nicht gesetzt)${NC}"
|
|
echo -e "${YELLOW}Setze RVS_UPDATE_HOST in .env fuer automatische Verteilung${NC}"
|
|
fi
|
|
|
|
# ── Fertig ────────────────────────────────────
|
|
echo ""
|
|
echo -e "${GREEN}╔═══════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${GREEN}║ Release $TAG ist live!$(printf '%*s' $((27 - ${#TAG})) '')║${NC}"
|
|
echo -e "${GREEN}╠═══════════════════════════════════════════════════╣${NC}"
|
|
echo -e "${GREEN}║${NC} $GITEA_URL/$GITEA_REPO/releases/tag/$TAG"
|
|
echo -e "${GREEN}║${NC} APK: $APK_NAME ($APK_SIZE)"
|
|
echo -e "${GREEN}║${NC} Auto-Update: ${RVS_UPDATE_HOST:-nicht konfiguriert}"
|
|
echo -e "${GREEN}╚═══════════════════════════════════════════════════╝${NC}"
|