# 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
