diff --git a/.gitea/workflows/build-release.yml b/.gitea/workflows/build-release.yml new file mode 100644 index 0000000..ebd3e6c --- /dev/null +++ b/.gitea/workflows/build-release.yml @@ -0,0 +1,67 @@ +name: Build Windows EXE & Release + +on: + push: + tags: + - 'v*' # Wird ausgelöst wenn du z.B. "v1.0.0" pushst + +jobs: + build-windows: + runs-on: windows-latest # Benötigt einen Windows-Runner! + + steps: + - name: Code auschecken + uses: actions/checkout@v4 + + - name: Python 3.11 installieren + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: FFmpeg installieren (via Chocolatey) + run: | + choco install ffmpeg -y + shell: powershell + + - name: Python-Abhängigkeiten installieren + run: | + pip install --upgrade pip + pip install mutagen pydub pyinstaller + + - name: .exe bauen mit PyInstaller + run: | + pyinstaller ` + --onefile ` + --windowed ` + --icon=icon.ico ` + --name="fcco-Converter" ` + --add-data="icon.ico;." ` + main.py + shell: powershell + + - name: Release-Archiv erstellen (ZIP) + run: | + Compress-Archive -Path dist\fcco-Converter.exe -DestinationPath dist\fcco-Converter-${{ gitea.ref_name }}-windows.zip + shell: powershell + + - name: Gitea Release erstellen & EXE hochladen + uses: https://gitea.com/actions/gitea-release-action@main + with: + token: ${{ secrets.RELEASE_TOKEN }} + tag_name: ${{ gitea.ref_name }} + release_name: "fcco-Converter ${{ gitea.ref_name }}" + body: | + ## fcco-Converter ${{ gitea.ref_name }} + + ### Download + - **fcco-Converter-${{ gitea.ref_name }}-windows.zip** – Windows Standalone (.exe) + + ### Voraussetzungen + - FFmpeg muss auf dem System installiert sein (oder im PATH liegen) + - Beim ersten Start: `settings.json` wird automatisch erstellt + + ### Installation + 1. ZIP entpacken + 2. `fcco-Converter.exe` starten + files: | + dist/fcco-Converter-${{ gitea.ref_name }}-windows.zip diff --git a/.gitignore b/.gitignore index 49cbfc2..e88d3aa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,13 @@ .DS_Store Cover/* App -.venv \ No newline at end of file +.venv + +# PyInstaller Build-Artefakte +build/ +dist/ +__pycache__/ +*.pyc + +# Laufzeit-Dateien (werden lokal generiert) +history.json \ No newline at end of file diff --git a/fcco-Converter.spec b/fcco-Converter.spec new file mode 100644 index 0000000..7f51d86 --- /dev/null +++ b/fcco-Converter.spec @@ -0,0 +1,58 @@ +# fcco-Converter.spec +# Für lokalen Build auf Windows: pyinstaller fcco-Converter.spec + +block_cipher = None + +a = Analysis( + ['main.py'], + pathex=[], + binaries=[], + datas=[ + ('icon.ico', '.'), # Icon miteinbinden + ('settings.json', '.'), # Standard-Settings + ], + hiddenimports=[ + 'mutagen', + 'mutagen.easyid3', + 'mutagen.id3', + 'pydub', + 'tkinter', + 'tkinter.ttk', + 'tkinter.filedialog', + 'tkinter.messagebox', + 'tkinter.simpledialog', + ], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + noarchive=False, +) + +pyz = PYZ(a.pure, a.zlib, cipher=block_cipher) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.zipfiles, + a.datas, + [], + name='fcco-Converter', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=False, # Kein Konsolenfenster (GUI-App) + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, + icon='icon.ico', +)