This commit represents a significant architectural overhaul of vaultik: Database Schema Changes: - Switch files table to use UUID primary keys instead of path-based keys - Add UUID primary keys to blobs table for immediate chunk association - Update all foreign key relationships to use UUIDs - Add comprehensive schema documentation in DATAMODEL.md - Add SQLite busy timeout handling for concurrent operations Streaming and Performance Improvements: - Implement true streaming blob packing without intermediate storage - Add streaming chunk processing to reduce memory usage - Improve progress reporting with real-time metrics - Add upload metrics tracking in new uploads table CLI Refactoring: - Restructure CLI to use subcommands: snapshot create/list/purge/verify - Add store info command for S3 configuration display - Add custom duration parser supporting days/weeks/months/years - Remove old backup.go in favor of enhanced snapshot.go - Add --cron flag for silent operation Configuration Changes: - Remove unused index_prefix configuration option - Add support for snapshot pruning retention policies - Improve configuration validation and error messages Testing Improvements: - Add comprehensive repository tests with edge cases - Add cascade delete debugging tests - Fix concurrent operation tests to use SQLite busy timeout - Remove tolerance for SQLITE_BUSY errors in tests Documentation: - Add MIT LICENSE file - Update README with new command structure - Add comprehensive DATAMODEL.md explaining database schema - Update DESIGN.md with UUID-based architecture Other Changes: - Add test-config.yml for testing - Update Makefile with better test output formatting - Fix various race conditions in concurrent operations - Improve error handling throughout
62 lines
1.3 KiB
Makefile
62 lines
1.3 KiB
Makefile
.PHONY: test fmt lint build clean all
|
|
|
|
# Version number
|
|
VERSION := 0.0.1
|
|
|
|
# Build variables
|
|
GIT_REVISION := $(shell git rev-parse HEAD 2>/dev/null || echo "unknown")
|
|
|
|
# Linker flags
|
|
LDFLAGS := -X 'git.eeqj.de/sneak/vaultik/internal/globals.Version=$(VERSION)' \
|
|
-X 'git.eeqj.de/sneak/vaultik/internal/globals.Commit=$(GIT_REVISION)'
|
|
|
|
# Default target
|
|
all: test
|
|
|
|
# Run tests
|
|
test: lint fmt-check
|
|
@echo "Running tests..."
|
|
@if ! go test -v -timeout 10s ./... 2>&1; then \
|
|
echo ""; \
|
|
echo "TEST FAILURES DETECTED"; \
|
|
echo "Run 'go test -v ./internal/database' to see database test details"; \
|
|
exit 1; \
|
|
fi
|
|
|
|
# Check if code is formatted
|
|
fmt-check:
|
|
@if [ -n "$$(go fmt ./...)" ]; then \
|
|
echo "Error: Code is not formatted. Run 'make fmt' to fix."; \
|
|
exit 1; \
|
|
fi
|
|
|
|
# Format code
|
|
fmt:
|
|
go fmt ./...
|
|
|
|
# Run linter
|
|
lint:
|
|
golangci-lint run
|
|
|
|
# Build binary
|
|
build:
|
|
go build -ldflags "$(LDFLAGS)" -o vaultik ./cmd/vaultik
|
|
|
|
# Clean build artifacts
|
|
clean:
|
|
rm -f vaultik
|
|
go clean
|
|
|
|
# Install dependencies
|
|
deps:
|
|
go mod download
|
|
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
|
|
|
# Run tests with coverage
|
|
test-coverage:
|
|
go test -v -coverprofile=coverage.out ./...
|
|
go tool cover -html=coverage.out -o coverage.html
|
|
|
|
# Run integration tests
|
|
test-integration:
|
|
go test -v -tags=integration ./...
|