Files
openaccounting-server/justfile

166 lines
4.7 KiB
Makefile
Raw Normal View History

# OpenAccounting Server - Just recipes
# https://github.com/casey/just
# Default recipe
default:
@just --list
# Variables
image_name := "openaccounting-server"
tag := "latest"
# Build the Go application
build:
@echo "Building OpenAccounting Server..."
go build -o server ./core/
# Run the server locally
run: build
@echo "Starting server locally..."
./server
# Run with custom environment
run-dev: build
@echo "Starting server in development mode..."
OA_DATABASEDRIVER=sqlite OA_DATABASEFILE=./dev.db OA_PORT=8080 ./server
# Run tests
test:
@echo "Running tests..."
go test ./...
# Clean build artifacts
clean:
@echo "Cleaning up..."
rm -f server
rm -f *.db
# Docker recipes
# Build Docker image
docker-build:
@echo "Building Docker image: {{image_name}}:{{tag}}"
docker build -t {{image_name}}:{{tag}} .
# Run container with SQLite (development)
docker-run: docker-build
@echo "Running container with SQLite..."
docker run --rm -p 8080:8080 \
-e OA_DATABASE_DRIVER=sqlite \
-e OA_DATABASE_FILE=/app/data/openaccounting.db \
-v $(pwd)/data:/app/data \
{{image_name}}:{{tag}}
# Run container with MySQL (production example)
docker-run-mysql: docker-build
@echo "Running container with MySQL (requires external MySQL)..."
docker run --rm -p 8080:8080 \
-e OA_DATABASE_DRIVER=mysql \
-e OA_DATABASE_ADDRESS=mysql:3306 \
-e OA_DATABASE=openaccounting \
-e OA_USER=openaccounting \
-e OA_PASSWORD=secret \
{{image_name}}:{{tag}}
# Run with docker-compose (if you create one)
docker-compose-up:
@echo "Starting with docker-compose..."
docker-compose up -d
docker-compose-down:
@echo "Stopping docker-compose..."
docker-compose down
# Development utilities
# Format code
fmt:
@echo "Formatting code..."
go fmt ./...
# Lint code (requires golangci-lint)
lint:
@echo "Linting code..."
golangci-lint run
# Install development dependencies
install-deps:
@echo "Installing development dependencies..."
go mod download
go mod vendor
# Update dependencies
update-deps:
@echo "Updating dependencies..."
go get -u ./...
go mod tidy
go mod vendor
# Database utilities
# Create SQLite database directory
init-db:
@echo "Creating database directory..."
mkdir -p data
# Reset SQLite database
reset-db:
@echo "Resetting SQLite database..."
rm -f *.db data/*.db
# Migration recipes
# Run database migrations manually (if needed)
migrate:
@echo "Running database migrations..."
go run ./core/ --migrate-only || echo "Migration command not implemented yet"
# Production utilities
# Build for production
build-prod:
@echo "Building for production..."
CGO_ENABLED=1 GOOS=linux go build -a -installsuffix cgo -ldflags="-w -s" -o server ./core/
# Create release tarball
release: build-prod
@echo "Creating release package..."
tar -czf openaccounting-server-$(date +%Y%m%d).tar.gz server config.json.sample README.md
# Security scan (requires trivy)
security-scan:
@echo "Scanning Docker image for vulnerabilities..."
trivy image {{image_name}}:{{tag}}
# Show configuration help
config-help:
@echo "OpenAccounting Server Configuration:"
@echo ""
@echo "Environment Variables (prefix with OA_):"
@echo " OA_ADDRESS Server address (default: localhost)"
@echo " OA_PORT Server port (default: 8080)"
@echo " OA_API_PREFIX API prefix (default: /api/v1)"
@echo " OA_DATABASE_DRIVER Database driver: sqlite or mysql (default: sqlite)"
@echo " OA_DATABASE_FILE SQLite database file (default: ./openaccounting.db)"
@echo " OA_DATABASE_ADDRESS MySQL address (e.g., localhost:3306)"
@echo " OA_DATABASE MySQL database name"
@echo " OA_USER Database username"
@echo " OA_PASSWORD Database password (recommended for security)"
@echo " OA_MAILGUN_DOMAIN Mailgun domain"
@echo " OA_MAILGUN_KEY Mailgun API key (recommended for security)"
@echo " OA_MAILGUN_EMAIL Mailgun email"
@echo " OA_MAILGUN_SENDER Mailgun sender name"
@echo ""
@echo "Examples:"
@echo " Development: OA_DATABASE_DRIVER=sqlite OA_PORT=8080 ./server"
@echo " Production: OA_DATABASE_DRIVER=mysql OA_PASSWORD=secret ./server"
# All-in-one development setup
dev-setup: install-deps init-db build
@echo "Development setup complete!"
@echo "Run 'just run-dev' to start the server"
# All-in-one production build
prod-build: clean build-prod docker-build
@echo "Production build complete!"
@echo "Run 'just docker-run' to test the container"