Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 2m52s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
Build ErsatzTV Image / Build & test (.NET) (push) Successful in 2m28s
Build ErsatzTV Image / Build & push image (amd64) (push) Successful in 3m49s
Lock the M3U shape Jellyfin/Kodi consume (ChannelPlaylist.ToM3U) so a regression — e.g. while implementing the paused #1 (tvg-logo base URL) — fails CI instead of only surfacing as Jellyfin misbehaving in prod. Six scenarios snapshot today's output: simple channel (generated logo), internal artwork logo, external-URL logo, multi-channel (sorted by number), Kodi user-agent (KODIPROP lines), and base-URL + access-token threading. Deterministic: fixed UniqueIds, and a guard skips (Assume) when ETV_INSTANCE_ID is set (it feeds the tvg-id). Goldens live next to the test under Goldens/, located via [CallerFilePath]; regenerate via the explicit Regenerate_goldens test or ETV_UPDATE_GOLDENS=1. Verified: 6/6 pass, and proven to have teeth (tampering a golden fails the test). XMLTV guide + channel-logo image golden coverage split to #28 (DB/filesystem fixtures / non-deterministic across platforms). Refs #11 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 lines
455 B
Plaintext
4 lines
455 B
Plaintext
#EXTM3U url-tvg="https://tv.example.com/iptv/xmltv.xml" x-tvg-url="https://tv.example.com/iptv/xmltv.xml"
|
|
#EXTINF:0 tvg-id="C1.145.ersatztv.org" channel-id="AAAAAAAAAAAAAAAAAAAAAQ" channel-number="1" CUID="AAAAAAAAAAAAAAAAAAAAAQ" tvg-chno="1" tvg-name="News" tvg-logo="https://tv.example.com/iptv/logos/gen?text=News" group-title="ErsatzTV" tvc-stream-vcodec="h264" tvc-stream-acodec="aac", News
|
|
https://tv.example.com/iptv/channel/1.m3u8?mode=hls-direct
|