ข้ามไปยังเนื้อหาหลัก

Run Linter (ตรวจคุณภาพและสไตล์โค้ด)

รันคำสั่ง lint เช่น ESLint, ruff, golangci-lint หรือ rubocop บนซอร์สโค้ด

การอ้างอิง (Reference): loha/run-lint@v1

หมวดหมู่: Test & Lint (การทดสอบและตรวจโค้ด)

รันไทม์ (Runtime): docker.io/library/node:20-alpine (รันแบบ non-root, ตรึงเวอร์ชันด้วย digest ที่ Node 20)

สัญญาอนุญาต (License): Apache-2.0

ควรใช้เมื่อ​

ใช้บังคับใช้มาตรฐานการเขียนโค้ด (code style) และตรวจจับข้อผิดพลาดเบื้องต้นก่อนนำไป build หรือ deploy กำหนดคำสั่งและคอนเทนเนอร์อิมเมจให้ตรงกับภาษาและเครื่องมือของโปรเจกต์

พารามิเตอร์​

พารามิเตอร์ชนิดค่าเริ่มต้นจำเป็นคำอธิบาย
LINT_COMMANDstringnpx eslint . --format compactไม่คำสั่ง lint ที่ต้องการรัน เช่น pnpm lint หรือ ruff check .
WORKING_DIRECTORYstring.ไม่ไดเรกทอรีทำงานของ task โดยคิดเทียบจาก root ของ workspace
LINT_IMAGEstringdocker.io/library/node@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293ไม่คอนเทนเนอร์อิมเมจที่ติดตั้งเครื่องมือ lint พร้อมใช้งาน
FAIL_ON_ERRORenum: true, falsetrueไม่กำหนดให้ task ล้มเหลวเมื่อคำสั่งพบข้อผิดพลาด; หากตั้งเป็น false จะเป็นโหมดรายงานผลอย่างเดียว

พื้นที่ทำงาน (Workspaces)​

  • source (จำเป็น): เชื่อมโยงจาก pipeline workspace source

ผลลัพธ์ (Results)​

ผลลัพธ์ (Result)คำอธิบาย
LINT_RESULTผลลัพธ์การตรวจโค้ด: PASS (ผ่าน) หรือ FAIL (พบข้อผิดพลาด)
ERROR_COUNTจำนวนข้อผิดพลาด (errors) ทั้งหมดที่ตรวจพบ

การทำงาน​

สั่งรันคำสั่ง LINT_COMMAND ภายในคอนเทนเนอร์ LINT_IMAGE ณ ตำแหน่ง WORKING_DIRECTORY โดยค่า exit code จะถูกแปลงเป็นผลลัพธ์ LINT_RESULT (PASS หรือ FAIL) พร้อมทั้งพยายามนับจำนวนข้อผิดพลาดใน ERROR_COUNT จากรูปแบบผลลัพธ์ของ linter ยอดนิยม เช่น ESLint หรือ ruff

ตัวอย่าง​

ตรวจโค้ด Node.js / TypeScript ด้วย pnpm​

steps:
- name: lint
uses: loha/run-lint@v1
with:
LINT_COMMAND: 'pnpm lint'
WORKING_DIRECTORY: 'apps/dashboard'

ตรวจโค้ด Python ด้วย ruff​

steps:
- name: lint
uses: loha/run-lint@v1
with:
LINT_COMMAND: 'ruff check . --output-format concise'
LINT_IMAGE: 'python:3.12-slim'

ตรวจโค้ด Go ด้วย golangci-lint​

steps:
- name: lint
uses: loha/run-lint@v1
with:
LINT_COMMAND: 'golangci-lint run ./...'
LINT_IMAGE: 'golangci/golangci-lint:v1.62-alpine'

การแก้ปัญหา​

ปัญหา: ระบบแจ้งว่าไม่พบคำสั่ง lint ภายในสภาพแวดล้อม

วิธีแก้: ตรวจสอบว่าได้ติดตั้งเครื่องมือ lint เป็น dev dependency ของโปรเจกต์แล้ว หรือเปลี่ยนไปใช้ LINT_IMAGE ที่ติดตั้งเครื่องมือดังกล่าวไว้ล่วงหน้า


ปัญหา: เมื่อเริ่มเปิดใช้งาน lint ครั้งแรก pipeline ล้มเหลวเนื่องจากพบ error จำนวนมาก

วิธีแก้: สามารถตั้งค่า FAIL_ON_ERROR: "false" ชั่วคราวเพื่อให้อยู่ในโหมดรายงานผลอย่างเดียวก่อน จากนั้นทยอยแก้ไขโค้ดทีละส่วน แล้วจึงเปิดระบบบล็อกอีกครั้งเมื่อพร้อม