Add auto-update system with Forgejo integration and enhance configuration management
This commit is contained in:
parent
1c1ec95139
commit
90dc09eb4d
1 changed files with 101 additions and 16 deletions
|
|
@ -575,9 +575,101 @@ pip install pyinstaller
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Phase 4: Professional Features (Weeks 9-12)
|
## Phase 4: Professional Features & Auto-Update (Weeks 9-12)
|
||||||
|
|
||||||
### 4.1 Enhanced Logging & Monitoring
|
### 4.1 Auto-Update System with Forgejo Integration
|
||||||
|
|
||||||
|
**Forgejo Configuration:**
|
||||||
|
```
|
||||||
|
Host: https://git.him-tools.de
|
||||||
|
Organization: HIM-public
|
||||||
|
Repository: webdrop-bridge
|
||||||
|
API Endpoint: https://git.him-tools.de/api/v1/repos/HIM-public/webdrop-bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
**Tasks:**
|
||||||
|
|
||||||
|
#### 4.1.1 Update Manager (`src/webdrop_bridge/core/updater.py`)
|
||||||
|
|
||||||
|
```python
|
||||||
|
class UpdateManager:
|
||||||
|
"""Manages auto-updates via Forgejo releases."""
|
||||||
|
|
||||||
|
def __init__(self, config: Config):
|
||||||
|
self.forgejo_url = "https://git.him-tools.de"
|
||||||
|
self.repo = "HIM-public/webdrop-bridge"
|
||||||
|
self.current_version = config.app_version
|
||||||
|
|
||||||
|
async def check_for_updates(self) -> Optional[Release]:
|
||||||
|
"""Query Forgejo API for latest release.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Release info if newer version available, None otherwise
|
||||||
|
"""
|
||||||
|
# GET https://git.him-tools.de/api/v1/repos/HIM-public/webdrop-bridge/releases/latest
|
||||||
|
# Compare version semantic versioning
|
||||||
|
|
||||||
|
async def download_update(self, release: Release) -> Path:
|
||||||
|
"""Download MSI/DMG from Forgejo release artifacts.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
release: Release information from API
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Path to downloaded installer file
|
||||||
|
"""
|
||||||
|
# Download from release assets
|
||||||
|
# Verify checksums
|
||||||
|
|
||||||
|
def install_update(self, installer_path: Path) -> bool:
|
||||||
|
"""Launch installer and schedule restart.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
installer_path: Path to MSI or DMG file
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True if installation scheduled, False otherwise
|
||||||
|
"""
|
||||||
|
```
|
||||||
|
|
||||||
|
**Configuration** (`.env`):
|
||||||
|
```env
|
||||||
|
# Auto-Update Settings
|
||||||
|
FORGEJO_URL=https://git.him-tools.de
|
||||||
|
FORGEJO_REPO=HIM-public/webdrop-bridge
|
||||||
|
AUTO_UPDATE_CHECK=true
|
||||||
|
AUTO_UPDATE_INTERVAL=86400 # 24 hours in seconds
|
||||||
|
AUTO_UPDATE_NOTIFY=true
|
||||||
|
```
|
||||||
|
|
||||||
|
**Features:**
|
||||||
|
- Check on startup (with 24h cache)
|
||||||
|
- Manual "Check for Updates" menu option
|
||||||
|
- Background download (non-blocking)
|
||||||
|
- User notification with changelog
|
||||||
|
- Automatic restart capability
|
||||||
|
- Rollback to previous version (optional)
|
||||||
|
- Security: HTTPS-only, checksum verification
|
||||||
|
|
||||||
|
**Deliverables:**
|
||||||
|
- [ ] `src/webdrop_bridge/core/updater.py` - Update manager
|
||||||
|
- [ ] Menu item for manual update check
|
||||||
|
- [ ] Update notification dialog
|
||||||
|
- [ ] Unit tests for update checking and downloading
|
||||||
|
- [ ] Integration with Forgejo API
|
||||||
|
|
||||||
|
**Acceptance Criteria:**
|
||||||
|
- Can query Forgejo releases API
|
||||||
|
- Detects new versions correctly
|
||||||
|
- Downloads and verifies checksums
|
||||||
|
- Prompts user for restart
|
||||||
|
- Manual check works from menu
|
||||||
|
- Gracefully handles network errors
|
||||||
|
- Version comparison uses semantic versioning
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4.2 Enhanced Logging & Monitoring
|
||||||
|
|
||||||
**Deliverables:**
|
**Deliverables:**
|
||||||
- [ ] Structured logging (JSON format option)
|
- [ ] Structured logging (JSON format option)
|
||||||
|
|
@ -587,7 +679,7 @@ pip install pyinstaller
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 4.2 Advanced Configuration
|
### 4.3 Advanced Configuration
|
||||||
|
|
||||||
**Deliverables:**
|
**Deliverables:**
|
||||||
- [ ] UI settings dialog
|
- [ ] UI settings dialog
|
||||||
|
|
@ -597,7 +689,7 @@ pip install pyinstaller
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 4.3 User Documentation
|
### 4.4 User Documentation
|
||||||
|
|
||||||
**Deliverables:**
|
**Deliverables:**
|
||||||
- [ ] User manual (PDF, HTML)
|
- [ ] User manual (PDF, HTML)
|
||||||
|
|
@ -609,26 +701,16 @@ pip install pyinstaller
|
||||||
|
|
||||||
## Phase 5: Post-Release (Months 2-3)
|
## Phase 5: Post-Release (Months 2-3)
|
||||||
|
|
||||||
### 5.1 Auto-Update System
|
### 5.1 Analytics & Monitoring
|
||||||
|
|
||||||
**Requirements:**
|
**Requirements:**
|
||||||
- Check for updates on startup
|
|
||||||
- Download in background
|
|
||||||
- Staged rollout support
|
|
||||||
- Rollback capability
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 5.2 Analytics & Monitoring
|
|
||||||
|
|
||||||
**Metrics:**
|
|
||||||
- App usage statistics
|
- App usage statistics
|
||||||
- Error/crash reporting
|
- Error/crash reporting
|
||||||
- Feature usage tracking
|
- Feature usage tracking
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 5.3 Community Support
|
### 5.2 Community Support
|
||||||
|
|
||||||
**Channels:**
|
**Channels:**
|
||||||
- GitHub Issues
|
- GitHub Issues
|
||||||
|
|
@ -665,6 +747,8 @@ pip install pyinstaller
|
||||||
- PyInstaller (building)
|
- PyInstaller (building)
|
||||||
- Sphinx (documentation)
|
- Sphinx (documentation)
|
||||||
- pytest (testing)
|
- pytest (testing)
|
||||||
|
- aiohttp (auto-update downloads)
|
||||||
|
- packaging (version comparison)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -681,6 +765,7 @@ webdrop-bridge/
|
||||||
│ │ ├── __init__.py
|
│ │ ├── __init__.py
|
||||||
│ │ ├── validator.py ← Path validation
|
│ │ ├── validator.py ← Path validation
|
||||||
│ │ ├── drag_interceptor.py ← Drag handling
|
│ │ ├── drag_interceptor.py ← Drag handling
|
||||||
|
│ │ ├── updater.py ← Auto-update system (Phase 4)
|
||||||
│ │ └── errors.py ← Custom exceptions
|
│ │ └── errors.py ← Custom exceptions
|
||||||
│ ├── ui/
|
│ ├── ui/
|
||||||
│ │ ├── __init__.py
|
│ │ ├── __init__.py
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue