diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index c48012b6d..ac1c007a4 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -121,5 +121,38 @@ export default defineConfig({ ], }, }, + id: { + label: "Bahasa Indonesia", + lang: "id-ID", + description: "Git hooks jadi mudah", + link: "/id/", + themeConfig: { + sidebar: [ + { text: "Pengantar", link: "/id" }, + { text: "Mulai", link: "/id/get-started" }, + { text: "Cara", link: "/id/how-to" }, + { text: "Memecahkan Masalah", link: "/id/troubleshoot" }, + { text: "Migrasi dari v4", link: "/id/migrate-from-v4" }, + ], + docFooter: { + prev: "Halaman sebelumnnya", + next: "Halaman selanjutnya", + }, + outline: { + label: "Di halaman ini", + }, + nav: [{ text: "Sponsor", link: "https://github.com/sponsors/typicode" }], + notFound: { + title: "HALAMAN TIDAK DITEMUKAN", + linkLabel: "pergi ke beranda", + linkText: "Bawa ke beranda" + }, + darkModeSwitchLabel: "Penampilan", + lightModeSwitchTitle: "Ganti ke tema terang", + darkModeSwitchTitle: "Ganti ke tema gelap", + returnToTopLabel: "Kembali ke atas", + langMenuLabel: "Ganti bahasa", + }, + } }, }); diff --git a/docs/id/get-started.md b/docs/id/get-started.md new file mode 100644 index 000000000..aaa618cf5 --- /dev/null +++ b/docs/id/get-started.md @@ -0,0 +1,80 @@ +# Mulai + +## Instal + +::: code-group + +```shell [npm] +npm install --save-dev husky +``` + +```shell [pnpm] +pnpm add --save-dev husky +``` + +```shell [yarn] +yarn add --dev husky +# Tambah pinst HANYA jika paket anda tidak pribadi +yarn add --dev pinst +``` + +```shell [bun] +bun add --dev husky +``` + +::: + +## `husky init` (disarankan) + +Perintah `init` dengan mudah mempersiapkan husky di dalam proyek. Membuat sebuah skrip `pre-commit` di dalam `.husky/` dan perbarui skrip `prepare` di dalam `package.json`. Modifikasi dapat dibuat nanti untuk menyesuaikan alur kerja anda. + +::: code-group + +```shell [npm] +npx husky init +``` + +```shell [pnpm] +pnpm exec husky init +``` + +```shell [yarn] +# Karena peringatan dan perbedaan spesifik dengan pengelola paket lainnya, +# lihat ke bagian "Cara". +``` + +```shell [bun] +bunx husky init +``` + +::: + + +## Cobalah + +Selamat! Anda telah berhasil persiapkan kait Git pertama anda dengan hanya satu perintah 🎉. Mari tes: + +```shell +git commit -m "Tetap tenang dan komit" +# skrip tes akan jalan setiap kali anda komit +``` + +## Beberapa kata... + +### Membuat Skrip + +Sementara sebagian besar waktu, anda hanya akan menjalankan beberapa perintah `npm run` atau `npx` dalam kait anda, anda bisa juga menuliskan menggunakan shell POSIX untuk alur kerja kostum. + +Untuk contoh, berikut cara anda bisa periksa berkas yang di-_stage_ dalam setiap komit dengan hanya dua baris kode shell dan tanpa ketergantungan: + +```shell +# .husky/pre-commit +prettier $(git diff --cached --name-only --diff-filter=ACMR | sed 's| |\\ |g') --write --ignore-unknown +git update-index --again +``` + +_Ini adalah contoh sederhana tapi bekerja, periksa [lint-staged](https://github.com/lint-staged/lint-staged) jika anda ingin lebih._ + +### Menonaktifkan kait + +Husky tidak paksa kait Git. Ini bisa dinonaktifkan secara global (`HUSKY=0`) atau ikut serta jika diinginkan. Lihat bagian [Cara](how-to) untuk persiapan manual dan informasi lainnya. diff --git a/docs/id/how-to.md b/docs/id/how-to.md new file mode 100644 index 000000000..d743f5b8d --- /dev/null +++ b/docs/id/how-to.md @@ -0,0 +1,326 @@ +# Cara + +## Menambahkan kait baru + +Menambahkan kait baru sesederhana membuat file. Ini dapat dilakukan dengan menggunakan editor favorit anda, sebuah skrip atau sebuah perintah echo dasar. Sebagai contoh, di Linux/macOS: +```shell +echo "npm test" > .husky/pre-commit +``` + +## Berkas persiapan + +Husky mengizinkan anda untuk mengeksekusi perintah lokal sebelum menjalankan kait. Ini membaca perintah dari berkas berikut: + +- `$XDG_CONFIG_HOME/husky/init.sh` +- `~/.config/husky/init.sh` +- `~/.huskyrc` (usang) + +Di Windows: `C:\Users\yourusername\.config\husky\init.sh` + +## Melewati kait Git + +### Untuk perintah tunggal + +Banyak perintah Git memasukkan opsi `-n/--no-verify` untuk lewati kait: + +```sh +git commit -m "..." -n # Lewati kait Git +``` + +Untuk perintah tanpa bendera ini, nonaktifkan kait sementara dengan HUSKY=0: + +```shell +HUSKY=0 git ... # Menonaktifkan semua kait Git sementara +git ... # Kait akan berjalan lagi +``` + +### Untuk beberapa perintah + +Untuk nonaktifkan kait untuk periode yang diperpanjang (mis., selama rebase/gabung): + +```shell +export HUSKY=0 # Nonaktifkan semua kait Git +git ... +git ... +unset HUSKY # Mengaktifkan kembali kait +``` + +### Untuk GUI atau secara global + +Untuk nonaktifkan kait Git di dalam GUI klien atau secara global, modifikasi konfigurasi husky: + +```sh +# ~/.config/husky/init.sh +export HUSKY=0 # Husky tidak akan instal dan tidak akan jalankan kait di mesin anda +``` + +## Server CI dan Docker + +Untuk hindari menginstal kait Git di server CI atau di dalam Docker, gunakan `HUSKY=0`. Misalnya, dalam GitHub Actions: + +```yml +# https://docs.github.com/en/actions/learn-github-actions/variables +env: + HUSKY: 0 +``` + +Jika menginstal hanya `dependencies` (bukan `devDependencies`), skrip `"prepare": "husky"` mungkin gagal karena Husky tidak terinstal. + +Anda memiliki beberapa solusi. + +Modifikasi skrip `prepare` untuk tidak pernah gagal: + +```json +// package.json +"prepare": "husky || true" +``` + +Anda akan tetap mendapatkan pesan error `command not found` di keluaran anda yang mungkin membingungkan. Untuk membuatnya diam, buat `.husky/install.mjs`: + + +```js +// Lewati instal Husky dalam production dan CI +if (process.env.NODE_ENV === 'production' || process.env.CI === 'true') { + process.exit(0) +} +const husky = (await import('husky')).default +console.log(husky()) +``` + +Kemudian, gunakan ini dalam `prepare`: + +```json +"prepare": "node .husky/install.mjs" +``` + +## Mengetes kait tanpa menkomit + +Untuk test kait, tambahkan `exit 1` ke skrip kait untuk membatalkan perintah Git: + +```shell +# .husky/pre-commit + +# Skrip WIP anda +# ... + +exit 1 +``` + +```shell +git commit -m "mengetes kode pra-komit" +# Komit tidak akan dibuat +``` + +## Proyek Tidak dalam Direktori Akar Git + +Husky tidak menginstal di dalam direktori induk (`../`) untuk alasan keamanan. Namun, anda bisa mengganti direktori di dalam skrip `prepare`. + +Pertimbangkan struktur proyek ini: + +``` +. +├── .git/ +├── backend/ # Tidak ada package.json +└── frontend/ # Package.json dengan husky +``` + +Atur skrip `prepare` anda seperti ini: + +```json +"prepare": "cd .. && husky frontend/.husky" +``` + +Dalam skrip kait anda, ganti direktori kembali subdirektori yang relavan: + +```shell +# frontend/.husky/pre-commit +cd frontend +npm test +``` + +## Kait Non-shell + +Untuk menjalankan skrip yang membutuhkan penggunaan bahasa skrip, gunakan pola berikut untuk setiap kait yang berlaku: + +(Contoh menggunakan kait `pre-commit` dan NodeJS) +1. Buat sebuah titik masuk untuk kait: + ```shell + .husky/pre-commit + ``` +2. Di dalam berkas tambah berikut + ```shell + node .husky/pre-commit.js + ``` +3. Dalam `.husky/pre-commit.js` + ```javascript + // Kode NodeJS anda + // ... + ``` + +## Bash + +Skrip kait harus sesuai dengan POSIX untuk memastikan kompabilitas terbaik karena tidak semua orang punya `bash` (mis. pengguna Windows). + +Yang telah dibilang, jika tim anda tidak menggunakan Windows, anda bisa gunakan Bash dengan cara ini: + +```shell +# .husky/pre-commit + +bash << EOF +# Letak skrip bash anda di dalam +# ... +EOF +``` + +## Pengelola Versi Node and GUI + +Jika anda menggunakan kait Git di dalam GUI dengan Node yang terinstal lewat pengelola versi (seperti `nvm`, `n`, `fnm`, `asdf`, `volta`, dll...), anda mungkin berhadapan dengan kesalahan `command not found` karena masalah variabel lingkungan `PATH`. + +### Memahami `PATH` dan pengelola versi + +`PATH` adalah sebuah variabel lingkungan berisi daftar direktori. Shell anda mencari direktori ini untuk perintah. Jika ini tidak menemukan perintah, anda mendapatkan pesan `command not found`. + +Jalankan `echo $PATH` di dalam shell untuk melihat isinya. + +Pengelola versi bekerja dengan: +1. Menambahkan kode inisiasi ke berkas persiapan shell anda (`.zshrc`, `.bashrc`, dll.), yang berjalan setiap waktu anda membuka terminal. +2. Mengunduh versi Node di dalam direktori di folder beranda anda. + +Sebagai contoh, jika anda memiliki dua versi Node: + +```shell +~/version-manager/Node-X/node +~/version-manager/Node-Y/node +``` + +Membuka terminal menginisiasi pengelola paket, yang memilih versi (katakanlah `Node-Y`) dan menambahkan jalurnya ke `PATH`: + +```shell +echo $PATH +# Keluaran +~/version-manager/Node-Y/:... +``` + +Sekarang, Node melihat `Node-Y`. Mengganti ke `Node-X` mengganti `PATH` sesuai dengan itu: + +```shell +echo $PATH +# Keluaran +~/version-manager/Node-X/:... +``` + +Masalah muncul karena GUI, meluncurkannya di luar terminal, tidak menginisiasi pengelola versi, meninggalkan `PATH` tanpa jalur instalisasi Node. Oleh karena itu, Kait Git dari GUI sering gagal. + +### Solusi + +Husky mensumberkan `~/.config/husky/init.sh` sebelum setiap kait Git. Salin kode inisiasi pengelola versi anda ke sini untuk pastikan ini berjalan di GUI. + +Contoh dengan `nvm`: + +```shell +# ~/.config/husky/init.sh +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # Ini memuat nvm +``` + +Sebagai alternatif, jika berkas persiapan shell anda cepat dan ringan, sumberkan secara langsung: + +```shell +# ~/.config/husky/init.sh +. ~/.zshrc +``` + +## Persiapan manual + +Git butuh dikonfigurasi dan husky butuh untuk persiapan berkas di dalam `.husky/`. + +Jalankan perintah `husky` sekali di dalam repositori anda. Idealnya, Sertakan ini dalam skrip `prepare` dalam `package.json` untuk eksekusi otomatis setelah setiap instal (direkomendasi). + +::: code-group + +```json [npm] +{ + "scripts": { + "prepare": "husky" // [!code hl] + } +} +``` + +```json [pnpm] +{ + "scripts": { + "prepare": "husky" // [!code hl] + } +} +``` + +```json [yarn] +{ + "scripts": { + // Yarn tidak mendukung skrip prepare + "postinstall": "husky", + // Sertakan ini jika mempublikasikanya ke npmjs.com + "prepack": "pinst --disable", + "postpack": "pinst --enable" + } +} +``` + +```json [bun] +{ + "scripts": { + "prepare": "husky" // [!code hl] + } +} +``` + +::: + +Jalankan `prepare` sekali: + +::: code-group + +```sh [npm] +npm run prepare +``` + +```sh [pnpm] +pnpm run prepare +``` + +```sh [yarn] +# Yarn tidak mendukung `prepare` +yarn run postinstall +``` + +```sh [bun] +bun run prepare +``` + +::: + +Buat sebuah berkas `pre-commit` di dalam direktori `.husky/`: + +::: code-group + +```shell [npm] +# .husky/pre-commit +npm test +``` + +```shell [pnpm] +# .husky/pre-commit +pnpm test +``` + +```shell [yarn] +# .husky/pre-commit +yarn test +``` + +```sh [bun] +# .husky/pre-commit +bun test +``` + +::: diff --git a/docs/id/index.md b/docs/id/index.md new file mode 100644 index 000000000..628e64214 --- /dev/null +++ b/docs/id/index.md @@ -0,0 +1,82 @@ +![npm](https://img.shields.io/npm/dm/husky) + +> Kait git _native_ modern ultra-cepat + +Husky meningkatkan komit anda dan lainnya 🐶 _woof!_ + +Secara otomatis **periksa pesan komit anda**, **kode**, dan **menjalankan tes** ketika menkomit atau mendorong. + +Mulai [disini](/get-started.md). + +## Fitur-fitur + +- Hanya 2 kB` (📦 _di-gzip_) tanpa ketergantungan +- Tercepat karena ringan (jalan dalam `~1ms`) +- Menggunakan fitur baru Git (`core.hooksPath`) +- Mendukung: + - macOS, Linux, Windows + - GUI Git, Pengelola Versi Node (_NVM_), direktori kait kostum, proyek bersarang, monorepo + - [Semua 13 kait Git sisi klien](https://git-scm.com/docs/githooks) + +Dan lainnya: + +- Kait cabang spesifik +- Gunakan POSIX shell untuk skrip kasus lanjutan +- Mematuhi organisasi kait _native_ Git +- Selaras dengan latihan terbaik [npm](https://docs.npmjs.com/cli/v10/using-npm/scripts#best-practices) menggunakan skrip `prepare` +- Opsi opt-in/opt-out +- Bisa dinonaktifkan secara global +- Pesan kesalahan ramah pengguna + +## Sponsor + +Dukung proyek ini dengan menjadi sponsor [disini](https://github.com/sponsors/typicode) 💖 + +### Sponsor Spesial + +

+ +
+ Dapatkan hadiah untuk kontribusi sumber terbuka anda +
+

+ +### GitHub + +

+ + + +

+ +### Open Collective + + + + + + + +[![image](https://github.com/user-attachments/assets/b9c5a918-70fc-4615-ae7d-e7e5bc3c66e8)](https://www.sanity.io/) + +## Digunakan oleh + +Husky digunakan dalam [**lebih dari 1.5M proyek**](https://github.com/typicode/husky/network/dependents?package_id=UGFja2FnZS0xODQzNTgwNg%3D%3D) di GitHub, termasuk: + +- [vercel/next.js](https://github.com/vercel/next.js) +- [vercel/hyper](https://github.com/vercel/hyper) +- [webpack/webpack](https://github.com/webpack/webpack) +- [angular/angular](https://github.com/angular/angular) +- [facebook/docusaurus](https://github.com/facebook/docusaurus) +- [microsoft/vscode](https://github.com/microsoft/vscode) +- [11ty/eleventy](https://github.com/11ty/eleventy) +- [stylelint/stylelint](https://github.com/stylelint/stylelint) +- [colinhacks/zod](https://github.com/colinhacks/zod) +- [rollup/rollup](https://github.com/rollup/rollup) +- [tinyhttp/tinyhttp](https://github.com/tinyhttp/tinyhttp) +- ... + +## Artikel + +- [Kenapa husky telah menghapus konfigurasi JS konvensional](https://blog.typicode.com/posts/husky-git-hooks-javascript-config/) +- [Kenapa husky tidak instal otomatis lagi](https://blog.typicode.com/posts/husky-git-hooks-autoinstall/) diff --git a/docs/id/migrate-from-v4.md b/docs/id/migrate-from-v4.md new file mode 100644 index 000000000..b6e3e5590 --- /dev/null +++ b/docs/id/migrate-from-v4.md @@ -0,0 +1,65 @@ +# Migrasi dari v4 + +Jika anda memanggil skrip `package.json` menggunakan `npm` atau `yarn`, **anda dapat dengan mudah salin perintah anda** dari berkas konfigurasi anda ke kait yang sesuai: + +Husky v4 + +```json +// package.json +{ + "hooks": { + "pre-commit": "npm test && npm run foo" // [!code hl] + } +} +``` + +Husky v9 + +```shell +# .husky/pre-commit +# Perhatikan bahwa anda sekarang dapat memiliki perintah pada beberapa baris +npm test // [!code hl] +npm run foo // [!code hl] +``` + +Jika anda memanggil biner yang terinstal secara lokal, **anda perlu menjalankannya lewat pengelola paket anda sekarang**: + +::: code-group + +```js [.huskyrc.json (v4)] +{ + "hooks": { + "pre-commit": "jest" + } +} +``` + +```shell [.husky/pre-commit (v9)] +jest +``` + +::: + +Variabel lingkungan `HUSKY_GIT_PARAMS` diganti sekarang oleh parameter asli `$1`, `$2`, dll. + +::: code-group + +```js [.huskyrc.json (v4)] +{ + "hooks": { + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } +} +``` + +```shell [.husky/commit-msg (v9)] +commitlint --edit $1 +``` + +::: + +Perubahan variabel lingkungan lainnya: + +- `HUSKY_SKIP_HOOKS` diganti `HUSKY`. +- `HUSKY_SKIP_INSTALL` diganti `HUSKY`. +- `HUSKY_GIT_PARAMS` dihapus. Sebagai gantinya parameter Git harus digunakan secara langsung di dalam skrip (mis. `$1`). \ No newline at end of file diff --git a/docs/id/troubleshoot.md b/docs/id/troubleshoot.md new file mode 100644 index 000000000..e9ad25276 --- /dev/null +++ b/docs/id/troubleshoot.md @@ -0,0 +1,41 @@ +# Pemecahan Masalah + +## Perintah tidak ditemukan + +Lihat [Cara](how-to) untuk solusi. + +## Kait tidak berjalan + +1. Verifikasi nama berkasnya valid. Untuk contoh, `precommit` atau `pre-commit.sh` adalah nama yang tidak valid. Lihat ke [dokumentasi](https://git-scm.com/docs/githooks) kait Git untuk nama-nama yang valid. +2. Jalankan `git config core.hooksPath` dan pastikan mengarah ke `.husky/_` (atau direktori kait kostum anda). +1. Konfirmasi versi Git anda di atas `2.9`. + +## `.git/hooks/` Tidak bekerja setelah uninstal + +Jika kait di dalam `.git/hooks/` tidak bekerja pasca meng-uninstal `husky`, eksekusi `git config --unset core.hooksPath`. + +## Yarn di Windows + +Kait Git mungkin gagal dengan Yarn di Windows menggunakan Bash Git (`stdin is not a tty`). Untuk pengguna Windows, terapkan solusi ini: + +1. Buat `.husky/common.sh`: + +```shell +command_exists () { + command -v "$1" >/dev/null 2>&1 +} + +# Solusi untuk Windows 10, Bash Git, dan Yarn +if command_exists winpty && test -t 1; then + exec < /dev/tty +fi +``` + +2. Sumberkan dimana perintah Yarn dijalankan: + +```shell +# .husky/pre-commit +. .husky/common.sh + +yarn ... +```