feat: Add PyInstaller configuration, GitHub Actions for release builds, and update README with executable installation options.

This commit is contained in:
MrUnknownDE
2025-12-30 14:18:53 +01:00
parent e8a77bfff6
commit 1b22018b8e
5 changed files with 251 additions and 0 deletions

103
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,103 @@
name: Build and Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
jobs:
build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyinstaller
pip install -e .
- name: Build executable
run: |
pyinstaller --onefile --name nvr-export --console src/tplink_nvr_export/cli.py
- name: Test executable
run: |
./dist/nvr-export.exe --version
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: nvr-export-windows
path: dist/nvr-export.exe
build-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyinstaller
pip install -e .
- name: Build executable
run: |
pyinstaller --onefile --name nvr-export --console src/tplink_nvr_export/cli.py
- name: Make executable
run: chmod +x dist/nvr-export
- name: Test executable
run: |
./dist/nvr-export --version
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: nvr-export-linux
path: dist/nvr-export
release:
needs: [build-windows, build-linux]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
permissions:
contents: write
steps:
- name: Download Windows artifact
uses: actions/download-artifact@v4
with:
name: nvr-export-windows
path: windows
- name: Download Linux artifact
uses: actions/download-artifact@v4
with:
name: nvr-export-linux
path: linux
- name: Rename artifacts
run: |
mv windows/nvr-export.exe nvr-export-windows.exe
mv linux/nvr-export nvr-export-linux
- name: Create Release
uses: softprops/action-gh-release@v1
with:
files: |
nvr-export-windows.exe
nvr-export-linux
generate_release_notes: true

72
.gitignore vendored Normal file
View File

@@ -0,0 +1,72 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
*.egg
MANIFEST
# PyInstaller
*.manifest
*.spec
!nvr-export.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# IDE
.vscode/
.idea/
*.swp
*.swo
# OS
.DS_Store
Thumbs.db
# Project specific
exports/
*.mp4
*.h264

View File

@@ -20,6 +20,19 @@ A CLI tool to export video recordings from TP-Link Vigi NVRs over a specified ti
## Installation
### Option 1: Download Windows Executable (Recommended for Windows)
1. Go to [Releases](https://github.com/johannes/tplink-nvr-export/releases)
2. Download `nvr-export-windows.exe`
3. Run from Command Prompt or PowerShell
```powershell
# Example usage
.\nvr-export-windows.exe export -h 192.168.1.100 -u admin -c 1 -s "2024-12-28" -e "2024-12-29" -o ./exports
```
### Option 2: Install with pip (Requires Python)
```bash
# Clone the repository
git clone https://github.com/johannes/tplink-nvr-export.git
@@ -32,6 +45,18 @@ pip install -e .
pipx install .
```
### Option 3: Build Windows Executable Locally
```bash
# Install dependencies
pip install -e ".[dev]"
# Build single-file executable
pyinstaller --onefile --name nvr-export --console src/tplink_nvr_export/cli.py
# Executable will be in dist/nvr-export.exe
```
## NVR Setup
Before using this tool, enable OpenAPI on your NVR:

50
nvr-export.spec Normal file
View File

@@ -0,0 +1,50 @@
# -*- mode: python ; coding: utf-8 -*-
"""PyInstaller spec file for nvr-export Windows executable."""
block_cipher = None
a = Analysis(
['src/tplink_nvr_export/cli.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[
'click',
'requests',
'tqdm',
'urllib3',
],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='nvr-export',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon=None,
)

View File

@@ -38,6 +38,7 @@ dev = [
"pytest-cov>=4.1.0",
"black>=23.0.0",
"ruff>=0.1.0",
"pyinstaller>=6.0.0",
]
[project.scripts]