Lompat ke konten
dokumentasi.id
Commit a27b09d
v2
Star11 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

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-7). Lockfile mengunci versi itu sebagai 2.3.0 dengan penanda dev dan lisensi MIT (package-lock.json:319-327). Selain script, ada test.js yang me-require modul awesome-lint lalu memanggil awesomeLint.report() (test.js:1-3).

Titik masukYang dijalankanRujukan
npm testscript test menjalankan biner awesome-lintpackage.json:1-7
npx awesome-lintbiner yang sama, dipanggil langsung oleh workflow Lint.github/workflows/lint.yml:1-14
test.jsrequire('awesome-lint') lalu awesomeLint.report()test.js:1-3

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-14).

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.
Fig. 1: Siklus pull request di workflow LintPull 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-5).

⚠️ Lint tidak terpicu oleh push, dan langkahnya memanggil npx awesome-lint alih-alih npm test. Artinya commit yang langsung masuk ke master tidak melewati lint, dan test.js tidak 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-21).

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.
Fig. 2: Siklus label stale pada issue dan pull requestactions/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 rebase mengembalikan 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-10).

⚠️ Update harian itu menaikkan awesome-lint tanpa 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-10, package-lock.json:319-327). 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-5). 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

BerkasPemicuAksi utamaRujukan
package.jsonmanualnpm test menjalankan awesome-lintpackage.json:1-7
test.jsmanualawesomeLint.report()test.js:1-3
.github/workflows/lint.ymlpull_request ke masternpx awesome-lint setelah checkout penuh.github/workflows/lint.yml:1-14
.github/workflows/stale.ymlcron harian 23:59label stale lalu tutup.github/workflows/stale.yml:1-21
.github/dependabot.ymljadwal dailyupdate npm untuk kristories.github/dependabot.yml:1-10
travis.ymltidak adahanya deklarasi language dan node_jstravis.yml:1-5

Letak semua berkas ini di dalam repository, termasuk direktori .github/workflows/, diuraikan di Struktur Repository.