mail2couch/justfile
Ole-Morten Duesund cf41a8c1c5 feat: improve installation system with user-local and system-wide options
Update justfile installation system to provide better user experience:

Installation Improvements:
- `just install` - installs to ~/bin (user-local, no sudo required)
- `just system-install` - installs to /usr/local/bin (system-wide, requires sudo)
- `just uninstall` - removes from ~/bin
- `just system-uninstall` - removes from /usr/local/bin (requires sudo)

Benefits:
- User-local installation by default (follows Unix best practices)
- No sudo required for personal installations
- Clear separation between user and system installs
- Easy uninstallation for both scenarios
- Helpful PATH reminder for ~/bin installation

Documentation Updates:
- Update CLAUDE.md with new installation commands
- Update IMPLEMENTATION_COMPARISON.md deployment examples
- Include uninstall instructions for both methods

This follows modern software distribution practices where user-local
installation is preferred for development tools, with system-wide
installation available when needed for shared environments.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 19:05:30 +02:00

138 lines
No EOL
3.9 KiB
Makefile

# 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