Files
ersatztv/docs/fork-strategy.md
T
timothy e170b2dc3c
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 4m4s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 5m17s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
fix(ffmpeg): align transcode pipelines with ffmpeg 8
refs #9
2026-07-01 19:37:51 +02:00

3.2 KiB
Raw Permalink Blame History

Fork Maintenance Strategy

Upstream ErsatzTV was archived February 2026 at v26.3.0. This fork is maintained independently on Gitea.

Divergence Policy

We diverge freely from upstream's final state. There is no upstream to merge from, so maintaining merge compatibility serves no purpose. All changes are our own.

Security & Dependency Updates

.NET Runtime

  • Current: .NET 10.0 (LTS candidate, supported through Nov 2028)
  • Upgrade path: When .NET 11 ships (Nov 2026), upgrade by updating TargetFramework across all projects and global.json. The rollForward: latestMinor setting in global.json handles patch versions automatically.
  • Key constraint: EF Core is pinned to [9.0.12,10) — a .NET 11 upgrade will likely require bumping to EF Core 10.x simultaneously.

NuGet Packages

  • No central package management (Directory.Packages.props) — versions are declared per-project. This means bulk updates require editing multiple .csproj files.
  • Upstream had a GitHub Dependabot config (.github/dependabot.yml) that is not active on Gitea.
  • Current approach: Manual periodic audits. Run dotnet list package --outdated to check for updates.
  • Future consideration: Add a Gitea Actions workflow for dependency scanning, or adopt Directory.Packages.props to centralize version management.

Docker Base Images

  • .NET SDK/runtime images (mcr.microsoft.com/dotnet/sdk:10.0-noble-amd64) — update when .NET patches ship.
  • FFmpeg image: forked separately at timothy/ersatztv-ffmpeg. Currently 192.168.1.95:3000/timothy/ersatztv-ffmpeg:8.1.2.

CVE Response

  1. Check if the CVE affects a dependency we use (most NuGet advisories are noise)
  2. Update the package version in the relevant .csproj file(s)
  3. Build, run tests, deploy to test environment (port 8410)
  4. Promote to prod after verification

EF Core Migrations

  • SQLite: 196 migrations (primary, Feb 2021 Feb 2026)
  • MySQL: 153 migrations (secondary, Aug 2023 Feb 2026, parity maintained)

Adding New Migrations

# SQLite (primary)
dotnet ef migrations add MigrationName \
  --project ErsatzTV.Infrastructure.Sqlite \
  --startup-project ErsatzTV

# MySQL (if maintaining parity)
dotnet ef migrations add MigrationName \
  --project ErsatzTV.Infrastructure.MySql \
  --startup-project ErsatzTV

We only use SQLite in the homelab. MySQL migrations can be maintained for completeness but are not tested in deployment.

Feature Development

New features follow the existing CQRS/MediatR pattern. No compatibility constraints — we own the entire codebase now. Track work via Gitea Issues.

Key Risks

Risk Mitigation
EF Core major version gap Pin to [9.x,10) range; bump when .NET upgrade forces it
Lucene.Net stuck on beta (4.8.0-beta00017) Monitor for stable release; functional as-is
SkiaSharp native deps Pinned with NativeAssets.Linux.NoDependencies; test on Linux after updates
OpenAPI generator JAR (7.15.0) Hardcoded in Dockerfile; update manually when needed