Skip to content

Releases: geekxflood/program-director

Release v1.1.1

06 Dec 09:01

Choose a tag to compare

Changed

  • Comprehensive code quality improvements: 79% reduction in linter issues (114 → 24)
  • Added proper error handling for all unchecked error returns (50 errcheck fixes)
  • Added package documentation comments for all packages (15 packages)
  • Improved code naming conventions and exported function documentation (33 revive fixes)
  • Pre-allocated slices with known capacity for better performance (4 prealloc fixes)
  • Fixed error string capitalization to follow Go conventions (3 staticcheck fixes)
  • Renamed variables that redefine built-in identifiers (max → maxGenres, min → minInt)
  • Added github.com/robfig/cron/v3 to allowed dependencies in golangci-lint config
  • Renamed exported types to avoid stuttering (CooldownStats → Stats, MediaStats → Stats)
  • Added constant block comments for MediaType and MediaSource enums

Fixed

  • Fixed missing errors and strings imports in multiple packages
  • Fixed context handling in scheduler and server shutdown
  • Fixed ineffective assignment in history repository

Security

  • Changed directory permissions from 0755 to 0750 for better security (gosec fix)

Release v1.0.3

06 Dec 08:13

Choose a tag to compare

Fixed

  • Fixed SQLite migration error with partial indexes containing CURRENT_TIMESTAMP in WHERE clauses
  • Remove non-deterministic function usage in SQLite partial indexes

Full Changelog: v1.0.2...v1.0.3

Release v1.0.2

06 Dec 07:30

Choose a tag to compare

Fixed

  • Fixed GitHub Actions release workflow SBOM upload permission error (contents: write required)

Full Changelog: v1.0.1...v1.0.2

Release v1.0.1

06 Dec 06:57

Choose a tag to compare

Added

  • Unit tests for Trakt client (34.5% coverage)
  • Unit tests for scheduler (42.6% coverage)
  • Unit tests for HTTP server handlers (5.9% coverage)

Changed

  • Minimum Go version updated to 1.23
  • Updated CLAUDE.md with comprehensive documentation for all v1.0.0 features
  • Updated Dockerfile to use Go 1.23 base image

Fixed

  • Fixed SQLite BIGINT to INTEGER conversion for modernc.org/sqlite compatibility
  • Fixed AUTOINCREMENT constraint errors in database migrations
  • Fixed Helm chart storage class configuration for Kubernetes (local-path instead of standard)
  • Added initContainer to fix volume permissions for SQLite database
  • Temporarily disabled readOnlyRootFilesystem in staging for SQLite compatibility debugging

Full Changelog: v1.0.0...v1.0.1

Release v1.0.0

05 Dec 13:05

Choose a tag to compare

Added

Core Application

  • Complete rewrite from Python to Go for improved performance and deployment
  • Multi-architecture Docker support (amd64, arm64)
  • Database support for both SQLite and PostgreSQL
  • Graceful shutdown handling with context cancellation
  • Version information embedded at build time

CLI Commands

  • generate - Generate themed playlists for Tunarr channels
    • Single theme or all themes generation
    • Dry-run mode for preview without applying
    • Result reporting with statistics
  • sync - Synchronize media catalog from Radarr/Sonarr
    • Selective sync (movies only, series only, or all)
    • Cleanup option for removed media
  • scan - Display media library statistics
    • Detailed information mode
    • Source-specific scanning
  • serve - HTTP server mode with RESTful API and scheduler
    • Configurable HTTP port
    • Optional cron scheduler for automated generation
    • Prometheus metrics endpoint
    • Health and readiness checks
  • trakt - Trakt.tv media exploration commands
    • Trending movies and shows
    • Popular content discovery
    • Search functionality
  • version - Display version and build information

Structured Logging

  • Comprehensive structured logging using stdlib log/slog
  • Dual output formats: human-readable text and JSON
  • Debug mode with source file and line information
  • Custom time formatting for readability
  • Global context (version, app name) in all logs
  • Following Prometheus/Alertmanager patterns
  • Proper log levels: DEBUG, INFO, WARN, ERROR

Configuration

  • YAML-based configuration with environment variable overrides
  • Viper for flexible configuration management
  • Validation for all required settings
  • Support for multiple themes with detailed criteria
  • Cooldown configuration per media type
  • Server configuration for HTTP mode

Services

  • Playlist Generator: Orchestrates theme-based playlist generation
  • Similarity Scorer: Ranks media by genre, keywords, and ratings
  • Cooldown Manager: Prevents media replay too soon
  • Media Sync: Fetches and caches metadata from Radarr/Sonarr

API Clients

  • Radarr Client: Movie library integration
  • Sonarr Client: TV/anime library integration
  • Tunarr Client: Channel programming management
  • Trakt Client: Media metadata and trending content integration
    • Full API v2 support
    • Trending and popular content
    • Search functionality
    • Movie and show details
  • Ollama Client: LLM integration for intelligent selection

HTTP API Server

  • RESTful API endpoints for all operations
  • Health and readiness checks
  • Prometheus metrics export
  • Media listing and synchronization endpoints
  • Theme management and generation endpoints
  • Play history and cooldown tracking endpoints
  • Webhook support for automation
  • Graceful shutdown with timeout
  • JSON response format
  • Configurable timeouts and ports

Scheduler

  • Cron-based automated playlist generation
  • Configurable schedule per theme
  • Panic recovery and logging
  • Manual trigger support
  • Status reporting (next run, job count)
  • Integration with serve command
  • Default schedule: daily at 2 AM

Database

  • Abstract database interface supporting multiple drivers
  • SQLite implementation for single-instance deployments
  • PostgreSQL implementation for production deployments
  • Automatic schema migrations
  • Repository pattern for data access
  • Connection pooling and context support

Testing

  • Unit tests for configuration validation
  • Unit tests for model structures
  • Test coverage reporting via Codecov
  • Table-driven test patterns

Kubernetes & Deployment

  • Comprehensive Helm chart for Kubernetes deployment
    • Full manifest templates (Deployment, Service, ConfigMap, Secret, etc.)
    • PersistentVolumeClaim for SQLite data
    • Ingress with TLS support
    • ServiceMonitor for Prometheus Operator
    • HorizontalPodAutoscaler support
    • Security contexts (non-root, read-only filesystem)
    • Resource requests and limits
    • Health probes configuration
  • ArgoCD ApplicationSet for GitOps deployment
    • Multi-environment support (production, staging)
    • Automatic sync and self-healing
    • Retry logic with exponential backoff
    • Notification support
  • Environment-specific values files
    • Production configuration with HA
    • Staging configuration for testing
  • Complete Helm chart documentation

CI/CD

  • GitHub Actions workflow for automated builds
  • Multi-platform Docker image builds (amd64, arm64)
  • Automated testing with race detection and coverage
  • golangci-lint for comprehensive linting (20+ linters)
  • gosec for security scanning with SARIF upload
  • Docker image publishing to GHCR
  • Release workflow triggered by semver tags
  • Automatic release note generation from CHANGELOG
  • SBOM generation and upload

Changed

  • Breaking: Migrated from Python to Go - incompatible with previous Python version
  • Breaking: New configuration format (YAML-based)
  • Breaking: Database schema redesigned for Go implementation
  • Improved performance and memory efficiency
  • Better error handling with wrapped errors
  • Enhanced observability with structured logging

Removed

  • Python implementation and dependencies
  • Legacy Python-specific features
  • Old configuration format

Fixed

  • Configuration loading now properly handles defaults
  • Database connection properly closes on shutdown
  • Graceful signal handling for clean shutdowns

Security

  • Non-root Docker user (UID 1000)
  • API key validation at startup
  • Secure database connection string handling
  • No secrets in logs

Full Changelog: https://github.com/geekxflood/program-director/commits/v1.0.0