PPL 2020 — DocumentBuilder: Git di Tim Kami

Firman Hadi
pepeel
Published in
3 min readFeb 24, 2020

Git, yang dibuat oleh Linus Torvalds pada 2005 karena ketidakpuasannya atas version control system yang digunakan untuk mengembangkan Linux Kernel, merupakan salah satu version control system yang cukup terkenal di kalangan para developer. Kebetulan, tim kami menggunakan Git dalam pengembangan DocumentBuilder karena tim kami sudah cukup familiar dengan Git.

Untuk Panduan cara menggunakan Git, sudah banyak artikel yang membahas ini secara lengkap (atau bahkan dari website resminya). Anda bisa mencari panduannya sendiri. Artikel ini akan menjelaskan secara spesifik bagaimana kami menggunakan Git dalam pengembangan DocumentBuilder.

Git Hooks dan Husky

Git Hooks merupakan suatu fitur dari Git untuk menjalankan suatu prosedur tambahan sebelum atau sesudah kita menjalankan suatu perintah dalam Git. Sebagai contoh, kita dapat membuat pengecekan tambahan pada kode yang ada dalam staged area sebelum kita melakukan commit, apabila gagal, maka commit akan digagalkan. Penjelasan lebih lanjut tentang hooks apa saja yang ada dalam Git bisa dibaca pada artikel berikut.

Terdapat aplikasi yang mempermudah kita dalam melakukan pemasangan hook yaitu Husky (untuk NodeJS). Apabila di-install, maka Husky akan melakukan override terhadap seluruh hook, dan akan menjalankan apa yang kita perintahkan ke Husky melalui konfigurasi di package.json.

Contoh: Fix Lint Otomatis Sebelum Commit

Pada tim kami, kami melakukan enforcement terhadap codestyle menggunakan ESLint. 1 kesalahan dalam lint akan dipastikan membuat pipeline deployment gagal. Untungnya, ESLint sendiri bisa membantu menyelesaikan beberapa kesalahan secara otomatis dengan parameter --fix. Bagaimana cara kita melakukan fix lint sebelum commit? Jawabannya adalah Git Hooks!

Hook yang cocok untuk prosedur ini pastilah pre-commit karena hook tersebut dijalankan tepat sebelum dilakukan commit. Untuk ini, kita perlu menambahkan aplikasi tambahan yaitu lint-staged yang berguna untuk melakukan suatu perintah terhadap file yang berada dalam staged area (jangan tertipu dari namanya, aplikasi ini tidak hanya untuk lint saja).

Project kami menggunakan konfigurasi berikut untuk lint-staged dan Husky.

...
"lint-staged": {
"src/**/*.{js,jsx}": [
"eslint --fix",
"git add"
]
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
}

Penjelasan: Sebelum commit, Husky akan menjalankan perintah lint-staged dan lint-staged akan mencari staged file dengan filter src/**/*.{js,jsx} (kode kami berada di dalam folder src ) lalu akan menjalankan eslint --fix {kode yang masuk} , apabila berhasil, maka kode tersebut akan dimasukkan lagi ke staged area dengan git add {kode yang masuk} . Apabila lint gagal, maka commit akan digagalkan.

Contoh commit yang gagal karena eslint gagal memperbaiki kode.
Contoh commit yang berhasil melewati eslint.

Dengan ini, maka bisa dipastikan bahwa perubahan pada commit tersebut akan mengikuti codestyle kami.

Git Workflow

Git workflow (atau git flow) yang kami gunakan mengikuti git flow yang ada pada panduan PPL 2020. Secara singkat, branch master akan menyimpan kode yang berjalan pada production, branch staging akan menyimpan kode yang berjalan pada staging, dan setiap backlog akan diwakili dengan branch dengan format pbi-{nomor_pbi}-{nama_pbi} . Kami memproteksi branch master dan staging agar tidak ada yang bisa melakukan push secara langsung (harus melakukan merge request terlebih dahulu).

Suatu merge request harus disetujui oleh setidaknya 2 dari tim kami untuk bisa merge ke staging. Hal ini tentu saja akan mempertahankan standar dari kode kami yang masuk ke dalam production maupun staging.

Untuk mengikuti filosofi TDD, kami juga melakukan commit untuk setiap fase red, green, dan refactor. Untuk menandakan fase tersebut, kami menyisipkan awalan [RED]/[GREEN]/[REFACTOR] untuk setiap commit-nya. Untuk commit yang tidak berkaitan dengan pengembangan fitur, maka akan ditambahkan awalan [CHORES] .

GitLab

Kami menggunakan GitLab untuk repository management kode kami. GitLab merupakan platform DevOps yang dilengkapi dengan berbagai macam tool, salah satunya adalah git repository management. Untuk lebih lengkapnya tentang apa itu GitLab, Anda dapat melihat artikel ini.

Sekian penjelasan saya dalam penggunaan Git di tim kami. Jangan lupa untuk melihat artikel oleh anggota tim yang lain.

--

--