diff --git a/.forgejo/workflows/generate-m3u.yml b/.forgejo/workflows/generate-m3u.yml index 87bc418..653e6b6 100644 --- a/.forgejo/workflows/generate-m3u.yml +++ b/.forgejo/workflows/generate-m3u.yml @@ -23,150 +23,295 @@ jobs: git config --local user.email "actions@forgejo.plainrock127.xyz" git config --local user.name "IPTV Playlist Bot" - - name: đ Create directory structure + - name: đ Create directory structure and initial files run: | echo "=== Creating directory structure ===" mkdir -p logs config templates scripts docs - chmod 664 channels.txt 2>/dev/null || echo "channels.txt not found" - chmod 664 bulk_import.m3u 2>/dev/null || echo "bulk_import.m3u not found" + + echo "=== Creating initial config files if they don't exist ===" + if [ ! -f config/settings.json ]; then + cat > config/settings.json << 'EOF' + { + "remove_duplicates": true, + "sort_channels": true, + "validate_urls": false, + "backup_before_import": true, + "auto_cleanup_import": true + } + EOF + echo "Created config/settings.json" + fi + + if [ ! -f config/group_overrides.json ]; then + cat > config/group_overrides.json << 'EOF' + { + "ESPN": "Sports", + "Fox Sports": "Sports", + "CNN": "News", + "BBC": "News", + "Discovery": "Documentary", + "HBO": "Movies", + "Disney": "Kids", + "MTV": "Music" + } + EOF + echo "Created config/group_overrides.json" + fi + + echo "=== Creating initial channels.txt if it doesn't exist ===" + if [ ! -f channels.txt ]; then + cat > channels.txt << 'EOF' + Group = Example + Stream name = Test Channel + Logo = https://example.com/logo.png + EPG id = test.example + Stream URL = http://example.com/stream + EOF + echo "Created initial channels.txt with example channel" + fi + + echo "=== Setting permissions ===" + chmod 664 channels.txt 2>/dev/null || true + chmod 664 bulk_import.m3u 2>/dev/null || true - name: đ Pre-processing diagnostics run: | echo "=== Repository Status ===" - pwd && whoami && ls -la - echo "=== File Status ===" - if [ -f channels.txt ]; then - echo "channels.txt: $(wc -l < channels.txt) lines" + echo "Directory: $(pwd)" + echo "User: $(whoami)" + echo "Files:" + ls -la + + echo "=== Checking required files ===" + echo "scripts/generate_playlist.py:" + if [ -f scripts/generate_playlist.py ]; then + echo " â Found" else - echo "channels.txt: Not found" + echo " â Missing - this will cause the workflow to fail" + echo " Please ensure you created the file with the exact path: scripts/generate_playlist.py" fi - if [ -f bulk_import.m3u ]; then - echo "bulk_import.m3u: $(wc -l < bulk_import.m3u) lines" + + echo "channels.txt:" + if [ -f channels.txt ]; then + echo " â Found ($(wc -l < channels.txt) lines)" else - echo "bulk_import.m3u: Not found" + echo " â Missing" + fi + + echo "bulk_import.m3u:" + if [ -f bulk_import.m3u ]; then + echo " â Found ($(wc -l < bulk_import.m3u) lines)" + else + echo " âšī¸ Not found (this is normal if no import needed)" fi - name: đ Generate M3U Playlist run: | - echo "Starting playlist generation..." + echo "=== Starting playlist generation ===" + if [ ! -f scripts/generate_playlist.py ]; then + echo "â ERROR: scripts/generate_playlist.py not found!" + echo "Please create this file with the Python script content." + exit 1 + fi + + echo "Running playlist generation..." python scripts/generate_playlist.py + echo "â Playlist generation completed" - name: đ Post-processing diagnostics run: | echo "=== Processing Results ===" + echo "Files after processing:" ls -la + + echo "=== Checking outputs ===" if [ -f playlist.m3u ]; then - echo "playlist.m3u: Generated ($(wc -l < playlist.m3u) lines)" + LINES=$(wc -l < playlist.m3u) + CHANNELS=$(grep -c "^#EXTINF" playlist.m3u || echo "0") + echo "â playlist.m3u: Generated successfully" + echo " đ $LINES total lines, $CHANNELS channels" + echo " đ First few lines:" + head -5 playlist.m3u | sed 's/^/ /' else - echo "playlist.m3u: Not generated" + echo "â playlist.m3u: Not generated" fi + if [ -f bulk_import.m3u ]; then - echo "bulk_import.m3u: Still exists" + echo "â ī¸ bulk_import.m3u: Still exists (cleanup may have failed)" else - echo "bulk_import.m3u: Cleaned up" + echo "â bulk_import.m3u: Cleaned up or not present" fi - echo "=== Logs ===" - if [ -f logs/playlist_update.log ]; then - echo "Main log (last 10 lines):" - tail -10 logs/playlist_update.log - fi - if [ -f logs/error.log ]; then - echo "Errors found:" - cat logs/error.log + + echo "=== Checking logs ===" + if [ -d logs ]; then + echo "đ Log files:" + ls -la logs/ || echo "No log files yet" + + if [ -f logs/playlist_update.log ]; then + echo "đ Main log (last 10 lines):" + tail -10 logs/playlist_update.log | sed 's/^/ /' + fi + + if [ -f logs/error.log ]; then + echo "â Errors found:" + cat logs/error.log | sed 's/^/ /' + else + echo "â No errors logged" + fi else - echo "No errors logged" + echo "â No logs directory created" fi - name: đ Generate statistics run: | + echo "=== Playlist Statistics ===" if [ -f playlist.m3u ]; then CHANNEL_COUNT=$(grep -c "^#EXTINF" playlist.m3u || echo "0") GROUPS=$(grep -o 'group-title="[^"]*"' playlist.m3u | sort -u | wc -l || echo "0") - echo "Total channels: $CHANNEL_COUNT" - echo "Number of groups: $GROUPS" + TOTAL_LINES=$(wc -l < playlist.m3u) + + echo "đē Total channels: $CHANNEL_COUNT" + echo "đ Number of groups: $GROUPS" + echo "đ Total lines in M3U: $TOTAL_LINES" + + if [ "$GROUPS" -gt 0 ]; then + echo "đˇī¸ Channel groups:" + grep -o 'group-title="[^"]*"' playlist.m3u | sed 's/group-title="//;s/"//' | sort | uniq -c | sort -nr | head -10 | sed 's/^/ /' + fi else - echo "No playlist generated" + echo "â No playlist generated - cannot show statistics" fi - name: đĻ Prepare deployment run: | + echo "=== Preparing deployment files ===" mkdir -p docs - [ -f playlist.m3u ] && cp playlist.m3u docs/ - [ -f channels.txt ] && cp channels.txt docs/ - [ -d logs ] && cp -r logs docs/ + # Copy main files + [ -f playlist.m3u ] && cp playlist.m3u docs/ && echo "â Copied playlist.m3u" + [ -f channels.txt ] && cp channels.txt docs/ && echo "â Copied channels.txt" + [ -d logs ] && cp -r logs docs/ && echo "â Copied logs directory" + + # Create web interface cat > docs/index.html << 'EOF'
-Last Updated:
- +