Modernes Design (Standard, Win95 als Legacy), Zeitraum abrechnen, Abrechnung erledigt, Linux-Build
- Design: „modern“ (hell, flach, wie Windows 11, normaler Windows-Rahmen) ist Standard; „win95“ bleibt unter Datei > Einstellungen wählbar (Einstellung „design“). - Export: Zeitraum von–bis (nach Aktivierungsdatum oder Abrechnungszeitraum des Anbieters), exportierte Positionen werden als abgerechnet gekennzeichnet (Betrag/Händler eingefroren) und per Fingerabdruck auch in späteren Dateien/Abrechnungen nicht noch einmal abgerechnet. - Datei > Abrechnung erledigt / wieder öffnen: erledigte Abrechnungen sind gegen Änderungen gesperrt. - DB-Schema v4 (Migration inkl. Fingerabdrücke für alte Positionen). - Linux-Build (python:3.12-bookworm) als zweiter Pipeline-Job mit Tests und Selbsttest; Release-Upload für beide Jobs über build/release_hochladen.sh. - Behoben: normaler Windows-Rahmen stürzte beim Start ab (Hauptrahmen.nativ fehlte). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
97c73b82c7
commit
851fd6600a
17 files changed
+829
-80
No files matched your search
Executable
+57
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
# Baut die Linux-Version (einzelne Programmdatei) – im Container python:3.12-bookworm (glibc 2.36:
|
||||
# läuft ab Debian 12, Ubuntu 24.04, Linux Mint 22; Debian 11 ist ausgelaufen).
|
||||
# Ergebnis: dist/Provisionsmanager95-linux-x86_64-<version>.tar.gz
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
export LANG=C.UTF-8 LC_ALL=C.UTF-8
|
||||
|
||||
if ! command -v Xvfb >/dev/null; then
|
||||
apt-get update -qq && apt-get install -y -qq --no-install-recommends xvfb xauth fonts-dejavu-core >/dev/null
|
||||
fi
|
||||
Xvfb :91 -screen 0 1280x800x24 -nolisten tcp >/dev/null 2>&1 &
|
||||
XVFB_PID=$!
|
||||
trap 'kill $XVFB_PID 2>/dev/null || true' EXIT
|
||||
export DISPLAY=:91
|
||||
sleep 1
|
||||
|
||||
python3 --version
|
||||
python3 -m pip install --disable-pip-version-check -q -r requirements-dev.txt
|
||||
|
||||
echo "== Tests inkl. Oberfläche (Linux) =="
|
||||
PROVTOOL_GUI_TESTS=1 timeout 900 python3 -m pytest -v -p no:cacheprovider
|
||||
|
||||
VERSION=$(python3 -c "import provtool; print(provtool.__version__)")
|
||||
echo "== PyInstaller (Version $VERSION) =="
|
||||
python3 -m PyInstaller --noconfirm --clean --distpath dist --workpath build/tmp build/provisionsmanager.spec
|
||||
test -x dist/Provisionsmanager95
|
||||
|
||||
echo "== Selbsttest des fertigen Programms =="
|
||||
rm -f selbsttest.txt
|
||||
set +e
|
||||
timeout 300 dist/Provisionsmanager95 --selbsttest selbsttest.txt
|
||||
CODE=$?
|
||||
set -e
|
||||
cat selbsttest.txt 2>/dev/null || echo "(keine Ergebnisdatei)"
|
||||
if [ "$CODE" -ne 0 ] || ! head -1 selbsttest.txt 2>/dev/null | grep -qx OK; then
|
||||
echo "Selbsttest FEHLGESCHLAGEN (Exit-Code $CODE)"; exit 1
|
||||
fi
|
||||
echo "Selbsttest bestanden"
|
||||
|
||||
PAKET="Provisionsmanager95-linux-x86_64-$VERSION"
|
||||
rm -rf "dist/$PAKET" && mkdir -p "dist/$PAKET"
|
||||
cp dist/Provisionsmanager95 assets/app.png "dist/$PAKET/"
|
||||
cp README.md "dist/$PAKET/LIESMICH.md"
|
||||
cat > "dist/$PAKET/provisionsmanager95.desktop" <<DESKTOP
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Provisions-Manager 95
|
||||
Comment=Provisionsabrechnung für Unterhändler
|
||||
Exec=sh -c '"\$(dirname "%k")/Provisionsmanager95"'
|
||||
Icon=app
|
||||
Terminal=false
|
||||
Categories=Office;Finance;
|
||||
DESKTOP
|
||||
tar -C dist -czf "dist/$PAKET.tar.gz" "$PAKET"
|
||||
echo "$VERSION" > dist/VERSION
|
||||
ls -la dist
|
||||
+2
-1
@@ -15,7 +15,8 @@ faulthandler.enable(open(os.path.join(aus, "absturz.txt"), "w"))
|
||||
home = tempfile.mkdtemp()
|
||||
os.environ["PROVTOOL_HOME"] = home
|
||||
with open(os.path.join(home, "einstellungen.json"), "w") as f:
|
||||
json.dump({"assistent_erledigt": True, "tipps_beim_start": False, "fenster": "900x560+100+100"}, f)
|
||||
json.dump({"assistent_erledigt": True, "tipps_beim_start": False, "fenster": "900x560+100+100",
|
||||
"design": "win95"}, f) # nur Win95 hat den eigenen Fensterrahmen
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
from provtool.gui import app as A # noqa: E402
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
# PyInstaller-Spezifikation – erzeugt eine einzelne Provisionsmanager95.exe
|
||||
# Aufruf (unter Windows oder Wine): pyinstaller --noconfirm build/provisionsmanager.spec
|
||||
# PyInstaller-Spezifikation – erzeugt eine einzelne Programmdatei (Windows: .exe, Linux: ELF)
|
||||
# Aufruf: pyinstaller --noconfirm build/provisionsmanager.spec
|
||||
import os
|
||||
import sys
|
||||
|
||||
WIN = sys.platform.startswith("win")
|
||||
|
||||
ROOT = os.path.abspath(os.path.join(SPECPATH, ".."))
|
||||
|
||||
@@ -20,8 +23,8 @@ exe = EXE(
|
||||
a.datas,
|
||||
[],
|
||||
name="Provisionsmanager95",
|
||||
icon=os.path.join(ROOT, "assets", "app.ico"),
|
||||
version=os.path.join(ROOT, "build", "version_info.txt"),
|
||||
icon=os.path.join(ROOT, "assets", "app.ico") if WIN else None,
|
||||
version=os.path.join(ROOT, "build", "version_info.txt") if WIN else None,
|
||||
console=False,
|
||||
upx=False,
|
||||
debug=False,
|
||||
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
# Hängt Dateien an das Gitea-Release des Tags (legt es an, falls es noch fehlt – Windows- und
|
||||
# Linux-Job laufen parallel, wer zuerst fertig ist, legt es an).
|
||||
# Aufruf: TOKEN=… API=…/api/v1/repos/<owner>/<repo> TAG=v1.2.3 build/release_hochladen.sh datei…
|
||||
set -eu
|
||||
VERSION=$(tr -d '\r\n' < dist/VERSION)
|
||||
if [ "v$VERSION" != "$TAG" ]; then
|
||||
echo "Tag $TAG passt nicht zu provtool/__init__.py (Version $VERSION)"; exit 1
|
||||
fi
|
||||
release_id() { curl -sf "$API/releases/tags/$TAG" -H "Authorization: token $TOKEN" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2; }
|
||||
id=$(release_id || true)
|
||||
if [ -z "$id" ]; then
|
||||
curl -sf -X POST "$API/releases" -H "Authorization: token $TOKEN" -H "Content-Type: application/json" \
|
||||
-d "{\"tag_name\":\"$TAG\",\"name\":\"Provisions-Manager 95 $TAG\",\"body\":\"Windows: .exe herunterladen und starten. Linux: tar.gz entpacken, Provisionsmanager95 starten (ab Debian 12 / Ubuntu 24.04).\"}" \
|
||||
>/dev/null || sleep 5 # Gleichzeitig angelegt? Dann gibt es das Release jetzt.
|
||||
id=$(release_id)
|
||||
fi
|
||||
for f in "$@"; do
|
||||
curl -sf -X POST "$API/releases/$id/assets?name=$(basename "$f")" \
|
||||
-H "Authorization: token $TOKEN" -F "attachment=@$f" >/dev/null
|
||||
echo "hochgeladen: $f"
|
||||
done
|
||||
Reference in new issue
Block a user