๐Ÿ”† Pengecekan & Laporan Konten Harian

Workflow ini berjalan otomatis di GitHub Actions setiap hari untuk menjaga kebersihan dan keteraturan konten di situs dalam.web.id. Ia melakukan dua hal penting: membersihkan gambar yang tidak dipakai lagi (orphan) dan membuat laporan jumlah konten serta badge status yang bisa ditampilkan di halaman utama. Santai tapi disiplin ๐Ÿ˜„

๐Ÿงฉ Alur Kerja (Flow)

โฐ Jadwal Otomatis (21:00 UTC)
๐Ÿงน Cleanup Orphan
๐Ÿ“Š Reporting
๐Ÿš€ Commit & Push

๐Ÿงญ Tujuan Workflow

๐Ÿ“œ Kode Workflow Lengkap

name: ๐Ÿ”† Pengecekan & Laporan Konten Harian
on:
 schedule:
 - cron: '0 21 * * *'
 workflow_dispatch:
jobs:
 cleanup:
 runs-on: ubuntu-latest
 permissions:
 contents: write
 steps:
 - uses: actions/checkout@v4
 with:
 fetch-depth: 0
 - name: Cari dan Hapus Gambar Orphan
 id: cleanup_step
 run: |
 echo "๐Ÿงน Memulai proses..."
 DELETED_COUNT=0
 for webp_file in img/*.webp; do
 base=$(basename "$webp_file" .webp)
 html="artikel/${base}.html"
 if [ ! -f "$html" ]; then
 git rm -f "$webp_file"
 DELETED_COUNT=$((DELETED_COUNT+1))
 fi
 done
 echo "deleted_count=$DELETED_COUNT" >> $GITHUB_OUTPUT
 - if: steps.cleanup_step.outputs.deleted_count != '0'
 run: |
 git config user.name "github-actions[bot]"
 git config user.email "github-actions[bot]@users.noreply.github.com"
 git commit -m "chore(cleanup): hapus gambar orphan"
 git pull origin main --rebase
 git push
 reporting:
 needs: cleanup
 runs-on: ubuntu-latest
 permissions:
 contents: write
 steps:
 - uses: actions/checkout@v4
 - run: sudo apt-get update && sudo apt-get install -y jq
 - name: Setup Variabel
 id: vars
 run: |
 TARGETS="artikel img"
 DATE=$(date +'%m-%d')
 REPORT="mini/${DATE}-laporan_konten.txt"
 echo "report=$REPORT" >> $GITHUB_OUTPUT
 echo "targets=$TARGETS" >> $GITHUB_OUTPUT
 - name: Hitung File
 id: count
 run: |
 TARGETS="${{ steps.vars.outputs.targets }}"
 declare -A counts
 for ext in html webp png; do
 counts[$ext]=$(find $TARGETS -maxdepth 1 -type f -iname "*.$ext" | wc -l)
 done
 counts[all]=$(find $TARGETS -maxdepth 1 -type f | wc -l)
 for k in "${!counts[@]}"; do echo "$k=${counts[$k]}" >> $GITHUB_OUTPUT; done
 - name: Buat Laporan
 run: |
 REPORT="${{ steps.vars.outputs.report }}"
 DATE=$(date +'%d %B %Y')
 mkdir -p mini
 {
 echo "LAPORAN KONTEN ($DATE)"
 echo "==========================="
 echo "HTML=${{ steps.count.outputs.html }}, WEBP=${{ steps.count.outputs.webp }}, PNG=${{ steps.count.outputs.png }}"
 echo ""
 echo "URL Artikel:"
 find artikel -maxdepth 1 -iname "*.html" | sort
 } > "$REPORT"
 - name: Buat Badge JSON
 run: |
 mkdir -p mini
 html=${{ steps.count.outputs.html }}
 webp=${{ steps.count.outputs.webp }}
 color=$(if (( html > webp )); then echo red; elif (( html < webp )); then echo green; else echo blue; fi)
 jq -n --arg h "$html" --arg w "$webp" '{schemaVersion:1,label:"html/webp",message:("\($h)/\($w)"),color:"'$color'"}' > mini/html_webp_badge.json
 - name: Commit & Push
 run: |
 git config user.name "github-actions[bot]"
 git config user.email "github-actions[bot]@users.noreply.github.com"
 git add mini/*
 if ! git diff --staged --quiet; then
 git commit -m "chore: update laporan & badge konten"
 git pull origin main --rebase
 git push
 fi

๐Ÿ“ˆ Hasil Akhir

Setelah workflow selesai, folder mini/ akan berisi:

๐Ÿ’ก Kesimpulan

Dengan workflow ini, semuanya jadi otomatis: file lama dibersihkan, laporan diperbarui, dan badge status konten dibuat setiap hari tanpa sentuhan manual. Workflow kecil tapi sangat membantu menjaga kualitas konten di dalam.web.id ๐Ÿš€