# Contributing ## Gitflow - **main** — production; merges only from `release/*` and `hotfix/*` - **develop** — integration branch (default for development) - **feature/\*** — `feature/[issue-id]-description` from `develop` - **release/vX.Y.Z** — stabilization from `develop` - **hotfix/vX.Y.Z** — urgent fixes from `main` ## Commits Format: `type(scope): description` Types: `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore` ## Pull requests - Target `develop` for features; `main` for release/hotfix - CI quality jobs (`web`, `api`) must pass - At least one approval - Rebase/merge when up to date with target branch - Delete branch after merge ## Versioning - SemVer через [semantic-release](https://semantic-release.gitbook.io/) на push в `main` - Не править версию вручную; тег `vX.Y.Z` ставит CI - Подробнее: [`docs/releasing.md`](docs/releasing.md) ## Branch protection (Gitea) Configure for **main** and **develop**: - Require pull request reviews - Require status checks (`CI` / quality jobs `web`, `api`) - Require branches to be up to date - No force push, no deletion ## Local development ```bash cp .env.example .env pnpm install pnpm --filter @cdnmanager/shared build pnpm --filter @cdnmanager/db build # API (:8080) pnpm --filter @cdnmanager/api dev # Frontend (:5173, proxies /api → :8080) pnpm --filter web dev ``` ## Release process Релизы делает workflow **CD** на push в `main` (semantic-release + bake). Не создавать ветки `release/*` и не bump'ать файлы версии вручную. См. [`docs/releasing.md`](docs/releasing.md).