Lompat ke konten
dokumentasi.id
Commit a27b09d
v1
Star11 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

6

Quality Gate dan CI

Quality gate di repository ini adalah satu perintah: awesome-lint. Pemeriksaan berjalan lewat workflow GitHub Actions bernama Lint yang dipicu event pull_request untuk branch master. Workflow itu hanya punya satu job build di runner ubuntu-latest, dengan dua langkah: checkout repository lalu menjalankan npx awesome-lint .github/workflows/lint.yml:1-14. Langkah checkout memakai actions/checkout@v2 dengan fetch-depth: 0, sehingga working tree beserta riwayat git lengkap tersedia sebelum lint dijalankan .github/workflows/lint.yml:11-13.

Siklus satu pull request sampai gate lulus

Alur berikut menunjukkan bagaimana satu pull request melewati gate, termasuk jalur pengulangan ketika pemeriksaan gagal.

sequenceDiagram
  autonumber
  actor K as Kontributor
  participant GH as GitHub
  participant L as workflow Lint
  participant C as actions/checkout@v2
  participant N as npx awesome-lint
  K->>GH: buka pull request ke master
  GH->>L: jalankan event pull_request
  L->>C: checkout repository
  C-->>L: working tree + riwayat git (fetch-depth 0)
  L->>N: run npx awesome-lint
  N-->>L: exit code dan laporan temuan
  alt exit code 0
    L-->>GH: job build sukses
    GH-->>K: status check hijau
  else exit code non-zero
    L-->>GH: job build gagal
    GH-->>K: perbaiki entri README.md lalu push commit baru
    GH->>L: jalankan ulang Lint
  end
%% fig: Siklus pull request melewati workflow Lint
%% desc: Pull request memicu job build, checkout penuh, lalu npx awesome-lint; kegagalan mengulang siklus lewat commit baru.
Fig. 1: Siklus pull request melewati workflow LintPull request memicu job build, checkout penuh, lalu npx awesome-lint; kegagalan mengulang siklus lewat commit baru.

Workflow ini tidak memeriksa branch lain dan tidak berjalan pada push; satu-satunya pemicu adalah pull_request ke master .github/workflows/lint.yml:3-4. Karena tidak ada langkah instalasi eksplisit, npx menyelesaikan awesome-lint dari dependency yang sudah dideklarasikan repository.

Dua jalur pemanggilan awesome-lint

Di lokal, awesome-lint dipanggil sebagai skrip test di package.json, dan versinya dipin pada devDependencies sebagai v2.3.0 package.json:2-4, package.json:5-7. Berkas test.js memakai jalur programatik: ia mengimpor modul awesome-lint lalu memanggil awesomeLint.report() test.js:1-3. Di CI, perintah yang dieksekusi adalah npx awesome-lint, bukan npm test .github/workflows/lint.yml:14.

graph LR
  pr["pull_request ke master"] --> lint["workflow Lint"]
  lint --> co["actions/checkout@v2"]
  co --> npx["npx awesome-lint"]
  npx --> pkg["package.json devDependencies"]
  pkg --> lock["package-lock.json awesome-lint 2.3.0"]
  lock --> bin["bin awesome-lint ke cli.js"]
  bin --> hasil{"exit code"}
  hasil -->|0| lulus["gate lulus"]
  hasil -->|non-zero| gagal["gate gagal"]
  style lint fill:#f59e0b,color:#000
  style lock fill:#336791,color:#fff
  style lulus fill:#2d7d46,color:#fff
  style gagal fill:#dc2626,color:#fff
%% fig: Rantai resolusi perintah menuju gate
%% desc: Perintah npx di workflow bergantung pada manifest dan lockfile untuk mendapat bin cli.js awesome-lint versi 2.3.0, lalu exit code menentukan hasil gate.
Fig. 2: Rantai resolusi perintah menuju gatePerintah npx di workflow bergantung pada manifest dan lockfile untuk mendapat bin cli.js awesome-lint versi 2.3.0, lalu exit code menentukan hasil gate.

Isi lockfile menetapkan entri node_modules/awesome-lint pada version 2.3.0 beserta URL tarball registry, menandainya dev, dan memberi lisensi MIT package-lock.json:319-327. Entri yang sama mendeklarasikan bin bernama awesome-lint yang menunjuk cli.js dan engines.node >=20 package-lock.json:455-457. Artinya runner CI wajib menyediakan Node 20 atau lebih baru agar npx awesome-lint dapat dieksekusi.

AspekJalur lokal npm testJalur CI npx awesome-lint
Perintah yang dieksekusiawesome-lint dari scripts.test package.json:2-4npx awesome-lint .github/workflows/lint.yml:14
Sumber versidevDependencies awesome-lint v2.3.0 package.json:5-7entri lockfile versi 2.3.0 package-lock.json:319-322
Riwayat gitmengikuti clone lokalfetch-depth: 0 .github/workflows/lint.yml:11-13
Titik masukskrip npmbin awesome-lint ke cli.js package-lock.json:452-454

Pembaruan dependensi otomatis

Dependabot diatur dengan version: 2 dan satu entri updates: ekosistem npm, directory: "/", jadwal daily, dengan reviewer sekaligus assignee kristories .github/dependabot.yml:1-10. Karena directory menunjuk akar repository, pembaruan menyasar package.json dan package-lock.json yang sama dengan yang dipakai gate.

⚠️ Pembaruan Dependabot hanya menyentuh pin versi. Perubahan perilaku awesome-lint tetap harus lolos job build yang menjalankan npx awesome-lint .github/workflows/lint.yml:14.

⚠️ package-lock.json pada commit ini memuat beberapa nilai tergandakan: version dan resolved untuk awesome-lint muncul dua kali package-lock.json:319-327, engines.node tertulis ">=20"">=20" package-lock.json:455-457, dan blok devDependencies di akar juga tergandakan package-lock.json:6-10. Berkas itu masih terbaca sebagai JSON, tetapi penggandaan ini layak diperiksa ketika memperbarui dependensi.

Sisa konfigurasi

travis.yml hanya mendeklarasikan language: node_js dengan node_js: 'node'; baris git dan depth dikomentari, dan tidak ada perintah lint di dalamnya travis.yml:1-5. Tidak ada workflow lain yang merujuk berkas ini, sehingga jalur pemeriksaan yang aktif tetap workflow Lint. Aturan format yang ditegakkan gate dijelaskan di Format Entri dan Pengurutan, sedangkan langkah pengusulan entri dijelaskan di Proses Kontribusi. Job terjadwal yang menyentuh issue dan pull request yang tidak aktif dibahas di Tata Kelola dan Pemeliharaan.