приложение собрано каркасом и вшито в бинарник
- заведён каталог web/ — Vue 3, роутер пятой версии, сборка Vite; собранное вшивается через go:embed и раздаётся корневым маршрутом: разметка на неизвестном пути вне корней сервиса, отказ контракта внутри корня - перечень корней сервиса стал единой точкой и порождает регистрацию маршрутов, а не описывает её; журнал раздачи пишет исход и длину пути, но не сам путь - шаг front зовёт Node контейнером docker — Biome, юнит-тесты Vue и сборка входят в гейт, а в Dockerfile появилась ступень приложения
This commit is contained in:
@@ -27,7 +27,9 @@ SpeechKit и отдаёт текст тому, кто запись загруз
|
||||
|
||||
Go 1.26 (сборке CGO не нужен; детектору гонок в гейте — нужен), встроенная PocketBase — хранилище, файлы записей и
|
||||
панель администратора, — `aws-sdk-go-v2` для Object
|
||||
Storage, gRPC-клиент Yandex SpeechKit v3, Prometheus, `slog`. Сборка —
|
||||
Storage, gRPC-клиент Yandex SpeechKit v3, Prometheus, `slog`. Приложение — Vue 3
|
||||
с роутером пятой версии и сборкой Vite; собранное вшито в бинарник, проверяют
|
||||
его Biome и юнит-тесты Vue. Сборка —
|
||||
Taskfile, образ — Docker, выкладка — Ansible из `pet-project-server`.
|
||||
|
||||
## Инварианты
|
||||
@@ -118,10 +120,15 @@ go vet ./...
|
||||
gofmt -l .
|
||||
golangci-lint run
|
||||
go run . -c config.toml # флаг -c или --config, по умолчанию config.toml
|
||||
task front # приложение: зависимости, Biome, юнит-тесты, сборка
|
||||
task image # docker-образ; тег и раскладка — docs/architecture.md
|
||||
task gate # весь набор проверок разом
|
||||
```
|
||||
|
||||
Node на машину **не ставится**: шаг сборки приложения зовёт его контейнером, а
|
||||
образ берёт из ступени `Dockerfile`. Требованием к машине разработчика поэтому
|
||||
становится docker — тот же, которым собирается образ.
|
||||
|
||||
Локальный запуск требует `ffmpeg` и `ffprobe` в `PATH` и своего `config.toml` —
|
||||
скопируй `config.example.toml` и заполни; известные прорехи образца перечислены
|
||||
в [docs/conventions/config.md](docs/conventions/config.md) строками
|
||||
@@ -153,7 +160,8 @@ task gate # весь набор проверок разом
|
||||
Недостающий скрипт — отказ окружения, код 3. Наружу все эти коды приходят одним: сам `task` на
|
||||
любой отказ шага выходит с 201, а код шага печатает строкой
|
||||
(«exit status 3»), поэтому словарь читается по коду скрипта.
|
||||
- **Что красит безусловно и почему:** отказ сборки, тестов, `go vet`,
|
||||
- **Что красит безусловно и почему:** красная сборка приложения, находка Biome,
|
||||
красный юнит-тест приложения, отказ сборки, тестов, `go vet`,
|
||||
гонка, найденная детектором (`go test -race`), переписанный применённый шаг
|
||||
схемы,
|
||||
неотформатированный файл, находка `golangci-lint`, расхождение объявленных
|
||||
@@ -169,7 +177,14 @@ task gate # весь набор проверок разом
|
||||
`gitleaks` по индексу. Только гейту остаются сборка, `go vet`, тесты целиком,
|
||||
сверка версий Go, сверки документов и `govulncheck`: они смотрят всё
|
||||
дерево либо требуют сети, а pre-commit обязан быть быстрым.
|
||||
- **Шагу `vulns` нужна сеть**, и он один такой: база уязвимостей живёт на
|
||||
- **Сетезависимые шаги названы здесь поимённо, и перечень этот закрыт.** Один из
|
||||
них — `front`: он ставит зависимости приложения из реестра пакетов, а docker до
|
||||
того тянет образ сборочного окружения. Отказ сети и реестра там — отказ окружения, код 3,
|
||||
отдельно от красной сборки, у которой код 1; полный кэш установщика снимает
|
||||
поход в сеть вовсе. Без короткого обращения-пробы шаг **висел** бы вместо
|
||||
отказа: установщик уходит в повторы с нарастающей паузой на каждом пакете, а
|
||||
гейт, который висит, хуже красного.
|
||||
- **Шагу `vulns` нужна сеть** тоже: база уязвимостей живёт на
|
||||
vuln.go.dev. Без сети шаг краснеет, а не пропускается молча; сам инструмент
|
||||
ставится `go install golang.org/x/vuln/cmd/govulncheck@latest`. Судит он
|
||||
достижимость из кода: находка в модуле, чей уязвимый символ мы не вызываем,
|
||||
|
||||
Reference in New Issue
Block a user