Files
Camper-Monitor/Android/upload-package.sh
BiasFandClaude Opus 5 32659ff0b9 Gitea: warum die APK abgelehnt wird, und zwei Auswege
Die Instanz gefragt statt geraten. Ihre Liste erlaubter Dateitypen für
Anhänge enthält .apk nicht - daran scheitert das Hochladen. An der Grösse
liegt es nicht, die Grenze steht bei 100 MiB und die APK bei 11.

Der Quelltext als zip und tar.gz ist etwas anderes: den hängt Gitea an jedes
Release automatisch, erzeugt aus dem Etikett. Das ist nichts Hochgeladenes
und lässt sich auch nicht abschalten.

RELEASE.md nennt jetzt beides und zwei Wege. Der richtige ist eine Zeile in
der app.ini, die .apk erlaubt - für Release-Anhänge sind je nach Fassung
[attachment] oder [repository.release] zuständig, deshalb beide.

Ohne Serverzugriff hilft die Paket-Registry: die nimmt beliebige Dateien
ohne Typenliste und ist auf dieser Instanz eingeschaltet. Dafür ein Skript,
das den Zugangsschlüssel aus einer Datei liest und nirgends ausgibt, und
das die üblichen Fehlschläge benennt statt nur einen Statuscode zu zeigen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 11:55:30 +02:00

42 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Lädt die gebaute APK in Gitas Paket-Registry.
#
# Der Weg über die Registry umgeht die Typenliste für Release-Anhänge, die
# `.apk` nicht enthält. Siehe RELEASE.md.
#
# Android/upload-package.sh 1.0.0
set -euo pipefail
VERSION="${1:?Aufruf: upload-package.sh <version>, z. B. 1.0.0}"
SERVER="${GITEA_SERVER:-https://git.home.fritob.de}"
OWNER="${GITEA_OWNER:-fritob}"
TOKEN_FILE="${GITEA_TOKEN_FILE:-$HOME/.gitea-token}"
APK="$(dirname "$0")/app/build/outputs/apk/release/app-release.apk"
[ -f "$APK" ] || {
echo "Keine APK gefunden. Erst bauen:" >&2
echo " source Android/env.sh && cd Android && ./gradlew :app:assembleRelease -PversionName=$VERSION" >&2
exit 1
}
[ -f "$TOKEN_FILE" ] || {
echo "Kein Zugangsschlüssel in $TOKEN_FILE." >&2
echo "In Gitea unter Einstellungen -> Anwendungen einen mit 'write:package' anlegen," >&2
echo "dann: printf %s 'DEIN_TOKEN' > $TOKEN_FILE && chmod 600 $TOKEN_FILE" >&2
exit 1
}
NAME="CamperMonitor-$VERSION.apk"
URL="$SERVER/api/packages/$OWNER/generic/camper-monitor/$VERSION/$NAME"
# Der Schlüssel geht nur an curl und steht nirgends in der Ausgabe.
CODE="$(curl -s -o /dev/null -w '%{http_code}' \
-H "Authorization: token $(cat "$TOKEN_FILE")" \
--upload-file "$APK" "$URL")"
case "$CODE" in
201) echo "Hochgeladen: $URL" ;;
409) echo "Version $VERSION liegt dort schon. Erst löschen oder Version erhöhen." >&2; exit 1 ;;
401|403) echo "Abgelehnt (HTTP $CODE) - fehlt dem Token das Recht 'write:package'?" >&2; exit 1 ;;
*) echo "Fehlgeschlagen, HTTP $CODE" >&2; exit 1 ;;
esac