feat: add husky pre-commit hooks and reusable CI lint workflow

- Add husky with lint-staged for pre-commit checks (eslint --fix, prettier --write)
- Add reusable lint.yml workflow (eslint, prettier, tsc)
- Gate docker, release, and CI pipelines behind lint job via needs: lint
This commit is contained in:
c0mrade
2026-01-27 17:37:53 +03:00
parent bc90ba3779
commit f0cfdfdd2a
5 changed files with 45 additions and 7 deletions

View File

@@ -1,3 +1,5 @@
name: CI
on:
push:
branches: [main, dev]
@@ -5,7 +7,11 @@ on:
branches: [main, dev]
jobs:
lint-and-build:
lint:
uses: ./.github/workflows/lint.yml
build:
needs: lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
@@ -20,12 +26,6 @@ jobs:
- name: Install dependencies
run: npm ci
- name: Run ESLint
run: npm run lint
- name: Run TypeScript check
run: npx tsc --noEmit
- name: Build
run: npm run build
env:

View File

@@ -13,7 +13,11 @@ env:
IMAGE_NAME: ${{ github.repository }}
jobs:
lint:
uses: ./.github/workflows/lint.yml
build-and-push:
needs: lint
runs-on: ubuntu-latest
permissions:
contents: read

29
.github/workflows/lint.yml vendored Normal file
View File

@@ -0,0 +1,29 @@
name: Lint & Format
on:
workflow_call:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run ESLint
run: npm run lint
- name: Check formatting
run: npm run format:check
- name: Run TypeScript check
run: npx tsc --noEmit

View File

@@ -9,7 +9,11 @@ permissions:
contents: write
jobs:
lint:
uses: ./.github/workflows/lint.yml
create-release:
needs: lint
runs-on: ubuntu-latest
steps:

1
.husky/pre-commit Normal file
View File

@@ -0,0 +1 @@
npx lint-staged