- Добавлен ConsoleLogger для подробного логирования этапов обработки аудиокниг в консоли. - Введен ConsolePresenter для форматированного вывода результатов сканирования в консоль. - Создан ProcessAudioBooksUseCase для обработки полного конвейера обработки аудиокниг, включая сканирование папок, извлечение метаданных, поиск торрентов и запись результатов. - Реализована проверка LLM для улучшения метаданных. - Добавлена обработка ошибок и логирование на всех этапах обработки.
273 lines
11 KiB
Makefile
273 lines
11 KiB
Makefile
# 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
|