2025-06-30 22:09:00 +12:00
|
|
|
# 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..."
|
2025-07-01 11:22:28 +12:00
|
|
|
OA_DATABASEDRIVER=sqlite OA_DATABASEFILE=./dev.db OA_PORT=8080 ./server
|
2025-06-30 22:09:00 +12:00
|
|
|
|
|
|
|
|
# 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"
|