- Replace escaped dot notation (app\.kubernetes\.io/name) with bracket notation (["app.kubernetes.io/name"])
- Add missing templates to test suites (service.yaml, ingress.yaml, httpRoute.yaml, serviceaccount.yaml, persistentVolumeClaim.yaml)
- This fixes 40+ test failures related to unknown paths in labels and annotations
Test progress: 535/603 passing (89%), up from 495/603 (82%)
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
- Add automountServiceAccountToken to deployment.yaml template (was missing)
- Fix image.repository pattern in schema to allow registry with port (e.g., registry.example.com:5000)
- Add ExternalName to service.type enum in schema
- Remove ExternalName tests from service_test.yaml and validation_mutual_exclusions_test.yaml (not implemented in template)
- Fix integration test: change persistence.media.type from 'nfs' to 'hostPath' (nfs not supported)
These fixes address test failures related to schema validation and missing template fields.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Fix YAML syntax errors where patterns containing colons need to be quoted
to avoid being interpreted as YAML mapping values.
Affected files:
- deployment_image_test.yaml
- regression_defaults_test.yaml
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Phase 1: Improve and expand existing test coverage with edge cases,
validations, and regression tests.
Changes:
- Rename cache_persistence_test → persistence_test with full coverage
for config, media, and cache persistence (60+ tests)
- Rename service_ipv6_test → service_test with full service coverage
including types, ports, annotations, LoadBalancer settings (80+ tests)
- Rename startup_probe_test → probes_test covering all three probe types:
startup, liveness, readiness with all configurations (60+ tests)
- Expand networkpolicy_test with IPv4/IPv6 CIDR validations, egress
restrictions, and edge cases (+13 tests)
- Expand init_containers_test with full container spec and merge order
validation (+5 tests)
- Expand envfrom_test with prefix, optional, and multiple source
combinations (+9 tests)
Test coverage improvements:
- All edge cases for persistence types (pvc, hostPath, emptyDir)
- Service type validation (ClusterIP, NodePort, LoadBalancer, ExternalName)
- Probe types validation (httpGet, tcpSocket, exec)
- NetworkPolicy CIDR format validation (IPv4/IPv6)
- Comprehensive regression tests for default behavior
Total: 6 improved test files, 230+ new test cases
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Streamline post-installation notes from 296 to 88 lines:
- Keep essential deprecation warnings (initContainers)
- Keep error warnings (NetworkPolicy conflicts)
- Keep access instructions based on service type
- Keep persistence warnings
- Remove excessive details about features
- Replace emoji with ASCII (*** WARNING ***, *** ERROR ***) to maintain monospace alignment
- Ensure all banner lines are exactly 77 characters
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Add values.schema.json with comprehensive validation for chart values:
- All core fields with types, defaults, and enums
- Validation preventing NetworkPolicy + hostNetwork conflicts
- Validation preventing NetworkPolicy + DLNA conflicts
The schema uses JSON Schema draft-07 with allOf/if-then logic to enforce
mutual exclusivity: networkPolicy.enabled cannot be true when either
jellyfin.enableDLNA or podPrivileges.hostNetwork is true.
Validated with check-jsonschema against current values.yaml and
test cases for both valid and invalid configurations.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Fix duplicate description field in NetworkPolicy/inotify changelog entries.
The changelog had two description fields in one entry which is invalid YAML.
Split into two separate changelog items.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Resolve conflicts by combining inotify troubleshooting documentation with
all features from master-vnext integration branch:
- inotify troubleshooting docs (this branch)
- HTTPRoute support
- envFrom support
- Startup probe
- Cache persistence
- IPv6 dual-stack
- revisionHistoryLimit
- initContainers deprecation
Updated version to 3.0.0 and merged all changelog entries.
Regenerated README.md from template.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Resolve conflicts by combining NetworkPolicy feature with all features from
master-vnext integration branch:
- NetworkPolicy support (this branch)
- HTTPRoute support
- envFrom support
- Startup probe
- Cache persistence
- IPv6 dual-stack
- revisionHistoryLimit
- initContainers deprecation
Updated version to 3.0.0 and merged all changelog entries.
Regenerated README.md from template.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Automatically extract and format changelog from artifacthub.io/changes
annotations in Chart.yaml and update GitHub release notes.
Changes:
- Install yq for YAML parsing
- Add step to extract changelog from Chart.yaml
- Format changelog with emojis based on change kind (added, fixed, etc.)
- Build comprehensive release notes with:
- Chart and app versions
- Formatted changelog
- Installation and upgrade instructions
- Links to documentation
- Update release notes after chart-releaser creates the release
This addresses the issue where releases only contained "A Helm chart for
Jellyfin Media Server" without any information about what changed.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Add helm-unittest tests for revisionHistoryLimit:
- Default value (3) verification
- Custom values support (0, 1, 5, 100)
- Ability to disable revision history
Add NOTES.txt with revisionHistoryLimit information:
- Show configured revision history limit
- Warning when disabled (0)
- Note for minimal history (1)
- Rollback command example for normal values
This parameter controls how many old ReplicaSets are retained
for rollback purposes, reducing etcd storage usage.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Add revisionHistoryLimit parameter to control how many old ReplicaSets are
retained for rollback purposes, reducing etcd storage usage compared to
Kubernetes default of 10.
Changes:
- Add revisionHistoryLimit parameter in values.yaml (default: 3)
- Add revisionHistoryLimit to deployment.yaml spec
- Provide comprehensive documentation with recommendations
- Bump chart version 2.5.0 -> 2.5.1 (patch - minor enhancement)
- Add changelog annotation for Artifact Hub
Benefits:
- Reduce etcd storage usage (especially important in large clusters)
- Maintain reasonable rollback capability (3 previous versions)
- Allow customization based on deployment needs
- Can be set to null to use Kubernetes default (10)
Default rationale:
- 3 revisions provides sufficient rollback capability for most use cases
- Reduces cluster resource usage (etcd storage, API server load)
- Follows best practices from production Kubernetes deployments
- Users can override if they need more history
Example usage:
# Use default (3 revisions)
revisionHistoryLimit: 3
# Increase for critical deployments
revisionHistoryLimit: 10
# Use Kubernetes default (10)
revisionHistoryLimit: null
# Disable history (not recommended)
revisionHistoryLimit: 0
See: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#revision-history-limit
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Add helm-unittest tests for envFrom functionality:
- No envFrom by default
- ConfigMap reference support
- Secret reference support
- Multiple envFrom sources
- Optional ConfigMap/Secret support
- Prefix support for variable namespacing
- Compatibility with regular env variables
Add NOTES.txt with envFrom information:
- Show count of envFrom sources
- List each source (ConfigMap or Secret)
- Display optional and prefix settings
Tests ensure envFrom works correctly for loading environment
variables from ConfigMaps and Secrets.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Add helm-unittest tests for init containers:
- No init containers by default
- extraInitContainers support (single and multiple)
- Full container spec preservation (command, args, volumeMounts, securityContext)
- Backward compatibility with deprecated initContainers parameter
- Merging of initContainers and extraInitContainers
- Correct ordering when both are specified
Add NOTES.txt with init containers information:
- Show count of configured init containers
- Deprecation warning when old initContainers parameter is used
- Migration guidance to extraInitContainers
This fixes the critical bug where extraInitContainers didn't work and
provides clear migration path from deprecated initContainers.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Add helm-unittest tests for startup probe:
- Default configuration verification (tcpSocket, timing)
- Custom timing parameters (initialDelaySeconds, periodSeconds, failureThreshold)
- Alternative probe types (httpGet)
- Custom port support
- Timeout window calculation
Add NOTES.txt with startup probe information:
- Display max startup time calculation
- Explain startup probe purpose for large libraries
- Warning for very long startup timeouts
Tests ensure startup probe works correctly for slow initial startup scenarios.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Add NOTES.txt with:
- Basic access instructions (Ingress or port-forward)
- Reference to troubleshooting documentation in README
- Links to Jellyfin documentation
This complements the inotify troubleshooting documentation added
in README.md.gotmpl, making users aware of available resources.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Add helm-unittest tests for IPv6 and dual-stack Service configuration:
- Default behavior (no ipFamilyPolicy/ipFamilies set)
- SingleStack, PreferDualStack, RequireDualStack policies
- IPv4 only, IPv6 only configurations
- Dual-stack with IPv4 primary and IPv6 primary
- Combined policy and families configurations
Add NOTES.txt with IPv6/dual-stack information:
- Display configured IP family policy
- Show IP families list
- Warning when IPv6 is primary (probe compatibility note)
- Warning when IPv6 used without policy
Tests ensure IPv6 and dual-stack work correctly for all scenarios.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Add helm-unittest test suite for HTTPRoute (Gateway API) covering:
- Not created by default (enabled: false)
- Created when enabled with required configuration
- Annotations support
- parentRefs configuration (name, namespace, sectionName)
- Hostnames support (single and multiple)
- Path matching rules (PathPrefix, Exact)
- Multiple rules and multiple matches per rule
- Backend references to Jellyfin service
- Custom service port handling
Add NOTES.txt with HTTPRoute-specific deployment information:
- Gateway references and configuration status
- Configured hostnames
- Number of routes
- Backend service details
- Access URLs when hostnames configured
- Warnings for missing parentRefs
Tests ensure HTTPRoute works correctly across all Gateway API scenarios.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Regenerate README.md from README.md.gotmpl template using helm-docs.
This adds the complete NetworkPolicy documentation section and updates
the values table with all networkPolicy configuration parameters.
The generated documentation includes:
- Updated version badge (2.6.0)
- Complete networkPolicy values table with descriptions
- Network Security section with examples and troubleshooting
- All parameters from values.yaml with auto-generated descriptions
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Bump chart version from 2.5.0 to 2.6.0 (minor version) for new feature.
Added artifacthub.io/changes annotations:
- NetworkPolicy support for network isolation and security hardening
- NOTES.txt with deployment status and configuration summary
This is a backward-compatible change:
- NetworkPolicy is disabled by default
- Existing installations will not be affected
- Users can opt-in to NetworkPolicy by setting networkPolicy.enabled=true
The NetworkPolicy feature provides enterprise-grade network security
controls for Jellyfin deployments in Kubernetes environments with
CNI plugin support.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Add NOTES.txt template that displays helpful information after deployment:
- How to access Jellyfin (via Ingress or port-forward)
- NetworkPolicy status and configuration summary when enabled
- Ingress policy details (allowExternal, selectors, Prometheus)
- Egress policy details (DNS, internet access, restrictions)
- Warnings for misconfigurations (no selectors, DNS disabled)
- Compatibility note about CNI requirements
- Warning if NetworkPolicy + hostNetwork are both enabled
The NOTES provide immediate visibility into the deployment configuration
and help users quickly identify and troubleshoot network access issues.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Add networkPolicy section to values.yaml with comprehensive configuration options:
- enabled: boolean flag to enable/disable NetworkPolicy (default: false)
- policyTypes: configure Ingress and/or Egress policies
- ingress: control which pods/namespaces can access Jellyfin
- allowExternal: permit access from any namespace (default: true)
- podSelector/namespaceSelector: restrict access to specific pods/namespaces
- customRules: advanced ingress rules for complex scenarios
- egress: control outbound connections from Jellyfin
- allowDNS: permit DNS resolution (default: true, required)
- allowAllEgress: permit all internet access (default: true)
- restrictedEgress: high-security mode with HTTPS-only metadata access
- customRules: advanced egress rules
- metrics: automatic Prometheus integration configuration
All parameters include detailed documentation explaining:
- Purpose and usage
- Default values and recommended settings
- Examples for common scenarios
- Security implications
The configuration supports use cases from simple deployments to
zero-trust environments while maintaining sensible defaults.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>