bash
Catatan teknis seputar web development, DevOps, dan integrasi AI.
20 artikel
- 04.14testing
Unit Testing yang Isinya Bukan Cuma Unit Test
Satu script per tier testing: vet, integration MySQL asli, smoke gate, sampai E2E Playwright.
TL;DR: Dulu push kode ribet harus ketik command panjang manual suka ada yang kelupaan pas buru-buru. Sekarang semua diringkas jadi empat script backend frontend e2e sama smoke yang otomatis berhenti kalau ada yang gagal. Ditambah ada panduan jelas di README kapan harus jalanin tes yang mana jadi nggak nebak-nebak lagi.
#testing#bash#go - 03.09devops
Arah DB Dibalik, Semua Asumsi Safety Ikut Terbalik
Membalik arah db-push jadi db-pull bukan cuma menukar panah: backup lokal dulu, dump divalidasi sebelum dipercaya, aturan backtick berubah di SSH.
TL;DR: Bikin script db-pull tuh ngeri karena yang ketimpa database lokal, bukan staging lagi. Makanya urutannya dibalik, wajib backup lokal dulu, terus dump staging dicek ukuran sama tanda Dump completed baru di-replace. Terus verifikasinya ketat banget, hitung baris tiap tabel harus sama persis, backtick juga diakalin biar aman di SSH.
#mysql#bash#docker - 23.29devops
Validator Raib, CI Tetap Hijau
Sync mirror menghapus skrip validasi dan CI tetap hijau. Tiga kelas kegagalan validator plus dua pagar murah berupa anchor wajib dan checksum beku.
TL;DR: Validator bisa hilang diam-diam tapi pipeline tetap hijau, padahal hijau harusnya berarti sehat. Ada tiga kelas kegagalannya: validator hilang, rusak senyap, atau rapuh gara-gara perilaku shell yang beda-beda. Solusinya murah: wajibkan anchor di terjemahan dan freeze checksum selftest, jadi kalau validator nggak cocok pipeline langsung merah.
#git#bash#python - 21.30devops
Argumen Tertukar, Budget Terbakar: Validasi Harus di Paling Atas
Set -euo pipefail tidak menyelamatkan skrip dari argumen tertukar. Guard whitelist dan exit code khusus di pintu masuk mencegah budget terbakar.
TL;DR: Job pertama lancar tapi argumen skrip ternyata tertukar, dana $0.137 kebuang percuma padahal set -euo pipefail udah aktif. Ternyata -u cuma nangkep variabel yang belum didefinisiin, bukan yang isinya salah. Solusinya: guard validasi di paling atas skrip pakai case, lengkap sama exit code khusus biar gagalnya cepat.
#bash#shellcheck#linux - 20.39devops
Launcher Dua Kali Bayar: Tiga Lapis Penjaga Sebelum Skrip Delegasi Menyala
Skrip delegasi yang diluncurkan dua kali menghabiskan budget dua kali. Guard flock, cek artefak, dan pgrep menolak sebelum mulai.
TL;DR: Ceritanya session Claude Code kelihatan macet padahal lagi mikir, jadi gue jalankan ulang dan dua proses makan budget bareng. Solusinya flock -n via file descriptor, plus cek result JSON lama dan pgrep -f buat deteksi proses kembar. Alasan penolakan dibedain lewat exit code 42, 43, 44 biar gampang debug.
#bash#devops#automation - 13.54testing
Triase Merah 14 dari 19: Saat Fixture Bash yang Cacat Menipu Validator
Dari 19 test yang harusnya hijau, 14 lulus. Sisanya gagal bukan karena validator lemah, tapi karena fixture bash yang menghasilkan JSON invalid — cacat yang perlu ditriase, bukan ditutupi.
TL;DR: Gue nambah 330 baris validator buat banyak aturan tapi hasilnya cuma 14 dari 19 lolos. Awalnya ngira logika validator yang error, ternyata fixture bash-nya yang ngaco ngasih JSON invalid. Jadi skornya gue biarin aja segitu dan catet detail gagalnya di laporan T3a biar transparan.
#testing#bash#fixture - 13.54testing
Saat Validator Mulai Salah Tuduh
Validator yang terlalu sensitif menuduh data valid sebagai pelanggaran. Saya pasang kontrol negatif + positif + reason-code eksak supaya setiap penolakan bisa diverifikasi secara programatik.
TL;DR: Validator awalnya ngaco nuduh data padahal sumbernya emang kosong jadi presisinya ancur. Makanya dibikin tes R80b buat ngecek false positive maksimal 2 dari 20 kasus plus R97 yang maksa reason-code jelas. Ada juga kontrol positif biar yang harusnya lolos tetap lolos dan digest nggak dihitung ulang.
#testing#bash#quality-assurance - 12.56testing
Implementasi palsu wajib gagal: menguji selftest sendiri
Suite hijau semua belum tentu bagus. Saya suapkan tiga implementasi palsu ke selftest 32 test biar grader terbukti nggak bisa dibodohi.
TL;DR: Suite test hijau semua bisa bohong, soalnya validator yang isinya cuma exit 0 tetap lolos tanpa ngetes apa-apa. Jadi penulis bikin tiga skrip palsu (selalu sukses, selalu gagal, emit semua kode alasan) yang wajib ditolak dengan PASS=0, plus sha256-nya dikunci biar grader nggak bisa dibobol. Ini mutation testing versi manual: kalau suite nggak nolak yang salah, berarti test-nya nggak berguna.
#testing#bash#python - 12.06testing
Membekukan kontrak CLI dengan 32 test merah
Kisah commit 6f5ae82: selftest 32 test sengaja dibikin gagal dulu untuk membekukan kontrak CLI, baru implementasinya ditulis sampai hijau.
TL;DR: Awalnya penulis kira 32 test merah itu bug, ternyata emang sengaja dibikin gagal sebagai fase RED di TDD. Kontrak CLI dibekukan dulu lewat test pakai varian batch-freeze, bukan TDD kanonik, biar nggak nyimpang pas ngoding. Jadi layar merah itu bukan tanda proyek bermasalah, tapi peta spesifikasi yang tinggal dikejar sampai hijau.
#testing#bash#cli