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 @@ + + +> 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
+
+
+
+
+
+