Compare commits

...
Author SHA1 Message Date
duffyduck bbeea24759 release(agent): bump to 0.0.1.8 2026-10-25 14:21:09 +01:00
duffyduckandClaude Opus 5.5 2a18280863 feat(host-agent): Linux-Release als Zip mit Dienst-Installer
Statt der nackten Binary haengt release_agent.sh jetzt
aria-host-agent-linux-x64-v<version>.zip an: Binary, install-service.sh,
aria-host-agent.service, .env.example und LIESMICH.txt (Start direkt oder
als systemd-Dienst). Ausfuehrbar-Rechte bleiben beim Entpacken erhalten.

install-service.sh startet den Dienst neu statt nur "enable --now" — so
laedt ein Update die neue Binary auch, wenn der Dienst schon laeuft.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 14:17:33 +01:00
duffyduck d474447e54 release(agent): bump to 0.0.1.7 2026-10-25 14:14:01 +01:00
duffyduckandClaude Opus 5.5 15ec8f1be1 fix(host-agent): Windows-Build scheitert nicht mehr an nssm.cc-Ausfaellen
nssm.cc lieferte 503 → Windows-Build im Release fehlgeschlagen, und das
Skript hat die Ursache verschluckt (>/dev/null). Jetzt: 3 Versuche je Quelle,
Ersatz aus dem Internet Archive, feste SHA-256-Pruefsumme (beide Quellen
liefern dieselbe Datei). release_agent.sh schreibt das Build-Log nach
dist/build-win.log und zeigt bei Fehlern die letzten Zeilen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 14:09:59 +01:00
duffyduck f5f287da54 release(agent): bump to 0.0.1.6 2026-10-25 14:04:25 +01:00
duffyduckandClaude Opus 5.5 9c4b8cbdd7 feat(release): Versionsnummer zaehlt wie ein Kilometerzaehler
Hintere Stellen laufen 0..9 und uebertragen nach vorne (0.2.6.9 → 0.2.7.0,
0.2.9.9 → 0.3.0.0), die vorderste zaehlt einfach weiter (9.9.9.9 → 10.0.0.0).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 14:00:47 +01:00
duffyduckandClaude Opus 5.5 9ad402876d feat(release): Versionsnummer zaehlt automatisch hoch
./release.sh und host-agent/release_agent.sh ohne Argument nehmen die hoechste
Version aus Datei (package.json bzw. build.gradle) und letztem Git-Tag und
zaehlen die letzte Stelle hoch (0.2.6.1 → 0.2.6.2). Mit Argument wie bisher.
Vor dem Bauen: Anzeige alt → neu und Rueckfrage; existiert der Tag schon oder
ist die Version ungueltig, bricht das Skript vorher ab.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:59:16 +01:00
9 changed files with 133 additions and 20 deletions
+4 -3
View File
@@ -672,7 +672,8 @@ cd android
### Release auf Gitea veroeffentlichen
```bash
./release.sh 1.2.0
./release.sh # Version automatisch +1 (0.2.6.1 → 0.2.6.2, 0.2.6.9 → 0.2.7.0)
./release.sh 1.2.0 # oder Version selbst setzen
```
Das Script macht alles in einem Schritt:
@@ -706,7 +707,7 @@ die VM voll laeuft:
Die App prueft beim Start ob eine neuere Version auf dem RVS liegt.
Der Update-Flow:
1. `./release.sh 0.0.3.0` → APK wird auf RVS kopiert (via scp)
1. `./release.sh` (Version automatisch +1) → APK wird auf RVS kopiert (via scp)
2. Alternativ: `git pull` auf dem RVS-Server → APK in `rvs/updates/`
3. App sendet `update_check` mit aktueller Version
4. RVS vergleicht → sendet `update_available`
@@ -1238,7 +1239,7 @@ cd host-agent/android && ./build.sh # Docker (Android-SDK + Gradle)
# -> dist/aria-android-agent.apk
# Release mit allen Agent-Artefakten (Linux/Windows/Android) als Gitea-Assets:
cd host-agent && ./release_agent.sh 0.0.1.4
cd host-agent && ./release_agent.sh # Version automatisch +1
```
Der Signaturschluessel liegt fest in `host-agent/android/aria-agent.keystore`
+10 -1
View File
@@ -18,7 +18,16 @@ WORKDIR /work
# nssm — Non-Sucking Service Manager (public domain): macht aus der Konsolen-.exe
# einen sauberen Windows-Dienst (die .exe selbst spricht das SCM nicht).
RUN curl -fsSL https://nssm.cc/release/nssm-2.24.zip -o /tmp/nssm.zip \
# nssm.cc faellt oefter aus (503) — dann Ersatz aus dem Internet Archive.
# Beide liefern dieselbe Datei; die Pruefsumme stellt das sicher.
ARG NSSM_SHA256=727d1e42275c605e0f04aba98095c38a8e1e46def453cdffce42869428aa6743
RUN for url in https://nssm.cc/release/nssm-2.24.zip \
"https://web.archive.org/web/2024id_/https://nssm.cc/release/nssm-2.24.zip"; do \
curl -fsSL --retry 3 --retry-delay 5 --retry-all-errors "$url" -o /tmp/nssm.zip \
&& echo "$NSSM_SHA256 /tmp/nssm.zip" | sha256sum -c - && break; \
echo "nssm: $url fehlgeschlagen, versuche naechste Quelle" >&2; rm -f /tmp/nssm.zip; \
done \
&& test -f /tmp/nssm.zip \
&& unzip -q /tmp/nssm.zip -d /tmp \
&& cp /tmp/nssm-2.24/win64/nssm.exe ./nssm.exe \
&& rm -rf /tmp/nssm*
+8 -4
View File
@@ -142,15 +142,19 @@ Danach die `.env` unter `%ProgramData%\ARIA-Host-Agent\` mit RVS-Zugang +
## Release (Binaries als Gitea-Assets)
`release_agent.sh <version>` baut alles Docker-Baubare und hängt es als
`release_agent.sh [version]` baut alles Docker-Baubare und hängt es als
**Release-Asset** an den Tag `agent-v<version>` — nichts landet im Git-Tree:
```bash
./release_agent.sh 0.2.0 # Linux + Android + Windows (Wine)
SKIP_WINDOWS=1 ./release_agent.sh 0.2.0 # ohne Windows (schneller)
./release_agent.sh # Version automatisch +1 (0.0.1.6 → 0.0.1.7)
./release_agent.sh 0.2.0 # Version selbst setzen; Linux + Android + Windows (Wine)
SKIP_WINDOWS=1 ./release_agent.sh # ohne Windows (schneller)
```
Assets: `aria-host-agent-linux-x64`, `aria-host-agent-android-agent-v<v>.apk`,
Assets: `aria-host-agent-linux-x64-v<v>.zip` (Binary + `install-service.sh` +
systemd-Unit + `.env.example` + `LIESMICH.txt` — entpacken, `.env` anlegen, dann
`./aria-host-agent` oder als Dienst `sudo ./install-service.sh ./.env`),
`aria-host-agent-android-agent-v<v>.apk`,
`aria-host-agent-windows.exe`, `aria-host-agent-windows-setup.exe`. **macOS** ist
nicht Docker-baubar — auf einem Mac `./build-native.sh` laufen lassen und das
Ergebnis vor dem Release nach `dist/aria-host-agent-macos` legen, dann nimmt das
+1 -1
View File
@@ -246,7 +246,7 @@ es wird als **Release-Asset** an einen Tag gehaengt. Das macht `release_agent.sh
```bash
cd host-agent
./release_agent.sh 0.2.0
./release_agent.sh # Version automatisch +1 (oder: ./release_agent.sh 0.2.0)
```
Das Skript (wie die `release.sh` der Haupt-App, Version als Parameter):
+2 -2
View File
@@ -11,8 +11,8 @@ android {
applicationId 'de.hackersoft.ariaagent'
minSdk 26
targetSdk 33 // 33 vermeidet die Foreground-Service-Typ-Pflicht von 34
versionCode 105
versionName '0.0.1.5'
versionCode 108
versionName '0.0.1.8'
}
// Fester Signaturschlüssel: jeder Build signiert mit DEMSELBEN Key, damit
+1 -1
View File
@@ -162,7 +162,7 @@ OUT_MAX_CHARS_HARD = int(os.environ.get("OUT_MAX_CHARS_HARD", "200000") or "2000
FILE_MAX_BYTES = int(os.environ.get("FILE_MAX_BYTES", str(10 * 1024 * 1024)) or str(10 * 1024 * 1024))
# Version (wird von release_agent.sh beim Release gesetzt).
AGENT_VERSION = "0.0.1.5"
AGENT_VERSION = "0.0.1.8"
HEARTBEAT_SEC = 25
+4 -1
View File
@@ -66,7 +66,10 @@ else
fi
systemctl daemon-reload
systemctl enable --now aria-host-agent
systemctl enable aria-host-agent
# restart statt "enable --now": bei einem Update laeuft der Dienst schon und
# muss die NEUE Binary laden
systemctl restart aria-host-agent
echo
echo "✓ Installiert & gestartet."
+70 -5
View File
@@ -5,7 +5,8 @@
# Gitea-Release-Assets an einen Tag. NICHTS wandert in den Git-Tree —
# Binaries leben nur unter "Releases" (blaeht clone/History nicht auf).
#
# Verwendung: ./release_agent.sh <version> (z.B. ./release_agent.sh 0.2.0)
# Verwendung: ./release_agent.sh (Version automatisch +1)
# ./release_agent.sh 0.1.0.0 (Version selbst setzen)
#
# Artefakte:
# - Linux-x64-Binary (Docker, PyInstaller) -> immer
@@ -31,8 +32,38 @@ ROOT_DIR="$(cd .. && pwd)"
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m'
# ── Parameter ────────────────────────────────────────────────────────
VERSION=${1:?"Usage: ./release_agent.sh <version> (z.B. 0.2.0)"}
# Ohne Angabe: letzte Stelle automatisch hochzaehlen. Mit Angabe: genau diese.
# Naechste Version: hoechste aus Datei-Version und letztem Git-Tag, dann wie
# ein Kilometerzaehler +1: hintere Stellen laufen 0..9 und uebertragen nach
# vorne (0.2.6.9 → 0.2.7.0, 0.2.9.9 → 0.3.0.0), die vorderste zaehlt einfach
# weiter (9.9.9.9 → 10.0.0.0). Aufruf: next_version <aktuelle> <tag-prefix>
next_version() {
local cur="$1" prefix="$2" tagv best
tagv=$(git tag -l "${prefix}*" | sed "s/^${prefix}//" | grep -E '^[0-9]+(\.[0-9]+)+$' | sort -V | tail -1)
best=$(printf '%s\n%s\n' "$cur" "$tagv" | grep -E '^[0-9]+(\.[0-9]+)+$' | sort -V | tail -1)
[ -z "$best" ] && best="0.0.0.0"
awk -F. -v OFS=. '{
for (i = NF; i >= 1; i--) {
if (i == 1 || $i < 9) { $i = $i + 1; break }
$i = 0 # 9 → 0, Uebertrag nach vorne
}
print
}' <<< "$best"
}
CURRENT=$(grep -m1 "versionName" android/app/build.gradle | sed -E "s/.*versionName '([^']*)'.*/\1/")
VERSION=${1:-$(next_version "$CURRENT" "agent-v")}
if ! [[ "$VERSION" =~ ^[0-9]+(\.[0-9]+)+$ ]]; then
echo -e "${RED}Ungueltige Version: $VERSION (z.B. 0.0.1.7)${NC}"; exit 1
fi
TAG="agent-v$VERSION"
if git rev-parse "$TAG" &>/dev/null; then
echo -e "${RED}Tag $TAG gibt es schon — andere Version angeben.${NC}"; exit 1
fi
echo -e "${CYAN}Agent-Version: $CURRENT → ${GREEN}$VERSION${NC}"
read -p "Release $VERSION bauen? [J/n] " OK
[[ "$OK" =~ ^[nN] ]] && { echo "Abgebrochen."; exit 0; }
# ── Gitea-Konfiguration (env > host-agent/.env > Repo-Wurzel-.env) ────
[ -f "$SCRIPT_DIR/.env" ] && source "$SCRIPT_DIR/.env"
@@ -75,6 +106,38 @@ LINUX_BIN="$SCRIPT_DIR/dist/aria-host-agent"
[ -f "$LINUX_BIN" ] || { echo -e "${RED}Linux-Binary fehlt: $LINUX_BIN${NC}"; exit 1; }
echo -e " ${GREEN}✓${NC} Linux-Binary ($(du -h "$LINUX_BIN" | cut -f1))"
# Linux-Paket: Binary + Dienst-Installer + Unit + .env-Vorlage in EINER Zip —
# entpacken, .env anlegen, optional als Dienst installieren.
LINUX_PKG_NAME="aria-host-agent-linux-x64-v$VERSION"
LINUX_ZIP="$SCRIPT_DIR/dist/$LINUX_PKG_NAME.zip"
PKG_TMP="$(mktemp -d)"
mkdir -p "$PKG_TMP/$LINUX_PKG_NAME"
install -m 0755 "$LINUX_BIN" "$PKG_TMP/$LINUX_PKG_NAME/aria-host-agent"
install -m 0755 install-service.sh "$PKG_TMP/$LINUX_PKG_NAME/install-service.sh"
install -m 0644 aria-host-agent.service "$PKG_TMP/$LINUX_PKG_NAME/aria-host-agent.service"
install -m 0644 .env.example "$PKG_TMP/$LINUX_PKG_NAME/.env.example"
cat > "$PKG_TMP/$LINUX_PKG_NAME/LIESMICH.txt" <<EOF
ARIA Host-Agent $VERSION (Linux x86_64)
1) Zugangsdaten eintragen:
cp .env.example .env && nano .env (RVS_HOST, RVS_PORT, RVS_TOKEN, ...)
2a) Einfach starten (laeuft, solange das Terminal offen ist):
./aria-host-agent
2b) ODER als Dienst installieren (startet automatisch mit dem Rechner):
sudo ./install-service.sh ./.env
Danach: systemctl status aria-host-agent · journalctl -u aria-host-agent -f
Update: neue Zip entpacken, nochmal sudo ./install-service.sh /etc/aria-host-agent/.env
Screenshots brauchen eine grafische Sitzung — als Dienst gehen sie nur mit
DISPLAY/XAUTHORITY in der Unit (siehe aria-host-agent.service).
EOF
rm -f "$LINUX_ZIP"
( cd "$PKG_TMP" && zip -qr "$LINUX_ZIP" "$LINUX_PKG_NAME" )
rm -rf "$PKG_TMP"
echo -e " ${GREEN}✓${NC} Linux-Paket $LINUX_PKG_NAME.zip ($(du -h "$LINUX_ZIP" | cut -f1))"
( cd android && ./build.sh >/dev/null )
APK="$SCRIPT_DIR/android/dist/aria-android-agent.apk"
[ -f "$APK" ] || { echo -e "${RED}APK fehlt: $APK${NC}"; exit 1; }
@@ -86,18 +149,20 @@ if [ "${SKIP_WINDOWS:-0}" = "1" ]; then
echo -e " ${YELLOW}Windows-Build uebersprungen (SKIP_WINDOWS=1)${NC}"
else
echo -e " ${CYAN}…${NC} Windows-.exe + setup.exe bauen (Wine, kann dauern)"
if ./build-win.sh "$VERSION" >/dev/null 2>&1; then
WIN_LOG="$SCRIPT_DIR/dist/build-win.log"
if ./build-win.sh "$VERSION" >"$WIN_LOG" 2>&1; then
echo -e " ${GREEN}✓${NC} Windows-.exe + setup.exe"
else
echo -e " ${YELLOW}Windows-Build fehlgeschlagen — Release laeuft ohne Windows weiter.${NC}"
echo -e " ${YELLOW}(Einzeln testen: ./build-win.sh $VERSION)${NC}"
echo -e " ${YELLOW}Letzte Zeilen (ganzes Log: $WIN_LOG):${NC}"
tail -n 8 "$WIN_LOG" | sed 's/^/ /'
fi
fi
echo ""
# Asset-Liste aufbauen: "lokaler_pfad::asset-name"
ASSETS=(
"$LINUX_BIN::aria-host-agent-linux-x64"
"$LINUX_ZIP::$LINUX_PKG_NAME.zip"
"$APK::aria-host-agent-android-$TAG.apk"
)
# Native Artefakte (nur wenn vorhanden): Windows aus build-win.sh, macOS
+33 -2
View File
@@ -2,7 +2,8 @@
# ════════════════════════════════════════════════
# ARIA — Release Script
# Baut APK, taggt, erstellt Gitea Release
# Verwendung: ./release.sh 1.2.0
# Verwendung: ./release.sh (Version automatisch +1)
# ./release.sh 0.3.0.0 (Version selbst setzen)
# Gitea-Kennwort wird interaktiv abgefragt.
# ════════════════════════════════════════════════
@@ -16,8 +17,38 @@ CYAN='\033[0;36m'
NC='\033[0m'
# ── Parameter ─────────────────────────────────
VERSION=${1:?"Usage: ./release.sh <version> (z.B. 1.2.0)"}
# Ohne Angabe: letzte Stelle automatisch hochzaehlen. Mit Angabe: genau diese.
# Naechste Version: hoechste aus Datei-Version und letztem Git-Tag, dann wie
# ein Kilometerzaehler +1: hintere Stellen laufen 0..9 und uebertragen nach
# vorne (0.2.6.9 → 0.2.7.0, 0.2.9.9 → 0.3.0.0), die vorderste zaehlt einfach
# weiter (9.9.9.9 → 10.0.0.0). Aufruf: next_version <aktuelle> <tag-prefix>
next_version() {
local cur="$1" prefix="$2" tagv best
tagv=$(git tag -l "${prefix}*" | sed "s/^${prefix}//" | grep -E '^[0-9]+(\.[0-9]+)+$' | sort -V | tail -1)
best=$(printf '%s\n%s\n' "$cur" "$tagv" | grep -E '^[0-9]+(\.[0-9]+)+$' | sort -V | tail -1)
[ -z "$best" ] && best="0.0.0.0"
awk -F. -v OFS=. '{
for (i = NF; i >= 1; i--) {
if (i == 1 || $i < 9) { $i = $i + 1; break }
$i = 0 # 9 → 0, Uebertrag nach vorne
}
print
}' <<< "$best"
}
CURRENT=$(grep -m1 '"version"' android/package.json | sed -E 's/.*"version": *"([^"]*)".*/\1/')
VERSION=${1:-$(next_version "$CURRENT" "v")}
if ! [[ "$VERSION" =~ ^[0-9]+(\.[0-9]+)+$ ]]; then
echo -e "${RED}Ungueltige Version: $VERSION (z.B. 0.2.6.2)${NC}"; exit 1
fi
TAG="v$VERSION"
if git rev-parse "$TAG" &>/dev/null; then
echo -e "${RED}Tag $TAG gibt es schon — andere Version angeben.${NC}"; exit 1
fi
echo -e "${CYAN}App-Version: $CURRENT → ${GREEN}$VERSION${NC}"
read -p "Release $VERSION bauen? [J/n] " OK
[[ "$OK" =~ ^[nN] ]] && { echo "Abgebrochen."; exit 0; }
# ── Gitea-Konfiguration ──────────────────────
# Aus .env lesen falls vorhanden (GITEA_URL, GITEA_REPO, GITEA_USER)