Commit Graph

27 Commits (7892bb2b3cd12a02c6930ce44a78e7ee588e244e)

Author SHA1 Message Date
Kálmán „KAMI” Szalai 708fd34750 Check the whole touched list at PR time, not just changed lines
Replaces iptv-checker (npm + ffmpeg) with check_channels.py:

- Checks every channel in a list a PR touches, existing and new, not just
  the added/changed rows - a PR editing italy.md now surfaces already-dead
  channels in italy.md too, not only the one line it changed.
- Uses check_channels.py's dead/blocked/unreachable/flaky states instead
  of a binary online/failed, so the summary no longer needs the "some of
  these failures are geo-blocks, use your judgment" disclaimer without
  telling reviewers which failures those are - blocked channels are now
  named as such.
- Summary separates what the PR actually added/changed from what was
  already broken in the same file, so a reviewer isn't left guessing
  whether a failure is theirs to fix.
- No ffprobe pass here (kept fast for a PR gate) - anything this flags as
  dead gets a second opinion from the scheduled Channel check (deep)
  workflow before anyone acts on it.

Verified end to end against a simulated PR diff.
2026-09-05 04:40:49 +02:00
Kálmán „KAMI” Szalai a86fb23e94 Add channel checker, scheduled health checks, and a status dashboard
Builds on the idea in #1145 (a checker that maps failures back to a channel
and list, and tells a geo-blocked channel from a dead one) with a few
additions:

check_channels.py
- Standard library only, same as #1145's version.
- Adds a `disputed` state: an optional --confirm-dead pass gives ffprobe a
  second opinion on anything that looks dead over HTTP, before it gets
  reported as dead. This is one-directional (can only pull a verdict out
  of `dead`, never push one into it) because ffprobe itself is not
  reliable enough to trust in the other direction - a known-good DASH
  channel needed longer than any sane per-channel budget to open while
  testing this, and a header check alone had already been fooled by an
  isolated media fragment sitting at a URL that looked like a live channel
  (a mistake made and caught while triaging #1149/#1151 - see the
  docstring for the details).
- Restructured to share one worker pool across every list in a run
  instead of a fresh pool per list, which stopped small lists from paying
  the same wall-clock floor as large ones; a full run across all lists
  dropped from not finishing in 15 minutes to about 10.
- --json writes one record per channel per run, for building a history.

generate_dashboard.py
- Turns that history into a single self-contained docs/index.html: current
  state breakdown, an alive-share trend across every run kept, a per-list
  breakdown, and a searchable/filterable table of everything that is not
  currently alive.

Two new scheduled workflows
- check_channels_fast.yml: every 6 hours, HTTP checks only.
- check_channels_deep.yml: every 2 days, with --confirm-dead (needs ffmpeg).
Both append to .github/checker-history/history.jsonl (pruned to 90 days),
then build and deploy the dashboard to GitHub Pages.
2026-09-04 10:21:37 +02:00
Kálmán „KAMI” Szalai 4169248c71 Switch weekly trend workflow to artifacts instead of repo commits
Stores the failed-channel snapshot as a workflow artifact (90-day
retention) and downloads the previous run's artifact for comparison,
instead of committing a state file back to the repo.
2026-08-18 13:02:05 +02:00
Kálmán „KAMI” Szalai 2109ca83a7 Retry push in weekly trend workflow to handle concurrent commits 2026-08-18 12:54:21 +02:00
Kálmán „KAMI” Szalai 988f3a768b Add weekly channel health trend report and per-PR link checker
Weekly trend workflow: runs the full iptv-checker weekly, keeps a
snapshot of failed URLs in .github/checker-history/failed.txt, and
reports newly-broken vs newly-recovered channels since the last run
in the job summary.

PR check workflow: on any PR touching lists/*.md, extracts only the
added/changed stream links from the diff and checks just those (not
the whole 2000+ channel playlist), reporting online/failed results
directly in the PR's Checks summary.
2026-08-18 12:47:38 +02:00
Kálmán „KAMI” Szalai 48d3376954 Fix m3u-linter CI step to actually lint the real playlist
The config's files list still referenced the README's placeholder
filenames (playlist1.m3u, playlist2.m3u), which don't exist in this
repo, so the linter was silently checking nothing. Point it at the
real playlist.m3u8, drop the noisy full-file cat dump, and surface
its output in the job summary like the iptv-checker step.
2026-08-17 17:45:46 +02:00
Kálmán „KAMI” Szalai af63bbdafa Surface iptv-checker failed-channel list in CI
Add a job summary listing the failed channels and upload the full
online.m3u/failed.m3u results as a build artifact, instead of running
the checker and discarding its output.
2026-08-17 16:08:59 +02:00
Kálmán „KAMI” Szalai ff03630b69 Add Python 3.12-3.14 to the pylint test matrix 2026-08-14 11:50:35 +02:00
Kálmán „KAMI” Szalai 5a705e86f0 Bump actions/checkout and actions/setup-python to Node.js 24 versions in pylint workflow 2026-08-14 11:45:06 +02:00
Röyal Cəlilov d557f7c8ef Create pylint.yml (#1043) 2026-06-30 09:29:19 +02:00
KAMI ac135619ff Improve make_playlist.py code quality and fix bugs (#989)
* Improve make_playlist.py code quality and fix bugs

- Fix group name bug: replace underscores with spaces before title()
  so filenames like north_korea.md produce "North Korea" not "North_Korea"
- Fix resource leaks: use context managers for all file handles including
  EPG list and per-country playlist files
- Remove os.chdir() global side effect: use absolute paths derived from
  the script location instead
- Avoid calling to_m3u_line() twice per channel by caching the result
- Fix redundant trailing colon in filename[:-3:] slice
- Consistent use of write() for headers instead of mixing print/write
- Strip blank lines from EPG URL list when reading

* Skip commit and push when playlist has no changes

Prevents the workflow from failing with exit code 1 when the generated
playlist is identical to the previous run and there is nothing to commit.

* Use current branch instead of hardcoded master for push

Replace hardcoded origin/master reference with @{u} (upstream of current
branch) for the diff check, and use HEAD for the push target so the
workflow works correctly on any branch.

---------

Co-authored-by: Kálmán „KAMI” Szalai <kami911gmail.com>
2026-03-08 07:40:47 +01:00
Salman Chishti 6a5a9089a9 Upgrade GitHub Actions for Node 24 compatibility (#891)
Signed-off-by: Salman Muin Kayser Chishti <13schishti@gmail.com>
2026-02-16 00:21:26 +01:00
KAMI 5bc63c6e75 Update test_playlist.yml
Try latest LTS node 20.10.x
2023-11-28 01:30:00 +01:00
KAMI 13902e2056 Fixes for auto playlist update 2022-10-06 09:42:22 +02:00
Free TV aadec165fa Actions: prefix apt-get call with sudo 2022-09-29 11:27:15 +01:00
Free TV ca724933cf Actions: Install ffmpeg dependency
Required by iptv-checker
2022-09-29 11:22:18 +01:00
Free TV 2ac25bf0f9 Actions: Relax some m3ulinter rules 2022-09-29 11:07:49 +01:00
Free TV 2546133f80 Actions: Fix filename 2022-09-29 10:52:23 +01:00
Free TV 25849b474f Actions: Update runs-on 2022-09-29 10:52:15 +01:00
Free TV e466b1a075 Actions: Rename update_playlis.yml 2022-09-29 10:50:06 +01:00
Free TV 0df5daf393 Update test_playlist.yml (#222) 2022-09-29 10:46:09 +01:00
Kálmán „KAMI” Szalai c19847ae45 Update actions 2022-09-19 19:17:37 +02:00
KAMI c4c5ad8e57 Merge pull request #220 from Free-TV/automate
Automate
2022-09-19 19:15:04 +02:00
KAMI a16426170e Add update playlist for unattended playlist update 2022-09-19 19:07:13 +02:00
Kálmán „KAMI” Szalai 3f07e1284a Only use automate branch 2022-08-04 19:16:44 +02:00
Kálmán „KAMI” Szalai c2223ab62b Run from web too 2022-08-04 19:05:29 +02:00
Kálmán „KAMI” Szalai d12304534e Add first version of a test workflow 2022-08-04 18:59:12 +02:00