- логотип сведён в web/static/logo.svg (буквы геометрией, оптическая центровка); прежний favicon с «play» убран - <head> шести страниц свёрнут в партиал head с og-мета; адреса абсолютные, база берётся из запроса, хост из недоверенного заголовка проверяется - растровые ассеты og-cover.jpg и apple-touch-icon.png собирает `task brand` из исходников web/*.html
114 lines
4.2 KiB
YAML
114 lines
4.2 KiB
YAML
# 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/покрытие диффа/миграции/канон docs/секреты. 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
|
||
|
||
brand:
|
||
desc: 'Пересборка растровых брендовых ассетов из web/*.html (нужны chromium и magick; вручную, не в сборке)'
|
||
deps: [assets]
|
||
cmds:
|
||
- |
|
||
set -e
|
||
command -v chromium >/dev/null || { echo "нет chromium — растр не собрать"; exit 1; }
|
||
command -v magick >/dev/null || { echo "нет magick — растр не сжать"; exit 1; }
|
||
mkdir -p tmp/brand
|
||
chromium --headless=new --disable-gpu --hide-scrollbars \
|
||
--screenshot=tmp/brand/og-cover.png --window-size=1200,630 \
|
||
"file://$PWD/web/og-cover.html"
|
||
magick tmp/brand/og-cover.png -strip -quality 90 web/static/og-cover.jpg
|
||
chromium --headless=new --disable-gpu --hide-scrollbars \
|
||
--screenshot=tmp/brand/touch-icon.png --window-size=180,180 \
|
||
"file://$PWD/web/touch-icon.html"
|
||
magick tmp/brand/touch-icon.png -strip web/static/apple-touch-icon.png
|
||
echo "✓ web/static/og-cover.jpg, web/static/apple-touch-icon.png"
|
||
|
||
image:
|
||
desc: 'Docker-образ из готового бинаря. Тег из $BUILD_ID (по умолчанию dev; роль app_image umbar передаёт свой). См. docs/adr local-image-build'
|
||
deps: [build]
|
||
cmds:
|
||
- docker build -t {{.BINARY}}:${BUILD_ID:-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
|