feat: Husky pre-push хуки с проверками качества кода
- Добавлен Husky 9 с pre-push хуком - Проверки: type-check, lint, lint:styles, build:prod - Новые скрипты: build:prod, build:dev с env переменными - Обновлен dev скрипт для использования env переменных - Добавлена документация (.husky/README.md, HUSKY_SETUP.md) - Обновлен .gitignore для включения .husky/
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -3,6 +3,7 @@
|
||||
|
||||
# Исключения (не игнорировать)
|
||||
!.gitignore
|
||||
!.husky/
|
||||
|
||||
# Директории сборки
|
||||
/build
|
||||
|
||||
89
.husky/README.md
Normal file
89
.husky/README.md
Normal file
@@ -0,0 +1,89 @@
|
||||
# Husky Git Hooks
|
||||
|
||||
## Описание
|
||||
|
||||
Husky используется для автоматического запуска проверок перед выполнением git операций.
|
||||
|
||||
## Настроенные хуки
|
||||
|
||||
### pre-push
|
||||
|
||||
Запускается автоматически перед `git push` и выполняет следующие проверки:
|
||||
|
||||
1. **Проверка типов TypeScript** (`pnpm type-check`)
|
||||
- Проверяет корректность типов во всех TypeScript файлах
|
||||
- Использует `tsc --noEmit` (компиляция без генерации файлов)
|
||||
|
||||
2. **Проверка ESLint** (`pnpm lint`)
|
||||
- Проверяет качество кода JavaScript/TypeScript
|
||||
- Проверяет соблюдение правил для React, Hooks, доступности
|
||||
|
||||
3. **Проверка Stylelint** (`pnpm lint:styles`)
|
||||
- Проверяет качество CSS/SCSS кода
|
||||
- Проверяет порядок свойств и селекторов
|
||||
|
||||
4. **Production сборка** (`pnpm build:prod`)
|
||||
- Проверяет, что проект успешно собирается для production
|
||||
- Гарантирует отсутствие ошибок сборки перед push
|
||||
|
||||
## Установка
|
||||
|
||||
После клонирования репозитория выполните:
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
```
|
||||
|
||||
Husky автоматически установится благодаря скрипту `prepare` в package.json.
|
||||
|
||||
## Пропуск проверок (не рекомендуется)
|
||||
|
||||
Если необходимо пропустить проверки (например, для срочного фикса):
|
||||
|
||||
```bash
|
||||
git push --no-verify
|
||||
```
|
||||
|
||||
**Внимание:** Используйте эту опцию только в крайних случаях!
|
||||
|
||||
## Ручной запуск проверок
|
||||
|
||||
Вы можете запустить все проверки вручную:
|
||||
|
||||
```bash
|
||||
pnpm pre-push
|
||||
```
|
||||
|
||||
Или по отдельности:
|
||||
|
||||
```bash
|
||||
pnpm type-check # Проверка типов
|
||||
pnpm lint # Проверка ESLint
|
||||
pnpm lint:styles # Проверка Stylelint
|
||||
```
|
||||
|
||||
## Исправление ошибок
|
||||
|
||||
### Автоматическое исправление ESLint
|
||||
|
||||
```bash
|
||||
pnpm lint --fix
|
||||
```
|
||||
|
||||
### Автоматическое исправление Stylelint
|
||||
|
||||
```bash
|
||||
pnpm lint:styles --fix
|
||||
```
|
||||
|
||||
## Отключение хуков
|
||||
|
||||
Если нужно временно отключить хуки:
|
||||
|
||||
```bash
|
||||
# Удалить хуки
|
||||
rm -rf .husky
|
||||
|
||||
# Восстановить хуки
|
||||
pnpm prepare
|
||||
```
|
||||
18
.husky/pre-push
Normal file
18
.husky/pre-push
Normal file
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env sh
|
||||
. "$(dirname -- "$0")/_/husky.sh"
|
||||
|
||||
echo "Запуск проверок перед push..."
|
||||
|
||||
echo "Проверка типов TypeScript..."
|
||||
pnpm type-check || exit 1
|
||||
|
||||
echo "Проверка ESLint..."
|
||||
pnpm lint || exit 1
|
||||
|
||||
echo "Проверка Stylelint..."
|
||||
pnpm lint:styles || exit 1
|
||||
|
||||
echo "Production сборка..."
|
||||
pnpm build:prod || exit 1
|
||||
|
||||
echo "Все проверки пройдены успешно!"
|
||||
106
HUSKY_SETUP.md
Normal file
106
HUSKY_SETUP.md
Normal file
@@ -0,0 +1,106 @@
|
||||
# Инструкция по настройке Husky
|
||||
|
||||
## Автоматическая установка
|
||||
|
||||
После клонирования репозитория выполните:
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
```
|
||||
|
||||
Husky автоматически установится и настроит хуки благодаря скрипту `prepare`.
|
||||
|
||||
## Ручная настройка (если требуется)
|
||||
|
||||
Если хуки не работают, выполните следующие команды:
|
||||
|
||||
### 1. Сделать файл хука исполняемым
|
||||
|
||||
```bash
|
||||
chmod +x .husky/pre-push
|
||||
```
|
||||
|
||||
### 2. Инициализировать Husky
|
||||
|
||||
```bash
|
||||
pnpm prepare
|
||||
```
|
||||
|
||||
## Проверка работы
|
||||
|
||||
Попробуйте сделать коммит и push:
|
||||
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "test: проверка husky"
|
||||
git push
|
||||
```
|
||||
|
||||
Перед push должны запуститься проверки:
|
||||
- Проверка типов TypeScript
|
||||
- Проверка ESLint
|
||||
- Проверка Stylelint
|
||||
|
||||
## Что делать, если проверки не проходят
|
||||
|
||||
### Проверка типов TypeScript
|
||||
|
||||
```bash
|
||||
pnpm type-check
|
||||
```
|
||||
|
||||
Исправьте ошибки типов в коде.
|
||||
|
||||
### Проверка ESLint
|
||||
|
||||
```bash
|
||||
# Показать ошибки
|
||||
pnpm lint
|
||||
|
||||
# Автоматически исправить
|
||||
pnpm lint --fix
|
||||
```
|
||||
|
||||
### Проверка Stylelint
|
||||
|
||||
```bash
|
||||
# Показать ошибки
|
||||
pnpm lint:styles
|
||||
|
||||
# Автоматически исправить
|
||||
pnpm lint:styles --fix
|
||||
```
|
||||
|
||||
## Пропуск проверок (крайний случай)
|
||||
|
||||
```bash
|
||||
git push --no-verify
|
||||
```
|
||||
|
||||
Используйте только в экстренных ситуациях!
|
||||
|
||||
## Отладка
|
||||
|
||||
Если хуки не запускаются:
|
||||
|
||||
1. Проверьте, что файл существует:
|
||||
```bash
|
||||
ls -la .husky/pre-push
|
||||
```
|
||||
|
||||
2. Проверьте права доступа:
|
||||
```bash
|
||||
chmod +x .husky/pre-push
|
||||
```
|
||||
|
||||
3. Проверьте содержимое:
|
||||
```bash
|
||||
cat .husky/pre-push
|
||||
```
|
||||
|
||||
4. Переустановите Husky:
|
||||
```bash
|
||||
rm -rf .husky
|
||||
pnpm prepare
|
||||
chmod +x .husky/pre-push
|
||||
```
|
||||
10
package.json
10
package.json
@@ -4,11 +4,14 @@
|
||||
"description": "Modern React 19 + TypeScript 5 application",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"dev": "webpack serve --mode development",
|
||||
"build": "webpack --mode production",
|
||||
"dev": "webpack serve --env port=3000 --env mode=development",
|
||||
"build:prod": "webpack --env mode=production",
|
||||
"build:dev": "webpack --env mode=development",
|
||||
"lint": "eslint src --ext .ts,.tsx",
|
||||
"lint:styles": "stylelint 'src/**/*.{css,scss}'",
|
||||
"type-check": "tsc --noEmit"
|
||||
"type-check": "tsc --noEmit",
|
||||
"prepare": "husky",
|
||||
"pre-push": "pnpm type-check && pnpm lint && pnpm lint:styles && pnpm build:prod"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
@@ -19,6 +22,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.26.0",
|
||||
"husky": "^9.1.0",
|
||||
"@babel/preset-env": "^7.26.0",
|
||||
"@babel/preset-react": "^7.26.0",
|
||||
"@babel/preset-typescript": "^7.26.0",
|
||||
|
||||
10
pnpm-lock.yaml
generated
10
pnpm-lock.yaml
generated
@@ -99,6 +99,9 @@ importers:
|
||||
html-webpack-plugin:
|
||||
specifier: ^5.6.0
|
||||
version: 5.6.5(webpack@5.103.0)
|
||||
husky:
|
||||
specifier: ^9.1.0
|
||||
version: 9.1.7
|
||||
mini-css-extract-plugin:
|
||||
specifier: ^2.9.0
|
||||
version: 2.9.4(webpack@5.103.0)
|
||||
@@ -2566,6 +2569,11 @@ packages:
|
||||
resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
|
||||
engines: {node: '>=8.0.0'}
|
||||
|
||||
husky@9.1.7:
|
||||
resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
|
||||
engines: {node: '>=18'}
|
||||
hasBin: true
|
||||
|
||||
hyperdyperid@1.2.0:
|
||||
resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==}
|
||||
engines: {node: '>=10.18'}
|
||||
@@ -6925,6 +6933,8 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- debug
|
||||
|
||||
husky@9.1.7: {}
|
||||
|
||||
hyperdyperid@1.2.0: {}
|
||||
|
||||
iconv-lite@0.4.24:
|
||||
|
||||
Reference in New Issue
Block a user