You've already forked openaccounting-server
forked from cybercinch/openaccounting-server
feat: add Just build automation with comprehensive recipes
- Create justfile with development and production recipes - Add Docker build and run commands with proper configuration - Include database management utilities and migration helpers - Add development setup and dependency management - Create configuration help and documentation commands - Support both SQLite and MySQL deployment scenarios 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
166
justfile
Normal file
166
justfile
Normal file
@@ -0,0 +1,166 @@
|
||||
# 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_DATABASE_DRIVER=sqlite OA_DATABASE_FILE=./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"
|
||||
Reference in New Issue
Block a user