Implementasi Pre-Commit Git Hook untuk Memastikan Kode Tanpa Error
Pengembangan perangkat lunak yang efektif dan berkualitas membutuhkan langkah-langkah yang hati-hati sepanjang siklus pengembangan. Salah satu aspek penting dari proses ini adalah memastikan bahwa setiap commit yang masuk ke repositori memenuhi standar kualitas tertentu. Dalam artikel ini, kita akan membahas implementasi Git Hooks Pre-Commit, sebagai tools untuk meningkatkan kualitas kode sebelum dilakukan commit.
Secara konseptual, Git hooks adalah skrip-skrip khusus yang dieksekusi oleh Git setiap kali ada peristiwa tertentu di dalam repositori. Fungsinya mirip seperti pemberitahuan yang memberitahu Git untuk melakukan sesuatu saat kejadian khusus terjadi.
Skrip-skrip ini bisa dikonfigurasi di repositori lokal atau di server, tergantung di mana kita ingin menjalankan tindakan kustom. Contohnya, jika kita ingin menjalankan suatu skrip atau perintah secara otomatis setiap kali ada yang melakukan commit, kita dapat menggunakan Git hook yang disebut “pre-commit hook”. Begitu juga dengan berbagai peristiwa lainnya, seperti sebelum melakukan push atau setelah melakukan merge.
Git Hooks Pre Commit
Mari kita bayangkan Git Hooks Pre Commit seperti alarm pintu rumah Anda. Alarm ini terpasang di pintu masuk rumah Anda dan berbunyi setiap kali ada sesuatu yang mencurigakan sebelum Anda keluar atau masuk ke rumah.
Setiap kali Anda hendak keluar atau masuk ke rumah (melakukan commit), alarm pintu (Git Hooks Pre Commit) menyala dan memeriksa apakah semuanya aman dan sesuai. Jika ada hal yang mencurigakan, seperti kunci yang tertinggal di luar (kesalahan kode), alarm akan berbunyi, memberi tahu Anda bahwa ada sesuatu yang perlu diperbaiki sebelum melanjutkan.
Dengan analogi ini, Git Hooks Pre Commit berperan sebagai alarm pintu yang membantu menjaga keamanan dan keberlanjutan rumah (proyek) Anda, memastikan bahwa setiap “masuk” atau “keluar” dari rumah (commit) dilakukan dengan aman dan sesuai standar keamanan.
Jadi dapat disimpulkan, Git hooks pre-commit adalah skrip khusus yang dijalankan otomatis oleh Git sebelum proses commit dilakukan. Tujuan utamanya adalah memeriksa dan mengontrol perubahan yang akan dicommit memenuhi standar kualitas tertentu. Pre-commit hook dijalankan secara lokal di mesin pengembang sebelum commit dibuat, sehingga dapat digunakan untuk mendeteksi kesalahan lebih awal dan mencegahnya dari dicommit.
Contoh Tugas Git Hooks Pre Commit:
Berikut beberapa contoh tugas yang dapat dilakukan menggunakan pre-commit hook:
- Code Formatting: Pre-commit hook dapat digunakan untuk memastikan bahwa kode yang akan di-commit diformat dengan benar sesuai dengan panduan gaya atau konvensi tertentu.
- Linting: Pre-commit hook dapat digunakan untuk menjalankan alat analisis statis seperti Pylint atau Flake8 untuk memeriksa kode terhadap kesalahan umum atau pelanggaran gaya.
- Testing: Pre-commit hook dapat digunakan untuk menjalankan pengujian otomatis untuk memastikan bahwa kode yang akan di-commit lulus semua pengujian.
Proses Standarisasi Git Hooks Pre Commit
Proses Standarisasi Pre-Commit adalah serangkaian langkah penting untuk memastikan kualitas dan konsistensi kode sebelum dilakukan commit dalam pengembangan perangkat lunak. Proses Standarisasi Pre-Commit digambarkan seperti memeriksa tas sebelum pergi ke perjalanan penting. Pertama, kita periksa apakah ada barang yang mungkin tertinggal atau rusak di dalam tas, mirip dengan langkah pertama “Check Error Code” yang memeriksa kemungkinan kesalahan dalam kode. Kemudian, kita pastikan tidak membawa sesuatu yang bisa menyebabkan masalah selama perjalanan, mirip dengan “Check Code yang Memungkinkan Bug” yang mengecek potensi bugs sebelum menjalankan kode.
Setelah itu, kita pastikan penampilan dan tata letak barang-barang di dalam tas sesuai dengan aturan tata cara yang telah ditentukan, seperti “Check Standard Code” yang mengecek apakah penulisan kode sesuai dengan aturan standar. Akhirnya, kita memastikan tidak ada barang yang tidak diperlukan, seperti alat debug (Check Debugger) seperti “print_r()”, yang dihapus untuk memastikan kode yang dikirimkan bersih dan siap digunakan.
Berikut adalah penjelasan dari masing-masing langkah dalam Proses Standarisasi Git Hooks Pre Commit ini
- Check Error Code: Langkah pertama melibatkan pemeriksaan terhadap kode yang mungkin mengandung error. Hal ini bertujuan untuk mendeteksi potensi masalah sejak dini dan memastikan bahwa kode yang dikirimkan bebas dari kesalahan. Check Code yang Memungkinkan Bug: Dilakukan pemeriksaan pada seluruh kode yang memiliki potensi menyebabkan bugs sebelum kode tersebut dijalankan. Penggunaan PHPStan membantu mendeteksi dan mengidentifikasi potensi kesalahan logika atau tipe sebelum masuk ke tahap berikutnya.
- Check Standard Code: Proses ini mencakup pemeriksaan terhadap kesesuaian penulisan kode dengan aturan standar seperti PHP PSR12 dan Symphony. Ini bertujuan untuk menjaga konsistensi gaya kode di seluruh proyek dan mengurangi adanya “code smell”. Alat seperti php-cs-fixer digunakan untuk memastikan kepatuhan terhadap standar ini.
- Check Debugger: Tahap terakhir melibatkan pemeriksaan terhadap kode yang masih mengandung debugger seperti print_r(), var_dump(), dan console. Menghapus debugger dari kode adalah langkah kritis untuk memastikan bahwa kode yang dikirimkan ke repositori tidak mengandung informasi sensitif dan siap untuk produksi.
Bagaimana mengimplementasikan Git Hooks Pre Commit dalam sebuah projek ?
Penerapan Git Hooks Pre-Commit tidak terbatas pada satu bahasa pemrograman saja. Dalam konteks penggunaan Git Hooks Pre-Commit, tugas-tugas yang dijalankan dapat mencakup pemeriksaan kualitas kode, analisis statis, atau pembersihan kode agar sesuai dengan standar tertentu. Oleh karena itu, baik proyek berbasis PHP, JavaScript, Python, Java, atau bahasa pemrograman lainnya dapat memanfaatkan Git Hooks Pre-Commit untuk memastikan bahwa setiap kontribusi memenuhi standar dan kualitas yang diinginkan. Artikel ini akan membahas secara rinci langkah-langkah konkretnya, dengan fokus pada integrasi dengan PHP-CS-FIXER untuk proyek berbasis PHP, serta ESLint and Prettier untuk proyek berbasis JavaScript dan TypeScript.
Implementasi Static Analysis Tools pada PHP:
- PHPStan (PHP Static Analysis Tools) PHPStan (PHP Static Analiysis Tools) merupakan salah satu tools untuk menganalisa code php yang berpotensi bugs tanpa benar benar menjalankan program tersebut, pada PHPStan terdapat 10 level rules yang dapat diatur dari level 0 sampai 9, semakin tinggi rules semakin strict code yang di analiysis. PHPStan memiliki requires PHP >= 7.2 Untuk mengakses dokumentasinya dapat dilihat pada page berikut https://phpstan.org
- PHP-CS-Fixer PHP-CS-FIXER merupakan tools untuk memperbaiki kode PHP agar mengikuti standard penulisan kode PHP seperti PSR (PHP Standard Recommendation), Symfony dan dapat di custom sesuai dengan kebutuhan project. Php-cs-fixer requires PHP >= 7.4
- Untuk mengakses dokumentasinya dapat dilihat pada page berikut : https://github.com/PHP-CS-Fixer/PHP-CS-Fixer https://en.wikipedia.org/wiki/PHP_Standard_Recommendation
Implementasi PHP CS-Fixer:
Install php-cs-fixer secara global seperi berikut composer global require friendsofphp/php-cs-fixer
Install PHPStan secara global seperi berikut composer global require phpstan/phpstan
Buatlah folder hooks pada roots project dan jalankan command berikut git config core.hooksPath hooks
, hooks disini adalah nama file hooks yang ter-track pada repository git
Implementasi Static Analysis Tools pada Javascript/Typescript:
Sama seperti PHP, Javascript ataupun typescript dapat menggunakan git hook Pre-commit tetapi dengan tools yang tentu berbeda menggunakan :
- Eslint untuk menganalisa source code untuk menandai errors, bug, code convention dan memverifikasi kualitas kode mirip seperti PHPStan,
- Prettier merupakan tools untuk memperbaiki / memformat berbagai macam Bahasa pemrograman seperti JS, TS, dll mirip seperti php-cs-fixer,
- Husky merupakan tools javascript untuk menjalankan skrip dalam file package.json dalam git lifecycle hooks.
- Lint-staged menjalankan skrip yang ditentukan hanya pada file yang ditetapkan pada staged.
Implementasi Eslint & Prettier:
Lalu Install ESLint dan Prettier dengan command berikut npm install --save-dev --save-exact prettier eslint-config-prettier
Jalankan command berikut npm init @eslint/config
untuk melakukan config pada eslint, lalu pilih pilhan pertanyaan seperti berikut
Lalu akan muncul file .eslintrc.json pada root file project
Isi file .eslintrc.json seperti berikut
Buat eslint ignore untuk membatasi pengecekan code pada project, tambahkan file .eslintignore pada root project seperti berikut
Jalankan command berikut untuk membuat config prettier touch .prettierrc.json
file tersebut akan muncul pada root project, dan tuliskan seperti berikut
Install dan inisialisasi husky dengan command berikut npx husky-init && npm install
dan akan muncul folder .husky didalanya ada file pre-commit.
Install juga lint-stagednya dengan command berikut npm i --save-dev lint-staged
Edit file pre-commit pada folder .husky seperti berikut
Dan lakukan edit kembali pada file package.json seperti berikut
Evidence Hasil
Kesimpulan
Dengan Git hooks, kita bisa mengotomatisasi berbagai aspek dalam pengembangan perangkat lunak kita, seperti memeriksa kualitas kode sebelum commit atau menjalankan tes secara otomatis. Git hooks membuat pengelolaan dan penggunaannya jadi lebih fleksibel dan efisien.