Files
zwischenablage-server/client-desktop/build.py
T
duffyduckandClaude Opus 5.5 af51ef5701 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>
2026-10-17 12:45:17 +02:00

47 lines
1.8 KiB
Python

"""Baut den Desktop-Client fuer das aktuelle Betriebssystem (PyInstaller kann nicht cross-kompilieren).
python build.py
Ergebnis in dist/:
Windows dist/NetClip/NetClip.exe -> danach packaging/windows-installer.iss mit Inno Setup bauen
macOS dist/NetClip.app -> zusaetzlich dist/NetClip-macos.zip
Linux dist/NetClip/NetClip -> zusaetzlich dist/NetClip-linux-x86_64.tar.gz
"""
import platform
import shutil
import subprocess
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parent
def main():
if "--no-install" not in sys.argv:
subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements.txt", "pyinstaller"], cwd=ROOT)
if platform.system() == "Windows" and not (ROOT / "packaging" / "netclip.ico").exists():
make_ico()
subprocess.check_call([sys.executable, "-m", "PyInstaller", "--noconfirm", "--clean", "netclip.spec"], cwd=ROOT)
dist = ROOT / "dist"
system = platform.system()
if system == "Darwin":
shutil.make_archive(str(dist / "NetClip-macos"), "zip", dist, "NetClip.app")
elif system == "Linux":
shutil.copy(ROOT / "packaging" / "netclip.desktop", dist / "NetClip")
shutil.copy(ROOT / "packaging" / "install-linux.sh", dist / "NetClip")
shutil.make_archive(str(dist / f"NetClip-linux-{platform.machine()}"), "gztar", dist, "NetClip")
print("Fertig:", dist)
def make_ico():
"""Erzeugt packaging/netclip.ico aus dem gezeichneten App-Symbol."""
from PySide6.QtWidgets import QApplication
sys.path.insert(0, str(ROOT))
app = QApplication.instance() or QApplication([]) # noqa: F841
from netclip.ui import app_icon
app_icon().pixmap(256, 256).save(str(ROOT / "packaging" / "netclip.ico"))
if __name__ == "__main__":
main()