Files
jellybit/Taskfile.yml
T
avandClaude Opus 4.8 776a1ca6b6 ревью: скрипты гейта на python3, шаги выбираются по изменённым файлам
gate.sh и review-context.sh переписаны на python3 — в scripts/ уже жил
diff-coverage.py, а разбор вывода git и сборка сводки на shell читались хуже,
чем работали.

Гейт больше не гоняет go-шаги впустую: build, vet, lint, gofmt, тесты, -race,
покрытие и govulncheck запускаются, только если в диффе есть .go либо
go.mod/go.sum; миграции — если тронуты миграции или код. Правка документации
проходит гейт за секунды вместо минуты. Пропуск при этом не молчит: он в сводке
с причиной и уезжает в границы покрытия, а charter гейта различает «код не
трогали» (корректно) и «инструмента нет» (настоящая дыра).

Изменённые файлы считаем как объединение диффа с базой, рабочего дерева и новых
файлов: гейт гоняют и до коммита, и после, а лишний прогон шага дешевле
пропущенного.

Заодно govulncheck перестал рапортовать «уязвимостей: 0» когда он просто не смог
отработать из-за несобирающегося кода — это SKIP, а не WARN.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 19:50:40 +03:00

95 lines
3.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# yaml-language-server: $schema=https://taskfile.dev/schema.json
#
# Запуск команд проекта через Task (https://taskfile.dev).
# Список задач: `task --list`.
version: '3'
vars:
BINARY: jellybit
PKG: ./cmd/jellybit
# Версии инструментов для воспроизводимой установки (см. задачу setup).
GOLANGCI_VERSION: v2.12.2
GOVULNCHECK_VERSION: v1.6.0
tasks:
default:
desc: Список доступных задач
cmds:
- task --list
silent: true
run:
desc: 'Локальный запуск (нужен ./config.toml с db_path -> ./jellybit.db)'
deps: [assets]
cmds:
- go run {{.PKG}} --config ./config.toml
build:
desc: Статический бинарь linux/amd64 для сервера (Intel N150)
deps: [assets]
cmds:
- CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags='-s -w' -o {{.BINARY}} {{.PKG}}
test:
desc: Прогон тестов
cmds:
- go test ./...
lint:
desc: Запуск golangci-lint
cmds:
- golangci-lint run
gate:
desc: 'Детерминированный гейт ревью: build/vet/lint/test/race/покрытие диффа/миграции/секреты. BASE=<rev> — база диффа'
cmds:
- python3 scripts/gate.py {{.BASE}}
review:context:
desc: 'Вход для архитектурного прохода ревью: пакеты, граф зависимостей, инвентарь концепций'
cmds:
- python3 scripts/review-context.py
tidy:
desc: go mod tidy
cmds:
- go mod tidy
assets:
desc: 'Идемпотентный фетч вендорных ассетов в web/static/vendor (по web/assets.manifest, проверка sha256; Node не нужен)'
cmds:
- |
set -e
while IFS= read -r line; do
case "$line" in ''|\#*) continue;; esac
set -- $line
dest=$1; url=$2; sum=$3
file="web/static/$dest"
if [ -f "$file" ] && echo "$sum $file" | sha256sum -c --status - 2>/dev/null; then
continue
fi
mkdir -p "$(dirname "$file")"
echo "↓ $dest"
curl -fsSL --retry 3 -o "$file" "$url"
echo "$sum $file" | sha256sum -c -
done < web/assets.manifest
image:
desc: Docker-образ из готового бинаря (см. docs/adr docker-deploy)
deps: [build]
cmds:
- docker build -t jellybit:dev .
clean:
desc: Удалить собранный бинарь
cmds:
- rm -f {{.BINARY}}
setup:
desc: Установка инструментов разработки (линтер, govulncheck + git-хуки lefthook)
cmds:
- go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@{{.GOLANGCI_VERSION}}
- go install golang.org/x/vuln/cmd/govulncheck@{{.GOVULNCHECK_VERSION}}
- lefthook install