Files
tf_registry/HISTORY/code-review-request.md

2.6 KiB

Code Review Request — Go Terraform Registry

Контекст

Terraform Provider Registry по протоколу HashiCorp. Деплоится как Docker-контейнер (containerk8s managed service в Nubes Cloud). Работает на проде: https://go-registry.containerk8s.dev.nubes.ru.

Хранилище — S3 (MinIO). Провайдеры, SHA256SUMS, GPG-подписи, документация — всё в S3.

Файлы для ревью

  • server/main.go — HTTP-сервер, S3, все роуты
  • server/gpg_key.go — GPG-ключи (2 штуки, вшиты в код)
  • server/docs.go — статика документации из S3
  • Dockerfile — multi-stage сборка

Вопросы

  1. downloadVersion: defer внутри if err == nil — defer в Go выполняется при выходе из функции, а не из блока. Правильно ли это здесь? Не приведёт ли к накоплению defer'ов или утечке?

  2. readyzHandler: комментарий «Проверить доступность S3», но возвращает просто "ok". Стоит ли добавить реальную проверку (head bucket)?

  3. listVersions: версии не сортируются, порядок зависит от S3 ListObjects. Стоит ли сортировать?

  4. proxHandler: никаких ограничений на размер файла, таймаутов, rate-limiting. Нормально ли для внутреннего сервиса?

  5. rootHandler: HTML захардкожен. Вынести в template или embed?

  6. Graceful shutdown: нет обработки SIGTERM. Для managed-сервиса это критично?

  7. tyCandidateKeys в docs.go: индентация сломана (табы/пробелы вперемешку). Это баг форматирования или Go это нормально компилирует?

  8. GPG-ключи в коде: стоит ли вынести в файлы/ENV или оставить как есть?

  9. Dockerfile: go mod init + go mod tidy при каждой сборке. Стоит ли добавить go.sum в репо для воспроизводимости?

  10. Общая архитектура: что можно улучшить? Есть ли проблемы с безопасностью?

Как отвечать

Если что-то неясно — спрашивай. Контекст: сервис внутренний, не публичный, трафик низкий.