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

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

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

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

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

Примеры для test-контура:

| Репозиторий Gitea | Тег | Helm values |
|-------------------|-----|-------------|
| `sova/backend` | `backend-v1.0.1-test` | `apps/backend/values-test.yaml` |
| `sova/adminpanel` | `adminpanel-v1.0.1-test` | `apps/adminpanel/values-test.yaml` |
| `sova/cabinet` | `cabinet-v1.0.1-test` | `apps/cabinet/values-test.yaml` |
| `sova/docs` | `docs-v1.0.1-test` | `apps/docs/values-test.yaml` |

`sova-deploy` и `sova-mocks` **не** собираются по тегам — их меняют вручную или через bootstrap; ArgoCD подхватывает `main`.

## Release-скрипт

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

Скрипт создаёт аннотированный тег в локальном зеркале репозитория и пушит в Gitea. Workflow парсит суффикс `-test` и обновляет соответствующий `values-test.yaml`.

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

```mermaid
flowchart LR
  tag["git tag push"] --> 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` и `pullPolicy: Never`/`IfNotPresent` — для первого деплоя до настройки registry.

## Проверка

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

# Образ в registry
curl -u gitea_admin:PASSWORD http://git.sova.local/v2/sova/backend/tags/list

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