Menggunakan automate commit conventional linter di angular

Afif Alfiano

Afif Alfiano

Posted on Sunday, August 29, 2021 (3 min read)

Menggunakan automate commit conventional linter di angular

Pernahkan teman-teman mendengar istilah commit conventional? Jika belum mari kita pelajari bersama - sama apa itu commit convetinoal dan bagaimana mengautomate commit menggunakan husky untuk automate commit linter, baik untuk javascript, typescript, css ataupun scss.

Menggunakan pre-commit manfaatnya sangatlah banyak. Kita dapat menerapkan sebuah aksi sebelum sebuah message commit disetujui. Contoh kasusnya seperti ini, kita ingin code kita menjadi lebih readable atau rapi baik dari typescript, html ataupun scssnya. Nah pada kondisi ini kita dapat menerapkan pre-commit dimana sebelum message commit disetujui maka akan menjalankan linter untuk typescript dan scss/css.

Beberapa dependensi yang diperlukan untuk menjalankan fitur ini dan pastikan menggunakan —save-dev karena kita hanya memerlukan untuk development.

Install

Pastikan semua dependensi sudah terinstall di project yang dikerjakan.

Kemudian jalankan perintah husky install dan dan kita buat sebuah bash untuk husky bisa menjalankan perintah yang kita definisikan di package.json

Husky Init

Maka akan tampil folder dan file baru seperti berikut ini

Folder

Kemudian tambahkan script berikut ini pada package.json

"pre-commit": "lint-staged"

Setelah itu kita definisikan lint-staged dibawah sendiri pada package.json untuk aksi apa saja yang dapat dijalankan sebelum message commit disetujui.

"lint-staged": {
    "*.ts": [
      "npx tslint src/**/*.ts --fix"
    ],
    "*.scss": [
      "npx stylelint src/**/*.scss --fix"
    ]
  }

Kemudian buat file baru yaitu commitlint.config.js untuk mengkonfigurasi commit conventional apa saja yang disetujui, isikan script berikut ini pada file tersebut

const types = [
    'build',
	'ci',
	'docs',
	"chore",
	'feat',
	'fix',
	'perf',
	'refactor',
	'revert',
	'style',
	'test',
    'ui',
    'deps'
];
module.exports = {
    extends: ['@commitlint/config-angular'],
    rules: {
        'type-enum': [2, 'always', types],
		'header-max-length': [2, 'always', 100],
    }
};

Pada konfigurasi diatas sebenarnya kita hanya meng-override konfigurasi bawaan commitlint dengan menambahkan types dan header-max-length, jadi nanti kita bisa memodifikasi konfig tersebut.

Setelah itu kita buat file .stylelintrc untuk mengkonfigurasi linter pada file scss ataupun css. Tambahkan script berikut ini pada file tersebut.

{
	"extends": "stylelint-config-standard",
	"plugins": [
		"stylelint-scss"
	],
	"rules": {
		"declaration-block-trailing-semicolon": null,
		"no-descending-specificity": null,
		"no-empty-source": null,
		"selector-type-no-unknown": null,
		"selector-pseudo-element-no-unknown": null
	}
}

###Berikut ini demonya.

Misalnya terdapat file typescript dan scss yang berubah.

Edit File

Kemudian kita coba git add dan git commit untuk mencoba fitur dari commitlint

a. Kondisi ketika salah commit atau tidak sesuai aturan dengan commit (aturan penamaan commit sesuai yang telah di definisikan di commitlint.config.js, berdasarkan aturan dari https://www.conventionalcommits.org/en/v1.0.0/#specification)

Error

a. Kondisi ketika commit panjang dan header tidak sesuai dengan aturan conventional commit

Commit

Maka hasilnya seperti gambar berikut ini

Still Error

Kemudian berikut ini kondisi ketika benar melakukan commit baik commit cepat ataupun panjang dengan deskripsi

a. Commit singkat

Success

b. Commit dengan deskripsi

Install

Maka hasilnya seperti gambar berikut ini

Fix

Referensi

🔥AA

© 2024 Afif Alfiano

Instagram GitHub