name: IPTV Channel Country Detection on: push: branches: [ main, master ] paths: - 'bulk_import.m3u' - 'iptv_country_script.py' pull_request: branches: [ main, master ] workflow_dispatch: inputs: run_processing: description: 'Run IPTV processing' required: false default: 'true' jobs: process-iptv-channels: runs-on: ubuntu-latest steps: - name: πŸ“¦ Checkout Repository uses: actions/checkout@v4 - name: 🐍 Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' - name: πŸ“‹ Install Dependencies run: | python -m pip install --upgrade pip # Add any additional dependencies if needed # pip install requests beautifulsoup4 - name: πŸ” Check for Input File 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 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" fi - name: 🎯 Run IPTV Channel Processing 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 else echo "❌ Processing failed - no output file generated" 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) 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" else echo "❌ Status: Failed" fi echo "" echo "πŸ”— Download processed playlist from artifacts above ⬆️"