Release-Skript mit automatischer Versionierung und Docker-Builds

- scripts/release.py: Version (patch/minor/major) automatisch hochzaehlen, CHANGELOG
  abschliessen, committen, taggen; --build baut alle Pakete in Docker
- docker-build/: Build-Container fuer Windows (Wine + PyInstaller + Inno Setup),
  Linux und Android; Server-Image als docker-save-Archiv
- Versionsanzeige im Desktop-Client und in der Android-App
- Feste Android-Release-Signatur aus secrets/ (nicht im Git)
- Windows-Icon im Repo, damit der Wine-Build ohne Qt-Fenster auskommt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
duffyduck
2026-10-17 12:45:17 +02:00
co-authored by Claude Opus 5.5
parent 5cbe6376f0
commit af51ef5701
20 changed files with 362 additions and 12 deletions
+12
View File
@@ -0,0 +1,12 @@
# Build-Umgebung fuer die Android-App (JDK 17 + Android SDK)
FROM eclipse-temurin:17-jdk-jammy
ENV ANDROID_HOME=/opt/android-sdk ANDROID_SDK_ROOT=/opt/android-sdk
RUN apt-get update && apt-get install -y --no-install-recommends unzip wget && rm -rf /var/lib/apt/lists/* \
&& mkdir -p $ANDROID_HOME/cmdline-tools && cd /tmp \
&& wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O tools.zip \
&& unzip -q tools.zip -d $ANDROID_HOME/cmdline-tools && mv $ANDROID_HOME/cmdline-tools/cmdline-tools $ANDROID_HOME/cmdline-tools/latest \
&& rm tools.zip \
&& yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses > /dev/null \
&& $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platforms;android-35" "build-tools;35.0.0" > /dev/null
COPY docker-build/build-android.sh /usr/local/bin/build-android.sh
CMD ["sh", "/usr/local/bin/build-android.sh"]
+10
View File
@@ -0,0 +1,10 @@
#!/bin/sh
# Laeuft im Container: /src (Repo, nur lesend) -> /out
set -e
rm -rf /work && mkdir -p /work && cp -r /src/client-android /work/ && mkdir -p /work/secrets
[ -d /src/secrets ] && cp -r /src/secrets/. /work/secrets/
cd /work/client-android && rm -rf .gradle build app/build
rm -f local.properties
./gradlew --no-daemon -q assembleRelease
cp app/build/outputs/apk/release/app-release.apk "/out/NetClip-${VERSION}.apk"
chown -R "${HOST_UID:-0}:${HOST_GID:-0}" /out
+8
View File
@@ -0,0 +1,8 @@
#!/bin/sh
set -e
rm -rf /work && mkdir -p /work && cp -r /src/client-desktop /work/
cd /work/client-desktop && rm -rf build dist netclip/__pycache__
pip install -q -r requirements.txt
python build.py --no-install
cp dist/NetClip-linux-*.tar.gz "/out/NetClip-${VERSION}-linux-$(uname -m).tar.gz"
chown -R "${HOST_UID:-0}:${HOST_GID:-0}" /out
+12
View File
@@ -0,0 +1,12 @@
#!/bin/sh
set -e
rm -rf /work && mkdir -p /work && cp -r /src/client-desktop /work/
cd /work/client-desktop && rm -rf build dist netclip/__pycache__
wine python -m pip install -q -r requirements.txt -c Z:/usr/local/bin/windows-constraints.txt
wine python -m PyInstaller --noconfirm --clean netclip.spec
ISCC=$(find /opt/wineprefix/drive_c -iname ISCC.exe | head -1)
(cd packaging && xvfb-run -a wine "$ISCC" /Q windows-installer.iss)
cp dist/NetClip-Setup-*.exe "/out/NetClip-${VERSION}-windows-setup.exe"
(cd dist && zip -qr "/out/NetClip-${VERSION}-windows-portable.zip" NetClip)
wineserver -w || true
chown -R "${HOST_UID:-0}:${HOST_GID:-0}" /out
+10
View File
@@ -0,0 +1,10 @@
# Build-Umgebung fuer den Linux-Desktop-Client (PyInstaller). Debian 12 -> laeuft auf glibc >= 2.36.
FROM python:3.12-slim-bookworm
RUN apt-get update && apt-get install -y --no-install-recommends binutils libgl1 libegl1 libxkbcommon0 \
libxkbcommon-x11-0 libfontconfig1 libdbus-1-3 libglib2.0-0 libxcb-cursor0 libxcb-icccm4 libxcb-keysyms1 \
libxcb-shape0 libxcb-image0 libxcb-render-util0 libxcb-randr0 libxcb-xinerama0 \
&& rm -rf /var/lib/apt/lists/*
COPY client-desktop/requirements.txt /tmp/requirements.txt
RUN pip install --no-cache-dir -r /tmp/requirements.txt pyinstaller
COPY docker-build/build-linux.sh /usr/local/bin/build-linux.sh
CMD ["sh", "/usr/local/bin/build-linux.sh"]
+3
View File
@@ -0,0 +1,3 @@
# Neuere PySide6-Versionen laden unter Wine 9 nicht (QtCore-DLL), 6.8 ist Qt-LTS.
PySide6-Essentials==6.8.3
shiboken6==6.8.3
+12
View File
@@ -0,0 +1,12 @@
# Build-Umgebung fuer den Windows-Client: Windows-Python + PyInstaller + Inno Setup unter Wine
FROM tobix/pywine:3.12
ARG INNO_VERSION=6.7.3
RUN apt-get update && apt-get install -y --no-install-recommends xvfb xauth wget zip && rm -rf /var/lib/apt/lists/* \
&& wget -q https://github.com/jrsoftware/issrc/releases/download/is-$(echo ${INNO_VERSION} | tr . _)/innosetup-${INNO_VERSION}.exe -O /tmp/is.exe \
&& xvfb-run -a wine /tmp/is.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP- /ALLUSERS \
&& rm /tmp/is.exe && wineserver -w
COPY client-desktop/requirements.txt docker-build/windows-constraints.txt /tmp/
RUN wine python -m pip install --no-cache-dir -r Z:/tmp/requirements.txt -c Z:/tmp/windows-constraints.txt pyinstaller \
&& wineserver -w
COPY docker-build/build-windows.sh docker-build/windows-constraints.txt /usr/local/bin/
CMD ["sh", "/usr/local/bin/build-windows.sh"]