Files
GenAudioBookInfo/Makefile
Dmitriy Fofanov 402ce7f4f1 Функция: реализованы консольный логгер и презентер для обработки аудиокниг
- Добавлен ConsoleLogger для подробного логирования этапов обработки аудиокниг в консоли.

- Введен ConsolePresenter для форматированного вывода результатов сканирования в консоль.

- Создан ProcessAudioBooksUseCase для обработки полного конвейера обработки аудиокниг, включая сканирование папок, извлечение метаданных, поиск торрентов и запись результатов.

- Реализована проверка LLM для улучшения метаданных.

- Добавлена ​​обработка ошибок и логирование на всех этапах обработки.
2026-02-20 00:35:43 +03:00

273 lines
11 KiB
Makefile
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.
# GenAudioBookInfo Makefile
# Сборка, запуск, тестирование под все платформы
APP_NAME := genaudiobookinfo
VERSION := 1.0.0
BUILD_DIR := build
CMD_PATH := ./cmd/genaudiobookinfo
GO := go
GOFLAGS := -trimpath
LDFLAGS := -s -w -X main.version=$(VERSION)
# Директории проекта
INPUT_DIR := ./audiobook
OUTPUT_DIR := ./result
# Дата и коммит для информации о сборке
BUILD_DATE := $(shell powershell -Command "Get-Date -Format 'yyyy-MM-ddTHH:mm:ssZ'" 2>nul || echo unknown)
GIT_COMMIT := $(shell git rev-parse --short HEAD 2>nul || echo unknown)
# ============================================================================
# Основные команды
# ============================================================================
.PHONY: all build run clean test lint deps tidy fmt vet help clean-results
## Сборка для текущей платформы
build:
@echo ">>> Сборка $(APP_NAME) для текущей платформы..."
$(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME) $(CMD_PATH)
@echo ">>> Готово: $(BUILD_DIR)/$(APP_NAME)"
## Сборка для Windows
build-windows-current:
@echo ">>> Сборка $(APP_NAME).exe для Windows..."
$(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(APP_NAME).exe $(CMD_PATH)
@echo ">>> Готово: $(APP_NAME).exe"
## Запуск без сборки (с параметрами по умолчанию)
run:
@echo ">>> Запуск $(APP_NAME)..."
$(GO) run $(CMD_PATH) -workers 8 -timeout 60
## Запуск с собственными параметрами (пример: make run-custom ARGS="-workers 4 -timeout 30")
run-custom:
@echo ">>> Запуск с параметрами: $(ARGS)..."
$(GO) run $(CMD_PATH) $(ARGS)
## Запуск unit-тестов
test:
@echo ">>> Запуск тестов..."
$(GO) test ./... -v -race -count=1
## Запуск тестов с покрытием
test-cover:
@echo ">>> Запуск тестов с покрытием..."
$(GO) test ./... -v -race -coverprofile=coverage.out
$(GO) tool cover -html=coverage.out -o coverage.html
@echo ">>> Отчёт: coverage.html"
## Установка зависимостей
deps:
@echo ">>> Установка зависимостей..."
$(GO) mod download
## Очистка и обновление go.mod
tidy:
$(GO) mod tidy
## Форматирование кода
fmt:
@echo ">>> Форматирование кода..."
$(GO) fmt ./...
## Статический анализ
vet:
@echo ">>> Статический анализ..."
$(GO) vet ./...
## Линтер (требуется golangci-lint)
lint:
@echo ">>> Линтинг..."
@where golangci-lint >nul 2>&1 && golangci-lint run ./... || echo "golangci-lint не установлен: go install github.com/golangci-lint/golangci-lint/cmd/golangci-lint@latest"
## Очистка артефактов сборки
clean:
@echo ">>> Очистка артефактов сборки..."
@if exist $(BUILD_DIR) rmdir /s /q $(BUILD_DIR)
@if exist $(APP_NAME).exe del /q $(APP_NAME).exe
@if exist coverage.out del /q coverage.out
@if exist coverage.html del /q coverage.html
@echo ">>> Готово"
## Очистка результатов работы программы
clean-results:
@echo ">>> Очистка директории результатов..."
@if exist $(OUTPUT_DIR) rmdir /s /q $(OUTPUT_DIR)
@if not exist $(OUTPUT_DIR) mkdir $(OUTPUT_DIR)
@echo ">>> Готово"
## Полная очистка (артефакты + результаты)
clean-all: clean clean-results
# ============================================================================
# Кросс-компиляция: все платформы
# ============================================================================
.PHONY: build-all build-linux build-darwin build-windows build-arm build-freebsd build-openbsd build-netbsd
## Сборка под ВСЕ платформы
build-all: clean build-linux build-darwin build-windows build-arm build-freebsd build-openbsd build-netbsd
@echo ""
@echo "========================================="
@echo " Сборка завершена для всех платформ"
@echo "========================================="
@if exist $(BUILD_DIR) dir $(BUILD_DIR) /b
@echo ""
# --- Linux ---
build-linux: build-linux-amd64 build-linux-386 build-linux-arm64 build-linux-arm7
build-linux-amd64:
@echo ">>> Linux amd64..."
GOOS=linux GOARCH=amd64 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-linux-amd64 $(CMD_PATH)
build-linux-386:
@echo ">>> Linux 386..."
GOOS=linux GOARCH=386 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-linux-386 $(CMD_PATH)
build-linux-arm64:
@echo ">>> Linux arm64..."
GOOS=linux GOARCH=arm64 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-linux-arm64 $(CMD_PATH)
build-linux-arm7:
@echo ">>> Linux armv7..."
GOOS=linux GOARCH=arm GOARM=7 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-linux-armv7 $(CMD_PATH)
# --- macOS ---
build-darwin: build-darwin-amd64 build-darwin-arm64
build-darwin-amd64:
@echo ">>> macOS amd64 (Intel)..."
GOOS=darwin GOARCH=amd64 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-darwin-amd64 $(CMD_PATH)
build-darwin-arm64:
@echo ">>> macOS arm64 (Apple Silicon)..."
GOOS=darwin GOARCH=arm64 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-darwin-arm64 $(CMD_PATH)
# --- Windows ---
build-windows: build-windows-amd64 build-windows-386 build-windows-arm64
build-windows-amd64:
@echo ">>> Windows amd64..."
GOOS=windows GOARCH=amd64 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-windows-amd64.exe $(CMD_PATH)
build-windows-386:
@echo ">>> Windows 386..."
GOOS=windows GOARCH=386 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-windows-386.exe $(CMD_PATH)
build-windows-arm64:
@echo ">>> Windows arm64..."
GOOS=windows GOARCH=arm64 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-windows-arm64.exe $(CMD_PATH)
# --- ARM (embedded / Raspberry Pi / роутеры) ---
build-arm: build-arm-mips build-arm-mipsle build-arm-riscv64
build-arm-mips:
@echo ">>> MIPS (big-endian)..."
GOOS=linux GOARCH=mips GOMIPS=softfloat $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-linux-mips $(CMD_PATH)
build-arm-mipsle:
@echo ">>> MIPS (little-endian)..."
GOOS=linux GOARCH=mipsle GOMIPS=softfloat $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-linux-mipsle $(CMD_PATH)
build-arm-riscv64:
@echo ">>> RISC-V 64..."
GOOS=linux GOARCH=riscv64 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-linux-riscv64 $(CMD_PATH)
# --- FreeBSD ---
build-freebsd: build-freebsd-amd64 build-freebsd-arm64
build-freebsd-amd64:
@echo ">>> FreeBSD amd64..."
GOOS=freebsd GOARCH=amd64 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-freebsd-amd64 $(CMD_PATH)
build-freebsd-arm64:
@echo ">>> FreeBSD arm64..."
GOOS=freebsd GOARCH=arm64 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-freebsd-arm64 $(CMD_PATH)
# --- OpenBSD ---
build-openbsd: build-openbsd-amd64
build-openbsd-amd64:
@echo ">>> OpenBSD amd64..."
GOOS=openbsd GOARCH=amd64 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-openbsd-amd64 $(CMD_PATH)
# --- NetBSD ---
build-netbsd: build-netbsd-amd64
build-netbsd-amd64:
@echo ">>> NetBSD amd64..."
GOOS=netbsd GOARCH=amd64 $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME)-netbsd-amd64 $(CMD_PATH)
# ============================================================================
# Релиз (архивирование бинарников)
# ============================================================================
.PHONY: release checksum
## Создание архивов для всех платформ
release: build-all
@echo ">>> Создание архивов релиза..."
@if not exist $(BUILD_DIR)\release mkdir $(BUILD_DIR)\release
@echo ">>> Архивы: $(BUILD_DIR)/release/"
## Генерация контрольных сумм SHA256
checksum: release
@echo ">>> Генерация SHA256..."
@cd $(BUILD_DIR)\release && powershell -Command "Get-FileHash * | Format-List > checksums-sha256.txt"
@echo ">>> Контрольные суммы: $(BUILD_DIR)/release/checksums-sha256.txt"
# ============================================================================
# Справка
# ============================================================================
## Показать справку
help:
@echo ""
@echo " GenAudioBookInfo v$(VERSION) — Makefile"
@echo " ─────────────────────────────────────────"
@echo ""
@echo " Основные:"
@echo " make build Сборка для текущей платформы"
@echo " make build-windows-current Сборка genaudiobookinfo.exe"
@echo " make run Запуск без сборки (workers=8, timeout=60)"
@echo " make run-custom Запуск с параметрами (ARGS=\"-workers 4\")"
@echo " make clean Очистка артефактов сборки"
@echo " make clean-results Очистка директории результатов"
@echo " make clean-all Полная очистка"
@echo ""
@echo " Тестирование:"
@echo " make test Unit-тесты"
@echo " make test-cover Тесты с покрытием кода"
@echo ""
@echo " Качество кода:"
@echo " make fmt Форматирование (go fmt)"
@echo " make vet Статический анализ (go vet)"
@echo " make lint Линтер (golangci-lint)"
@echo " make tidy Обновление go.mod/go.sum"
@echo ""
@echo " Кросс-компиляция:"
@echo " make build-all Все платформы"
@echo " make build-linux Linux: amd64, 386, arm64, armv7"
@echo " make build-darwin macOS: amd64 (Intel), arm64 (Apple Silicon)"
@echo " make build-windows Windows: amd64, 386, arm64"
@echo " make build-arm Embedded: MIPS, MIPSle, RISC-V 64"
@echo " make build-freebsd FreeBSD: amd64, arm64"
@echo " make build-openbsd OpenBSD: amd64"
@echo " make build-netbsd NetBSD: amd64"
@echo ""
@echo " Релиз:"
@echo " make release Сборка для всех платформ"
@echo " make checksum Релиз + SHA256 контрольные суммы"
.DEFAULT_GOAL := help