Гейт ловит достижимые уязвимости в зависимостях
- шаг vulns гоняет govulncheck последним: ему одному нужна сеть, и он самый долгий; отсутствие инструмента даёт код окружения, а не пропуск - закрыты обе достижимые находки — grpc до 1.82.1, aws-sdk-go-v2/service/s3 до 1.97.3 с eventstream 1.7.8; прогон на реальных ключах Yandex не делался - место шага названо в семантике гейта: он судит достижимость из кода, и недостижимая GO-2026-5932 в golang.org/x/crypto/openpgp его не роняет
This commit is contained in:
@@ -39,6 +39,8 @@ tasks:
|
||||
- task: docs
|
||||
- task: tasks
|
||||
- task: openspec
|
||||
# Последним: единственный шаг, которому нужна сеть, и самый долгий.
|
||||
- task: vulns
|
||||
|
||||
go-version:
|
||||
desc: 'Одна версия Go в go.mod, Dockerfile, CLAUDE.md и README.md'
|
||||
@@ -91,6 +93,25 @@ tasks:
|
||||
fi
|
||||
python3 "$py" check --dir .
|
||||
|
||||
vulns:
|
||||
desc: 'Достижимые из кода уязвимости в зависимостях'
|
||||
cmds:
|
||||
# `govulncheck` — внешний инструмент, а не плагин и не файл репозитория:
|
||||
# ставится `go install golang.org/x/vuln/cmd/govulncheck@latest`. Его
|
||||
# отсутствие — отказ окружения, код 3, как у прочих обёрток.
|
||||
#
|
||||
# Свой код 3 у самого инструмента значит «уязвимость найдена» и с кодом
|
||||
# обёртки совпадает; различает их сообщение — обёртка называет недостающий
|
||||
# инструмент. Шагу нужна сеть: база уязвимостей живёт на vuln.go.dev, и без
|
||||
# сети шаг краснеет, а не пропускается молча.
|
||||
- |
|
||||
if ! command -v govulncheck >/dev/null 2>&1; then
|
||||
echo "govulncheck не найден в PATH"
|
||||
echo "поставь: go install golang.org/x/vuln/cmd/govulncheck@latest"
|
||||
exit 3
|
||||
fi
|
||||
govulncheck ./...
|
||||
|
||||
# Контракт роли app_image (pet-project-server): собрать полный образ и затегать
|
||||
# его $BUILD_ID. Деплой целиком: `inv pl -- transcriber` в pet-project-server.
|
||||
image:
|
||||
|
||||
Reference in New Issue
Block a user