Pernahkah kamu terjebak dalam rutinitas membosankan di mana kamu perlu mengganti satu kata atau kalimat yang sama persis di puluhan hingga ratusan file berbeda? Pekerjaan yang tadinya terlihat sepele bisa menyedot waktu berjam-jam dan rentan terhadap human error. Tentu sangat melelahkan jika proses ini dilakukan secara manual satu per satu.
Namun, jika kodemu bersarang di GitHub, ada kabar baik untukmu. Dengan memanfaatkan fitur GitHub Actions, kita bisa membangun sebuah workflow mandiri yang berfungsi sebagai alat "Cari dan Ganti" (Find and Replace) massal yang berjalan otomatis untuk seluruh repositori kita. Hebatnya lagi, semua ini bisa dieksekusi hanya dengan beberapa klik langsung dari halaman repositori GitHub, tanpa harus membuka code editor di laptopmu!
Contoh Kasus Penggunaan ⚙️
Sebelum kita terjun ke kode teknisnya, mari kita lihat beberapa skenario nyata di mana alat otomatisasi ini akan sangat menyelamatkan harimu:
- Update Tahun Copyright: Memasuki pergantian tahun, kamu tentu perlu mengganti teks "🄯 2024" menjadi "🄯 2025". Daripada mencari satu per satu, skrip ini bisa mengubahnya secara serentak di seluruh file
.htmlyang ada di dalam folderdocs. - Perbarui Link yang Kedaluwarsa: Mengubah susunan struktur URL dari
/blog/lama/menjadi direktori/artikel/baru/di dalam ratusan file Markdown (.md) hanya dalam hitungan detik. - Refactor Kode Secara Global: Mengganti penamaan fungsi atau variabel yang usang, misalnya mengubah
old_function_namemenjadi format camelCasenewFunctionNamedi seluruh file berekstensi.js.
Bagaimana Cara Pakainya?
Setelah kamu menambahkan kode workflow ke dalam repositori (kodenya ada di bagian bawah artikel ini), begini cara mengeksekusinya:
- Pergi ke tab "Actions" yang ada di bagian atas repositori GitHub kamu.
- Di menu sebelah kiri, carilah dan klik pada nama workflow: "ganti isi teks dalam file".
- Di sisi kanan layar, kamu akan melihat tombol bertuliskan "Run workflow". Klik tombol tersebut.
- Sebuah formulir interaktif akan muncul. Isi parameter berikut sesuai kebutuhanmu:
- Teks yang mau diganti (search): Kata, frasa, atau kalimat spesifik yang ingin kamu cari. Ingat, sistem ini bersifat case-sensitive.
- Teks pengganti (replace): Kata atau frasa baru yang akan menggantikan teks lama.
- Folder target (folder): Arahkan ke folder spesifik tempat pencarian dilakukan (misal:
docsatausrc). Jika kamu membiarkannya berisi tanda., maka pencarian akan menjelajah ke seluruh isi repositori. - Polanya file (globs): Tipe ekstensi file yang akan diubah. Kamu bisa memisahkannya dengan koma (misal:
/*.html,/*.md).
- Klik tombol hijau "Run workflow" di bagian bawah form. Duduk manis, dan biarkan peladen GitHub yang bekerja!
Kode Workflow Lengkap
Untuk mengaktifkan fitur ajaib ini, kamu hanya perlu menyalin blok kode YAML di bawah ini dan menyimpannya di dalam repositorimu tepatnya pada path direktori .github/workflows/find-replace.yml.
name: ganti isi teks dalam file
on:
workflow_dispatch:
inputs:
search:
description: 'Teks yang mau diganti (case-sensitive)'
required: true
default: 'makan siang bersama'
replace:
description: 'Teks pengganti'
required: true
default: 'mandi pagi sendirian'
folder:
description: 'Folder target (misal: content, src). Kosong = root repo'
required: false
default: '.'
globs:
description: 'Polanya file (misal: /*.txt,/*.html)'
required: false
default: '/*.txt,/*.html'
jobs:
replace:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Jalankan penggantian string di folder terpilih
run: |
TARGET="${{ github.event.inputs.folder }}"
SEARCH_TERM="${{ github.event.inputs.search }}"
REPLACE_TERM="${{ github.event.inputs.replace }}"
# Ubah koma menjadi spasi untuk keperluan looping
read -ra GLOBS <<< "${{ github.event.inputs.globs//,/ / }}"
for g in "${GLOBS[@]}"; do
echo "🔎 Proses pola: '$g' di folder '$TARGET'"
# Gunakan utilitas find -path untuk mencocokkan pola /*
find "$TARGET" -path "$g" -type f -print0 | while IFS= read -r -d '' file; do
# Gunakan bahasa perl untuk find & replace yang aman dari karakter aneh
perl -pi -e 's#\Q$ENV{SEARCH_TERM}\E#$ENV{REPLACE_TERM}#g' "$file"
done
done
- name: Commit & push perubahan
run: |
git config user.name "${{ github.actor }}"
git config user.email "${{ github.actor }}@users.noreply.github.com"
git add -A
# Gunakan perintah || true agar pipeline tidak terhenti (error) jika tidak ada teks yang berubah
git commit -m "chore: ganti '${{ github.event.inputs.search }}' -> '${{ github.event.inputs.replace }}'" || true
git push
Bedah Singkat Anatomi Kode
Bagi kamu yang penasaran bagaimana sihir ini bekerja di belakang layar, berikut adalah penjelasan dari blok kode utama di atas:
on: workflow_dispatch: inputs:→ Bagian krusial inilah yang menginstruksikan GitHub untuk tidak menjalankan skrip secara otomatis (misalnya saat push), melainkan menciptakan formulir input interaktif saat kita menekan tombol "Run workflow".- Jalankan penggantian... → Pada langkah ini, kita mendayagunakan kombinasi perintah sistem operasi Linux. Kita memakai
finduntuk menyusuri dan mencari file berdasarkan pola (glob) yang kita masukkan. Setelah file terpetakan, kita tidak menggunakansed, melainkan menggunakanperluntuk melakukan eksekusi penggantian teks. Mengapa? Karena Perl jauh lebih stabil, andal, dan aman dalam memproses karakter-karakter aneh atau special characters yang mungkin terkandung dalam teksmu. - Commit & push... → Begitu proses modifikasi teks rampung, skrip bot ini akan mengambil alih fungsi Git dasar. Ia akan membungkus seluruh perubahan menjadi sebuah commit baru dengan pesan rekam jejak yang jelas, lalu mendorong (push) perubahannya langsung ke branch repositorimu.
Dengan alat ini, manajemen aset kode di repositorimu kini jadi jauh lebih mudah, efisien, dan modern. Selamat mencoba dan tingkatkan produktivitas coding kamu!