8
Pipeline Lint dan CI
Dua berkas kecil di akar repository mengatur mutu awesome-guidelines: package.json yang menyediakan npm test berbasis awesome-lint, dan dua workflow GitHub Actions di .github/workflows/. Halaman ini menelusuri apa yang dijalankan masing-masing berkas, kapan ia terpicu, dan di mana jebakannya. Aturan entri yang menjadi sasaran lint dijelaskan di Panduan Kontribusi dan Kode Etik, sedangkan linter lain yang tercantum di daftar ada di Tools dan Linter.
Tiga titik masuk ke awesome-lint
package.json hanya berisi satu script, yaitu test, yang menjalankan biner awesome-lint, dengan satu devDependency bernama sama pada versi v2.3.0 (package.json:1-71). Lockfile mengunci versi itu sebagai 2.3.0 dengan penanda dev dan lisensi MIT (package-lock.json:319-3272). Selain script, ada test.js yang me-require modul awesome-lint lalu memanggil awesomeLint.report() (test.js:1-33).
| Titik masuk | Yang dijalankan | Rujukan |
|---|---|---|
npm test | script test menjalankan biner awesome-lint | package.json:1-71 |
npx awesome-lint | biner yang sama, dipanggil langsung oleh workflow Lint | .github/workflows/lint.yml:1-144 |
test.js | require('awesome-lint') lalu awesomeLint.report() | test.js:1-33 |
Ketiganya bermuara pada pemeriksaan yang sama; yang berbeda hanya pemicunya, yaitu script npm, langkah workflow, atau berkas Node yang dijalankan manual.
Workflow Lint
Workflow ini bernama Lint dan hanya terpicu oleh pull_request ke branch master. Satu job build berjalan di ubuntu-latest dengan dua langkah: actions/checkout@v2 yang meminta fetch-depth: 0, lalu npx awesome-lint (.github/workflows/lint.yml:1-144).
sequenceDiagram
autonumber
actor K as Kontributor
participant PR as "pull_request ke master"
participant Job as "job build di ubuntu-latest"
participant CO as actions/checkout@v2
participant L as npx awesome-lint
K->>PR: buka atau perbarui pull request
PR->>Job: picu workflow Lint
Job->>CO: langkah 1
CO->>CO: fetch-depth 0
CO->>L: langkah 2, biner dijalankan
alt tidak ada pelanggaran
L-->>Job: keluar tanpa error
Job-->>PR: status hijau
PR->>K: pull request siap di-merge
else ada pelanggaran
L-->>Job: keluar dengan error
Job-->>PR: status merah
PR->>K: perbaiki entri, lalu push commit baru
end
%% fig: Siklus pull request di workflow Lint
%% desc: Pull request ke master memicu job build, checkout penuh dengan fetch-depth 0, lalu npx awesome-lint menentukan status hijau atau merah.fetch-depth: 0 membuat checkout mengambil seluruh riwayat git. Bandingkan dengan travis.yml lama yang baris git.depth-nya justru dikomentari (travis.yml:1-55).
⚠️
Linttidak terpicu olehpush, dan langkahnya memanggilnpx awesome-lintalih-alihnpm test. Artinya commit yang langsung masuk kemastertidak melewati lint, dantest.jstidak pernah dieksekusi di CI.
Workflow Mark stale issues and pull requests
Workflow kedua tidak menyentuh kode. Ia berjalan menurut jadwal cron: "59 23 * * *" dan memakai actions/stale@v1 dengan days-before-stale: 20 serta days-before-close: 1. Token diambil dari secrets.GITHUB_TOKEN, dan label yang dipasang adalah no-issue-activity untuk issue serta no-pr-activity untuk pull request (.github/workflows/stale.yml:1-216).
stateDiagram-v2
[*] --> Aktif
Aktif --> Stale: 20 hari tanpa aktivitas
Stale --> Aktif: komentar atau update
Stale --> Ditutup: 1 hari setelah label stale
Ditutup --> [*]
style Aktif fill:#2d7d46,color:#fff
style Stale fill:#f59e0b,color:#000
style Ditutup fill:#dc2626,color:#fff
%% fig: Siklus label stale pada issue dan pull request
%% desc: actions/stale memasang label setelah 20 hari tanpa aktivitas, lalu menutup objek satu hari kemudian bila tidak ada pembaruan.⚠️ Dua angka itu bekerja berurutan: pull request tanpa aktivitas bisa tertutup sekitar 21 hari setelah commit terakhir, bukan 20 hari. Komentar atau
rebasemengembalikan statusnya ke aktif.
Dependabot
.github/dependabot.yml memakai version: 2 dengan satu entri npm pada directory: "/". Jadwalnya daily, dan setiap update otomatis meminta review serta menugaskan kristories (.github/dependabot.yml:1-107).
⚠️ Update harian itu menaikkan
awesome-linttanpa perubahan entri apa pun di daftar. Ketika aturan lint berubah, pull request Dependabot bisa berubah merah walau isi daftar tidak disentuh.
Ada satu hal lagi yang perlu diperiksa sebelum menambah langkah CI baru: blok devDependencies pada lockfile memuat pasangan kunci yang menempel tanpa koma, dan entri node_modules/awesome-lint mengulang version serta resolved (package-lock.json:6-108, package-lock.json:319-3272). Tambahkan npm ci ke pipeline hanya setelah lockfile dirapikan.
travis.yml yang tersisa
travis.yml masih berada di akar repository dengan isi tiga baris aktif: language: node_js, node_js: ['node'], dan komentar # git: serta # depth: false (travis.yml:1-55). Berkas ini tidak dideklarasikan oleh workflow mana pun di .github/workflows/, sehingga jalur CI yang benar-benar berjalan hanyalah Lint dan Mark stale issues and pull requests.
Ringkasan berkas pipeline
| Berkas | Pemicu | Aksi utama | Rujukan |
|---|---|---|---|
package.json | manual | npm test menjalankan awesome-lint | package.json:1-71 |
test.js | manual | awesomeLint.report() | test.js:1-33 |
.github/workflows/lint.yml | pull_request ke master | npx awesome-lint setelah checkout penuh | .github/workflows/lint.yml:1-144 |
.github/workflows/stale.yml | cron harian 23:59 | label stale lalu tutup | .github/workflows/stale.yml:1-216 |
.github/dependabot.yml | jadwal daily | update npm untuk kristories | .github/dependabot.yml:1-107 |
travis.yml | tidak ada | hanya deklarasi language dan node_js | travis.yml:1-55 |
Letak semua berkas ini di dalam repository, termasuk direktori .github/workflows/, diuraikan di Struktur Repository.