- Add concurrency control to prevent duplicate runs - Add timeout-minutes for all jobs - Add pip-audit to dev dependencies - Remove docs deployment (Gitea doesn't support Pages) - Fix security check (remove || true, proper exit codes) - Simplify release.yml (build only on tags) - Update CONTRIBUTING.md with local docs generation
123 lines
2.7 KiB
Markdown
123 lines
2.7 KiB
Markdown
# Contributing to kwork-api
|
||
|
||
## Development Setup
|
||
|
||
```bash
|
||
# Clone repository
|
||
git clone https://git.much-data.ru/much-data/kwork-api.git
|
||
cd kwork-api
|
||
|
||
# Install UV (if not installed)
|
||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||
|
||
# Install dependencies
|
||
uv sync --group dev
|
||
|
||
# Install pre-commit hooks
|
||
uv run pre-commit install
|
||
```
|
||
|
||
## Documentation
|
||
|
||
Generate documentation locally:
|
||
|
||
```bash
|
||
# Install docs dependencies
|
||
uv sync --group dev
|
||
|
||
# Build HTML docs
|
||
uv run mkdocs build
|
||
|
||
# Serve locally (optional)
|
||
uv run mkdocs serve
|
||
```
|
||
|
||
Documentation is built automatically by CI and available in `site/` folder.
|
||
|
||
## Branch Naming
|
||
|
||
- `feature/description` — новые фичи
|
||
- `fix/description` — багфиксы
|
||
- `docs/description` — документация
|
||
- `refactor/description` — рефакторинг
|
||
|
||
## Commit Messages
|
||
|
||
Используем [Conventional Commits](https://www.conventionalcommits.org/):
|
||
|
||
```
|
||
<type>(<scope>): <description>
|
||
|
||
[optional body]
|
||
|
||
[optional footer]
|
||
```
|
||
|
||
**Types:**
|
||
- `feat` — новая фича
|
||
- `fix` — исправление бага
|
||
- `docs` — документация
|
||
- `style` — форматирование
|
||
- `refactor` — рефакторинг
|
||
- `test` — тесты
|
||
- `chore` — обслуживание
|
||
- `ci` — CI/CD
|
||
|
||
**Примеры:**
|
||
```
|
||
feat(validation): add /api/validation/checktext endpoint
|
||
fix(auth): handle expired token error
|
||
docs(api): update client examples
|
||
```
|
||
|
||
## Pre-commit Hooks
|
||
|
||
Автоматически запускаются перед коммитом:
|
||
|
||
1. **ruff check** — линтинг с авто-исправлением
|
||
2. **ruff format** — форматирование кода
|
||
3. **commitlint** — проверка формата коммита
|
||
|
||
Перед push:
|
||
- **pytest** — запуск тестов
|
||
|
||
## Pull Requests
|
||
|
||
1. Создай ветку от `main`
|
||
2. Вноси изменения с правильными коммитами
|
||
3. Запушь ветку
|
||
4. Создай PR в `main`
|
||
5. Дождись прохождения CI
|
||
6. После review — merge
|
||
|
||
## CI/CD
|
||
|
||
**PR Checks:**
|
||
- ✅ Тесты с coverage (90% threshold)
|
||
- ✅ Линтинг (ruff)
|
||
- ✅ Форматирование (ruff format)
|
||
- ✅ Безопасность (pip-audit + secrets scan)
|
||
- ✅ Commitlint (PR title)
|
||
|
||
**Release (merge в main):**
|
||
- 📦 Semantic release (auto versioning)
|
||
- 📝 CHANGELOG generation
|
||
- 🏷️ Git tag creation
|
||
|
||
**Tag (v*):**
|
||
- 📦 Сборка пакета
|
||
- 🚀 Публикация в Gitea Packages
|
||
|
||
## Versioning
|
||
|
||
Используем [Semantic Versioning](https://semver.org/):
|
||
|
||
- `MAJOR.MINOR.PATCH` (например, `1.2.3`)
|
||
- Теги: `v1.2.3`
|
||
|
||
Для создания релиза:
|
||
```bash
|
||
git tag v1.2.3
|
||
git push origin v1.2.3
|
||
```
|