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— статика документации из S3Dockerfile— multi-stage сборка
Вопросы
-
downloadVersion:deferвнутриif err == nil— defer в Go выполняется при выходе из функции, а не из блока. Правильно ли это здесь? Не приведёт ли к накоплению defer'ов или утечке? -
readyzHandler: комментарий «Проверить доступность S3», но возвращает просто "ok". Стоит ли добавить реальную проверку (head bucket)? -
listVersions: версии не сортируются, порядок зависит от S3 ListObjects. Стоит ли сортировать? -
proxHandler: никаких ограничений на размер файла, таймаутов, rate-limiting. Нормально ли для внутреннего сервиса? -
rootHandler: HTML захардкожен. Вынести в template или embed? -
Graceful shutdown: нет обработки SIGTERM. Для managed-сервиса это критично?
-
tyCandidateKeysв docs.go: индентация сломана (табы/пробелы вперемешку). Это баг форматирования или Go это нормально компилирует? -
GPG-ключи в коде: стоит ли вынести в файлы/ENV или оставить как есть?
-
Dockerfile:
go mod init+go mod tidyпри каждой сборке. Стоит ли добавитьgo.sumв репо для воспроизводимости? -
Общая архитектура: что можно улучшить? Есть ли проблемы с безопасностью?
Как отвечать
Если что-то неясно — спрашивай. Контекст: сервис внутренний, не публичный, трафик низкий.