name: Generate M3U Playlist with Auto-Organization on: push: branches: - main workflow_dispatch: jobs: build-and-organize: runs-on: ubuntu-22.04 timeout-minutes: 5 steps: - name: Checkout Repository uses: actions/checkout@v4 - name: Configure Git run: | git config --local user.email "actions@forgejo.plainrock127.xyz" git config --local user.name "IPTV Playlist Bot" - name: Setup Python Environment run: | 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 "Creating empty bulk_import.m3u" echo '#EXTM3U' > bulk_import.m3u fi - name: Verify Scripts Directory run: | echo "Checking scripts directory..." if [ -d scripts ]; then echo "Scripts directory exists" ls -la scripts/ else echo "Scripts directory not found!" exit 1 fi - name: Run Playlist Generation timeout-minutes: 3 run: | 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 "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 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"