Новая capability web-ui: презентационный перенос готового дизайна
(семантический HTML + единый jellybit.css, тёмная тема по настройке ОС)
в html/template без шага сборки.
- Встроенная (go:embed) отдача статики под /static с Cache-Control и
cache-busting (?v=<hash> по содержимому css/js).
- Шрифты IBM Plex self-hosted (@font-face, cyrillic+latin), без CDN.
- Наколеночный менеджер зависимостей: вендор (htmx + шрифты) не хранится
в репо (gitignore), идемпотентно добывается `task assets` по
web/assets.manifest с проверкой sha256; task build/run зависят от assets.
- Общие партиалы: шапка, бейдж статуса (карта всех 14 состояний),
виджет «файл источника → раскладка» (общий для review и download).
- Страницы: список с фильтром/поиском, ревью, новая страница просмотра
загрузки (/download/{id}). deleted скрыт по умолчанию.
- Превью раскладки берётся из единой логики internal/layout
(buildFileRows), без дублирования правил имён в шаблонах.
- Убраны meta-refresh и инлайн-стили; copyHash на vanilla с fallback
на execCommand и честной индикацией (целевой деплой — HTTP LAN).
Вне scope (отдельный change): живые обновления прогресса и раздел
раздачи, клиентский режим ручной раскладки файл→серия (с Alpine.js).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
83 lines
2.4 KiB
YAML
83 lines
2.4 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
|
||
|
||
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
|
||
|
||
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: Установка инструментов разработки (линтер + git-хуки lefthook)
|
||
cmds:
|
||
- go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@{{.GOLANGCI_VERSION}}
|
||
- lefthook install
|