Files
ersatztv/docs/fork-strategy.md
T
timothyandClaude Opus 4.6 f1e97b94a7
Build / Calculate version information (push) Successful in 13s
Build / build_and_upload (push) Failing after 0s
Build / build_images (push) Failing after 0s
Close stale issues / stale (push) Successful in 15s
Add architecture docs and fork maintenance strategy (#6)
Document channel architecture, M3U/XMLTV integration with Jellyfin,
and fork maintenance strategy for the archived upstream. Also includes
CLAUDE.md updates for implementer workflow and project boundaries.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 22:42:07 +01:00

69 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Fork Maintenance Strategy
Upstream ErsatzTV was archived February 2026 at v26.3.0. This fork is maintained independently on [Gitea](http://192.168.1.95:3000/timothy/ersatztv).
## 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](http://192.168.1.95:3000/timothy/ersatztv-ffmpeg). Currently `192.168.1.95:3000/timothy/ersatztv-ffmpeg:7.1.1`. The main Dockerfile still references the upstream `ghcr.io` image and needs updating.
### 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
```bash
# 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](http://192.168.1.95:3000/timothy/ersatztv/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 |