PT. Neuronworks Indonesia

2023-12-19 05:30:56, Ristek ALPRA,


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:

  1. 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.
  2. Linting: Pre-commit hook dapat digunakan untuk menjalankan alat analisis statis seperti Pylint atau Flake8 untuk memeriksa kode terhadap kesalahan umum atau pelanggaran gaya.
  3. 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

image

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

  1. 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.
  2. 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.
  3. 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 dan Prettier untuk proyek berbasis JavaScript dan TypeScript.

Implementasi Static Analysis Tools pada PHP:

  1. 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
  2. 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
  3. 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:

  1. Pastikan perangkat anda sudah terinstall composer Download | Composer (getcomposer.org) image

  2. Install php-cs-fixer secara global seperi berikut composer global require friendsofphp/php-cs-fixer image

  3. Install PHPStan secara global seperi berikut composer global require phpstan/phpstan image

  4. 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 image

  5. Buatlah file pre-commit pada folder hooks seperti berikut
    imagedan tulis pre-commit dengan shell script seperti berikut https://github.com/azkajulda/pre-commit-php

  6. Lalu buat file phpstan.neon pada base project untuk konfigurasi file apa saja yang akan di scan pada PHPStan sesuaikan dengan project yang akan dijalankan, isi file tsb seperti berikut,

    https://github.com/azkajulda/pre-commit-php

    Evidence Ketika Error PHP image Evidence Ketika Ada Debugger image

    Evidence Ketika Masih Ada Potensi Bug imageEvidence Ketika package composer belum teinstall imageEvidence Jika Berhasil

    image

    Evidence Hasil php-cs-fixer image

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 :

  1. Eslint untuk menganalisa source code untuk menandai errors, bug, code convention dan memverifikasi kualitas kode mirip seperti PHPStan,
  2. Prettier merupakan tools untuk memperbaiki / memformat berbagai macam Bahasa pemrograman seperti JS, TS, dll mirip seperti php-cs-fixer,
  3. Husky merupakan tools javascript untuk menjalankan skrip dalam file package.json dalam git lifecycle hooks.
  4. Lint-staged menjalankan skrip yang ditentukan hanya pada file yang ditetapkan pada staged.

Implementasi Eslint & Prettier:

  1. Pastikan perangkat anda sudah terinstall node.js Download | Node.js (nodejs.org) image

  2. Lalu Install ESLint dan Prettier dengan command berikut npm install --save-dev --save-exact prettier eslint-config-prettier image

  3. Jalankan command berikut npm init @eslint/config untuk melakukan config pada eslint, lalu pilih pilhan pertanyaan seperti berikut

    image

  4. Lalu akan muncul file .eslintrc.json pada root file project

    image

  5. Isi file .eslintrc.json seperti berikut

    image

  6. Buat eslint ignore untuk membatasi pengecekan code pada project, tambahkan file .eslintignore pada root project seperti berikut
    image

  7. Jalankan command berikut untuk membuat config prettier touch .prettierrc.json file tersebut akan muncul pada root project, dan tuliskan seperti berikut

    image

  8. Install dan inisialisasi husky dengan command berikut npx husky-init && npm install dan akan muncul folder .husky didalanya ada file pre-commit.

    image

  9. Install juga lint-stagednya dengan command berikut npm i --save-dev lint-staged image

  10. Edit file pre-commit pada folder .husky seperti berikut

    image

  11. Dan lakukan edit kembali pada file package.json seperti berikut image

Evidence Hasil

image

image



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.