# Justfile for mail2couch project # Builds both Go and Rust implementations with distinct binary names # Default recipe default: build # Build both implementations build: build-go build-rust # Build Go implementation as mail2couch-go build-go: @echo "Building Go implementation..." cd go && go build -o mail2couch-go . @echo "✅ Built: go/mail2couch-go" # Build Rust implementation as mail2couch-rs build-rust: @echo "Building Rust implementation..." cd rust && cargo build --release @echo "✅ Built: rust/target/release/mail2couch-rs" # Build optimized release versions build-release: build-go-release build-rust-release # Build optimized Go release build-go-release: @echo "Building optimized Go release..." cd go && go build -ldflags="-s -w" -o mail2couch-go . @echo "✅ Built optimized: go/mail2couch-go" # Build optimized Rust release (already built with --release above) build-rust-release: build-rust # Install binaries to ~/bin (user-local installation) install: build-release @echo "Installing binaries to ~/bin..." mkdir -p ~/bin cp go/mail2couch-go ~/bin/ cp rust/target/release/mail2couch-rs ~/bin/ chmod +x ~/bin/mail2couch-go chmod +x ~/bin/mail2couch-rs @echo "✅ Installed mail2couch-go and mail2couch-rs to ~/bin" @echo "💡 Make sure ~/bin is in your PATH" # Install binaries to /usr/local/bin (system-wide installation, requires sudo) system-install: build-release @echo "Installing binaries to /usr/local/bin..." sudo cp go/mail2couch-go /usr/local/bin/ sudo cp rust/target/release/mail2couch-rs /usr/local/bin/ sudo chmod +x /usr/local/bin/mail2couch-go sudo chmod +x /usr/local/bin/mail2couch-rs @echo "✅ Installed mail2couch-go and mail2couch-rs to /usr/local/bin" # Uninstall binaries from ~/bin uninstall: @echo "Uninstalling binaries from ~/bin..." rm -f ~/bin/mail2couch-go rm -f ~/bin/mail2couch-rs @echo "✅ Uninstalled mail2couch-go and mail2couch-rs from ~/bin" # Uninstall binaries from /usr/local/bin (requires sudo) system-uninstall: @echo "Uninstalling binaries from /usr/local/bin..." sudo rm -f /usr/local/bin/mail2couch-go sudo rm -f /usr/local/bin/mail2couch-rs @echo "✅ Uninstalled mail2couch-go and mail2couch-rs from /usr/local/bin" # Run tests for both implementations test: test-go test-rust # Test Go implementation test-go: @echo "Running Go tests..." cd go && go test ./... # Test Rust implementation test-rust: @echo "Running Rust tests..." cd rust && cargo test # Clean build artifacts clean: @echo "Cleaning build artifacts..." cd go && rm -f mail2couch-go mail2couch cd rust && cargo clean @echo "✅ Cleaned build artifacts" # Check code formatting and linting check: check-go check-rust # Check Go code check-go: @echo "Checking Go code..." cd go && go fmt ./... cd go && go vet ./... # Check Rust code check-rust: @echo "Checking Rust code..." cd rust && cargo fmt --check cd rust && cargo clippy -- -D warnings # Fix code formatting fmt: fmt-go fmt-rust # Format Go code fmt-go: @echo "Formatting Go code..." cd go && go fmt ./... # Format Rust code fmt-rust: @echo "Formatting Rust code..." cd rust && cargo fmt # Development convenience - build and test Go version dev-go: build-go ./go/mail2couch-go --help # Development convenience - build and test Rust version dev-rust: build-rust ./rust/target/release/mail2couch-rs --help # Show binary sizes sizes: build @echo "Binary sizes:" @ls -lh go/mail2couch-go rust/target/release/mail2couch-rs | awk '{print $5 "\t" $9}' # Run both binaries with --version to compare versions: build @echo "Go version:" @./go/mail2couch-go --help | head -1 @echo "" @echo "Rust version:" @./rust/target/release/mail2couch-rs --version # Clean and rebuild everything rebuild: clean build