- Implemented LicenseValidationMiddleware for periodic license validation and feature protection.
- Created HistoricalDataService for importing historical viewing data from Plex into the ActivitySession model.
- Added KeygenLicenseService for runtime license verification and machine fingerprinting.
- Introduced new Jinja filters for built-in functions max and min.
- Updated settings UI to include a tab for Plus features.
- Added Docker support for Wizarr Plus with a dedicated docker-compose file.
- Created entrypoint script for license verification and initialization of the Wizarr Plus container.
- Added wrapper scripts for building, verifying licenses, and setting up Wizarr Plus.
- Updated dependencies in pyproject.toml to include websocket-client for Plus features.
- Use --notes-file instead of --notes to avoid interpreting changelog content as shell commands
- Resolves issue where commit hashes and special characters caused workflow failures
- Creates force-ruff-fix.yml workflow for manual triggering
- Will run ruff fix directly in CI environment
- Shows file state before/after to debug the formatting issue
- Auto-commits any formatting changes CI makes
- Add workflow_dispatch input for version selection
- Determine version from inputs for manual runs vs release events
- Fix empty APP_VERSION issue causing invalid Docker tags
- Support version formats: v2025.9.1, 2025.9.1, or latest
- Enable force rebuilds when auto-release doesn't work
This allows manual triggering of Docker builds when needed
while maintaining compatibility with automatic release triggers.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Change trigger from push to pull_request closed
- Only run when Release PRs are merged (title starts with 'Release v')
- Check for existing releases to avoid duplicate creation errors
- Simplify version checking using PR title instead of git comparison
- Add proper error handling and informative summaries
This prevents the workflow from running on every push to main
and ensures it only creates releases when Release PRs are merged.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Detect version changes when Release PRs are merged to main
- Automatically generate changelog from commits since previous version
- Create GitHub release with proper tagging and changelog
- Trigger Docker builds via release event
- Skip pre-release versions (rc, alpha, beta, dev)
This completes the release automation by creating GitHub releases
when Release PRs are merged, eliminating manual release creation.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove all RC branch and PR creation logic
- Only create stable release PRs
- Update release PR template to remove RC references
- Simplify outputs to only include release PR info
- Aligns automation with simplified stable-only workflow
This completes the RC workflow removal by preventing the automation
from creating RC PRs in the first place.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Strip -rc.X and -beta suffixes when parsing patch version numbers
- Prevents 'unbound variable' error when current version has suffixes
- Fixes CalVer automation failure when running after RC releases
The script was failing because version_patch was '1-rc' instead of '1',
causing arithmetic operations to fail with 'unbound variable: rc' error.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add git pull origin main before creating release branches
- Always recreate release branches from latest main instead of reusing stale branches
- Prevents release branches from having outdated code that could cause test failures
- Ensures release includes all latest changes and fixes from main branch
This fixes a critical issue where release branches could contain outdated code
if they were created in previous automation runs.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>