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
- Membersihkan gambar orphan: Menghapus file
.webpyang tidak punya pasangan.html. - Membuat laporan harian: Menghitung jumlah file HTML, WebP, PNG, dan membuat badge status otomatis.
๐ 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:
10-22-laporan_konten.txtโ laporan jumlah filehtml_webp_badge.jsonโ badge status- Beberapa laporan sebelumnya (maksimal 7 hari)
๐ก 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 ๐