diff --git a/.forgejo/workflows/generate-m3u.yml b/.forgejo/workflows/generate-m3u.yml index be37cce..7283728 100644 --- a/.forgejo/workflows/generate-m3u.yml +++ b/.forgejo/workflows/generate-m3u.yml @@ -1,141 +1,154 @@ -name: IPTV Channel Country Detection +name: Generate M3U Playlist with Auto-Organization on: push: - branches: [ main, master ] - paths: - - 'bulk_import.m3u' - - 'iptv_country_script.py' - pull_request: - branches: [ main, master ] + branches: + - main workflow_dispatch: - inputs: - run_processing: - description: 'Run IPTV processing' - required: false - default: 'true' jobs: - process-iptv-channels: - runs-on: ubuntu-latest + build-and-organize: + runs-on: ubuntu-22.04 + timeout-minutes: 5 steps: - - name: πŸ“¦ Checkout Repository + - name: Checkout Repository uses: actions/checkout@v4 - - - name: 🐍 Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.11' - - - name: πŸ“‹ Install Dependencies + + - name: Configure Git run: | - python -m pip install --upgrade pip - # Add any additional dependencies if needed - # pip install requests beautifulsoup4 - - - name: πŸ” Check for Input File + git config --local user.email "actions@forgejo.plainrock127.xyz" + git config --local user.name "IPTV Playlist Bot" + + - name: Setup Python Environment run: | - if [ -f "bulk_import.m3u" ]; then - echo "βœ… Found bulk_import.m3u file" - echo "πŸ“Š File size: $(stat -f%z bulk_import.m3u 2>/dev/null || stat -c%s bulk_import.m3u) bytes" - echo "πŸ“ First 5 lines:" - head -5 bulk_import.m3u + echo "Setting up Python environment..." + python3 --version + echo "Setting up directories..." + mkdir -p reports/daily reports/logs backups config logs + echo "Setup completed" + + - name: Check Import File + run: | + echo "Checking import file..." + if [ -f bulk_import.m3u ]; then + LINES=$(wc -l < bulk_import.m3u) + echo "Found bulk_import.m3u with $LINES lines" + if [ "$LINES" -le 2 ]; then + echo "Import file is empty or only has header" + fi else - echo "⚠️ No bulk_import.m3u file found" - echo "πŸ“ Creating sample file for testing..." - cat > bulk_import.m3u << 'EOF' - #EXTM3U - #EXTINF:-1 tvg-id="TSN1.ca" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/canada/tsn-1-ca.png" group-title="πŸ‡¬πŸ‡§ United Kingdom",TSN 1 - https://ott.udptv.net/stream/iptv/tsn1/master.m3u8 - #EXTINF:-1 tvg-id="CBC.ca" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/canada/cbc-ca.png" group-title="πŸ‡ΊπŸ‡Έ United States",CBC News - https://tvnow.best/api/stream/cbc/news.m3u8 - #EXTINF:-1 tvg-id="" tvg-logo="" group-title="DaddyLive USA",DaddyLive Channel - https://daddylive.com/stream123.m3u8 - #EXTINF:-1 tvg-id="bbc.one.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/uk/bbc-one-uk.png" group-title="πŸ‡¬πŸ‡§ United Kingdom",BBC One - https://bbc.co.uk/live/bbcone.m3u8 - EOF - echo "βœ… Sample file created for testing" + echo "Creating empty bulk_import.m3u" + echo '#EXTM3U' > bulk_import.m3u fi - - - name: 🎯 Run IPTV Channel Processing + + - name: Verify Scripts Directory run: | - echo "πŸš€ Starting IPTV channel processing..." - cd scripts - python generate_playlist.py - - - name: πŸ“Š Show Results - run: | - if [ -f "playlist.m3u" ]; then - echo "βœ… Processing completed successfully!" - echo "πŸ“Š Output file size: $(stat -f%z playlist.m3u 2>/dev/null || stat -c%s playlist.m3u) bytes" - echo "" - echo "πŸ“ First 20 lines of processed playlist:" - head -20 playlist.m3u - echo "" - echo "🏁 Last 10 lines of processed playlist:" - tail -10 playlist.m3u - echo "" - echo "πŸ“ˆ Group distribution:" - grep -o 'group-title="[^"]*"' playlist.m3u | sort | uniq -c | sort -nr + echo "Checking scripts directory..." + if [ -d scripts ]; then + echo "Scripts directory exists" + ls -la scripts/ else - echo "❌ Processing failed - no output file generated" + echo "Scripts directory not found!" exit 1 fi - - - name: πŸ“¦ Upload Processed Playlist - uses: actions/upload-artifact@v4 - if: always() - with: - name: processed-playlist - path: | - playlist.m3u - *.backup_* - retention-days: 30 - - - name: πŸ’Ύ Commit Changes (if any) + + - name: Run Playlist Generation + timeout-minutes: 3 run: | - git config --local user.email "action@github.com" - git config --local user.name "GitHub Action" - - if [ -f "playlist.m3u" ]; then - git add playlist.m3u - - if git diff --staged --quiet; then - echo "πŸ“ No changes to commit" - else - git commit -m "🎯 Auto-processed IPTV playlist - $(date '+%Y-%m-%d %H:%M:%S')" - echo "βœ… Changes committed" - - # Only push if running on main/master branch and not a PR - if [[ "${GITHUB_REF}" == "refs/heads/main" || "${GITHUB_REF}" == "refs/heads/master" ]] && [[ "${GITHUB_EVENT_NAME}" != "pull_request" ]]; then - echo "πŸš€ Pushing changes..." - git push - else - echo "πŸ“ Skipping push (not on main branch or is PR)" - fi - fi - fi - - - name: πŸ“Š Summary Report - if: always() - run: | - echo "🎯 IPTV Processing Summary" - echo "=========================" - echo "πŸ“… Date: $(date)" - echo "🌿 Branch: ${GITHUB_REF##*/}" - echo "πŸ“ Event: ${GITHUB_EVENT_NAME}" - - if [ -f "bulk_import.m3u" ]; then - echo "πŸ“Š Input channels: $(grep -c '^#EXTINF:' bulk_import.m3u || echo '0')" - fi - - if [ -f "playlist.m3u" ]; then - echo "πŸ“Š Output channels: $(grep -c '^#EXTINF:' playlist.m3u || echo '0')" - echo "βœ… Status: Success" + echo "Running playlist generation..." + cd scripts + if [ -f generate_playlist.py ]; then + echo "Found generate_playlist.py, executing..." + timeout 120 python3 generate_playlist.py + echo "Playlist generation completed" else - echo "❌ Status: Failed" + echo "Error: generate_playlist.py not found" + exit 1 + fi + + - name: Check Results + run: | + echo "Checking generation results..." + if [ -f playlist.m3u ]; then + CHANNELS=$(grep -c "^#EXTINF" playlist.m3u || echo "0") + echo "βœ… Generated playlist.m3u with $CHANNELS channels" + SIZE=$(wc -c < playlist.m3u) + echo "File size: $SIZE bytes" + else + echo "❌ No playlist.m3u generated" fi - echo "" - echo "πŸ”— Download processed playlist from artifacts above ⬆️" \ No newline at end of file + if [ -f channels.txt ]; then + LINES=$(wc -l < channels.txt) + echo "βœ… channels.txt has $LINES lines" + else + echo "ℹ️ No channels.txt found" + fi + + - name: Create Simple Report + run: | + echo "Creating report..." + DATE=$(date +%Y%m%d_%H%M%S) + REPORT="reports/daily/report_$DATE.md" + + echo "# Playlist Report" > "$REPORT" + echo "Generated: $(date)" >> "$REPORT" + + if [ -f playlist.m3u ]; then + CHANNELS=$(grep -c "^#EXTINF" playlist.m3u || echo "0") + echo "Channels: $CHANNELS" >> "$REPORT" + else + echo "Channels: 0" >> "$REPORT" + fi + + echo "Report created: $REPORT" + + - name: Clean Old Reports + run: | + echo "Cleaning old reports..." + cd reports/daily + if ls *.md >/dev/null 2>&1; then + COUNT=$(ls *.md | wc -l) + echo "Found $COUNT reports" + if [ "$COUNT" -gt 3 ]; then + echo "Removing excess reports..." + ls -t *.md | tail -n +4 | xargs rm -f + echo "Cleanup done" + fi + else + echo "No reports to clean" + fi + cd ../.. + + - name: Reset Import File + run: | + echo "Resetting import file..." + echo '#EXTM3U' > bulk_import.m3u + echo "Import file reset" + + - name: Commit Changes + run: | + echo "Committing changes..." + git add . + if git diff --staged --quiet; then + echo "No changes to commit" + else + CHANNELS="0" + if [ -f playlist.m3u ]; then + CHANNELS=$(grep -c "^#EXTINF" playlist.m3u || echo "0") + fi + git commit -m "πŸ“Ί Updated playlist with $CHANNELS channels - $(date '+%Y-%m-%d %H:%M')" + git push + echo "Changes committed" + fi + + - name: Summary + run: | + echo "=== WORKFLOW COMPLETE ===" + if [ -f playlist.m3u ]; then + CHANNELS=$(grep -c "^#EXTINF" playlist.m3u || echo "0") + echo "βœ… Playlist has $CHANNELS channels" + fi + echo "βœ… Reports updated" + echo "βœ… Repository cleaned" \ No newline at end of file