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-141. 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-132.
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.Workflow ini tidak memeriksa branch lain dan tidak berjalan pada push; satu-satunya pemicu adalah pull_request ke master .github/workflows/lint.yml:3-43. 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-44, package.json:5-75. Berkas test.js memakai jalur programatik: ia mengimpor modul awesome-lint lalu memanggil awesomeLint.report() test.js:1-36. Di CI, perintah yang dieksekusi adalah npx awesome-lint, bukan npm test .github/workflows/lint.yml:147.
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.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-3278. Entri yang sama mendeklarasikan bin bernama awesome-lint yang menunjuk cli.js dan engines.node >=20 package-lock.json:455-4579. Artinya runner CI wajib menyediakan Node 20 atau lebih baru agar npx awesome-lint dapat dieksekusi.
| Aspek | Jalur lokal npm test | Jalur CI npx awesome-lint |
|---|---|---|
| Perintah yang dieksekusi | awesome-lint dari scripts.test package.json:2-44 | npx awesome-lint .github/workflows/lint.yml:147 |
| Sumber versi | devDependencies awesome-lint v2.3.0 package.json:5-75 | entri lockfile versi 2.3.0 package-lock.json:319-32210 |
| Riwayat git | mengikuti clone lokal | fetch-depth: 0 .github/workflows/lint.yml:11-132 |
| Titik masuk | skrip npm | bin awesome-lint ke cli.js package-lock.json:452-45411 |
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-1012. 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-linttetap harus lolos jobbuildyang menjalankannpx awesome-lint.github/workflows/lint.yml:147.
⚠️
package-lock.jsonpada commit ini memuat beberapa nilai tergandakan:versiondanresolveduntukawesome-lintmuncul dua kali package-lock.json:319-3278,engines.nodetertulis">=20"">=20"package-lock.json:455-4579, dan blokdevDependenciesdi akar juga tergandakan package-lock.json:6-1013. 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-514. 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.