# Система тегов CI/CD

Каждое приложение в Gitea публикуется **отдельным репозиторием** и выпускается **своим тегом**. Тег запускает Gitea Actions: сборка Docker-образа → push в registry → обновление `values-{env}.yaml` в `sova-deploy`.

> Полный git-flow (ветки prod/test/stage, PR, hotfix): [Git-flow](./git-flow.md)

## Формат тега

```
{component}-v{semver}-{env}
```

| Часть | Пример | Описание |
|-------|--------|----------|
| `component` | `backend`, `adminpanel`, `cabinet`, `docs` | имя сервиса |
| `semver` | `1.0.1`, `1.0.2` | версия образа |
| `env` | `test`, `stage`, `prod` | контур → `values-{env}.yaml` |

**Тег создаётся на ветке с тем же именем, что и env:** `backend-v1.0.2-test` ставится на ветку **`test`**.

Примеры:

| Репозиторий Gitea | Тег | Ветка | Helm values |
|-------------------|-----|-------|-------------|
| `sova/backend` | `backend-v1.0.1-test` | `test` | `apps/backend/values-test.yaml` |
| `sova/adminpanel` | `adminpanel-v1.0.1-test` | `test` | `apps/adminpanel/values-test.yaml` |
| `sova/cabinet` | `cabinet-v1.0.2-test` | `test` | `apps/cabinet/values-test.yaml` |
| `sova/docs` | `docs-v1.0.5-test` | `test` | `apps/docs/values-test.yaml` |
| `sova/backend` | `backend-v1.0.2-stage` | `stage` | `apps/backend/values-stage.yaml` *(stage-контур — план)* |
| `sova/backend` | `backend-v1.0.2-prod` | `prod` | `values-prod.yaml` *(prod — план)* |

`sova-deploy` и `sova-mocks` **не** собираются по тегам приложений — deploy через GitOps / ArgoCD.

## Release-скрипт

```bash
./scripts/release-tag.sh backend   backend-v1.0.1-test
./scripts/release-tag.sh adminpanel adminpanel-v1.0.1-test
./scripts/release-tag.sh cabinet   cabinet-v1.0.2-test
./scripts/release-tag.sh docs      docs-v1.0.5-test
```

Скрипт checkout ветки `test` (или env из суффикса тега), создаёт аннотированный тег и пушит в Gitea.

`release-test-tag.sh` — алиас для совместимости.

## Pipeline (общая схема)

```mermaid
flowchart LR
  tag["git tag on env branch"] --> test["job: test"]
  test --> build["build-and-push"]
  build --> registry["Gitea registry"]
  build --> deploy["deploy-gitops"]
  deploy --> deployRepo["sova-deploy main"]
  deployRepo --> argocd["ArgoCD sync"]
  argocd --> k8s["Pod rollout"]
```

## Секреты Actions (на репозиторий)

Настраиваются `./scripts/bootstrap-gitea-ci-secrets.sh`:

| Secret | Назначение |
|--------|------------|
| `REGISTRY_USER` / `REGISTRY_PASSWORD` | push образа в Gitea registry |
| `DEPLOY_TOKEN` | HTTPS push в `sova/sova-deploy` |
| `HOST_IP` | резерв для jobs с внешним доступом |

Перед первым CI после bootstrap:

```bash
./scripts/configure-k3s-registry.sh
./scripts/bootstrap-gitea-ci-secrets.sh
```

## Локальная сборка (без CI)

```bash
./scripts/build-images.sh local-test   # backend, adminpanel, cabinet, docs
./scripts/import-images-to-vm.sh local-test
```

Образы с тегом `local-test` — для первого деплоя до настройки registry.

## Проверка

```bash
# Workflow
open http://git.sova.local/sova/backend/actions

# ArgoCD
kubectl get applications -n argocd
kubectl get deploy -n sova-test
```

Создание тега через UI Gitea — см. [Git-flow → Как создать тег](./git-flow.md#как-создать-тег-в-gitea-ui).
