MBMNET-App v2.8.2: Quellcode (GPLv3)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Executable
+66
@@ -0,0 +1,66 @@
|
||||
#!/bin/bash
|
||||
# Baut die App und lädt sie ins Repo "MBMNET" hoch. Danach aktualisiert sich jede
|
||||
# MBMNET-App beim nächsten Start von selbst.
|
||||
# Zusätzlich legt es auf Gitea ein Release "vX.Y.Z" mit .cia und .3dsx an (für Universal-Updater).
|
||||
#
|
||||
# Vorher in Makefile die VERSION erhöhen!
|
||||
# ./release.sh ["Release-Notizen"] bauen, hochladen, Release anlegen
|
||||
# ./release.sh --nur-release ["Notizen"] nur das Release zur aktuellen Version anlegen
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
VERSION=$(sed -n 's/^VERSION *:= *//p' Makefile)
|
||||
RELEASE=../release
|
||||
GITEA=https://git.mbm.wtf
|
||||
REPO=MrMaho/MBMNET
|
||||
|
||||
NUR_RELEASE=0
|
||||
if [ "${1:-}" = "--nur-release" ]; then NUR_RELEASE=1; shift; fi
|
||||
NOTIZEN=${1:-"MBMNET-App v$VERSION"}
|
||||
|
||||
if [ "$NUR_RELEASE" = 0 ]; then
|
||||
# Build-Umgebung mit makerom und bannertool (für die CIA), wird nur beim ersten Mal gebaut
|
||||
docker image inspect mbmnet-3ds-build >/dev/null 2>&1 || docker build -t mbmnet-3ds-build tools
|
||||
|
||||
echo "Baue MBMNET-App v$VERSION ..."
|
||||
docker run --rm -v "$PWD":/app -w /app mbmnet-3ds-build bash -c 'make clean >/dev/null && make && make cia'
|
||||
|
||||
cp mbmnet.3dsx mbmnet.cia "$RELEASE/"
|
||||
echo "$VERSION" > "$RELEASE/version.txt"
|
||||
|
||||
(cd "$RELEASE" && git add mbmnet.3dsx mbmnet.cia version.txt && git commit -m "MBMNET-App v$VERSION" && git push)
|
||||
fi
|
||||
|
||||
# --- Gitea-Release -------------------------------------------------------------------
|
||||
# Zugangsdaten wie bei git push aus dem Schlüsselbund; sie landen nur in einer curl-Konfiguration
|
||||
# über stdin (nicht in der Prozessliste, nicht in der Ausgabe).
|
||||
CRED=$(printf 'protocol=https\nhost=git.mbm.wtf\n\n' | git credential fill)
|
||||
GUSER=$(sed -n 's/^username=//p' <<<"$CRED")
|
||||
GPASS=$(sed -n 's/^password=//p' <<<"$CRED")
|
||||
api() { # api METHODE PFAD [weitere curl-Argumente]
|
||||
local method=$1 path=$2; shift 2
|
||||
printf 'user = "%s:%s"\n' "$GUSER" "$GPASS" | curl -sS --fail-with-body -K - -X "$method" "$GITEA/api/v1/repos/$REPO$path" "$@"
|
||||
}
|
||||
json() { python3 -c "import json,sys; d=json.load(sys.stdin); print($1)"; }
|
||||
|
||||
TAG="v$VERSION"
|
||||
COMMIT=$(git -C "$RELEASE" rev-parse HEAD)
|
||||
if ID=$( (api GET "/releases/tags/$TAG" | json "d['id']") 2>/dev/null ); then
|
||||
echo "Release $TAG gibt es schon (ID $ID), ersetze die Dateien ..."
|
||||
else
|
||||
BODY=$(TAG="$TAG" COMMIT="$COMMIT" NOTIZEN="$NOTIZEN" python3 -c \
|
||||
'import json,os; print(json.dumps({"tag_name": os.environ["TAG"], "target_commitish": os.environ["COMMIT"], "name": "MBMNET " + os.environ["TAG"], "body": os.environ["NOTIZEN"]}))')
|
||||
ID=$(api POST /releases -H 'Content-Type: application/json' -d "$BODY" | json "d['id']")
|
||||
echo "Release $TAG angelegt (ID $ID)"
|
||||
fi
|
||||
|
||||
# Vorhandene Dateien gleichen Namens löschen (bei erneutem Lauf), dann hochladen
|
||||
for f in mbmnet.cia mbmnet.3dsx; do
|
||||
for old in $(api GET "/releases/$ID/assets" | json "' '.join(str(a['id']) for a in d if a['name']=='$f')"); do
|
||||
api DELETE "/releases/$ID/assets/$old" >/dev/null
|
||||
done
|
||||
api POST "/releases/$ID/assets?name=$f" -F "attachment=@$RELEASE/$f" >/dev/null
|
||||
echo " $f hochgeladen"
|
||||
done
|
||||
|
||||
echo "Fertig: v$VERSION ist veröffentlicht ($GITEA/$REPO/releases/tag/$TAG)."
|
||||
Reference in New Issue
Block a user