Files
mcp-docx/justfile
T
Andy 705e8bfa91 Add comprehensive release infrastructure and tooling
- Add automated GitHub Actions workflow for multi-platform releases
- Add release script with version management and validation
- Add Docker container support with multi-stage builds
- Add comprehensive release documentation and templates
- Update Cargo.toml with complete package metadata
- Add command-line argument parsing with security options
- Update README with detailed configuration examples

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-11 14:40:53 +08:00

476 lines
13 KiB
Makefile

# Justfile for docx-mcp project
# Usage: just <command>
# Install just: https://github.com/casey/just
# Default recipe
default:
@just --list
# Build the project
build:
cargo build --all-features
# Build for release
build-release:
cargo build --release --all-features
# Run all tests
test:
./scripts/run_tests.sh
# Run only unit tests
test-unit:
./scripts/run_tests.sh --unit-only
# Run only integration tests
test-integration:
./scripts/run_tests.sh --integration-only
# Run all tests including slow ones
test-all:
./scripts/run_tests.sh --all
# Run performance tests
test-performance:
./scripts/run_tests.sh --performance
# Generate coverage report
coverage:
./scripts/run_tests.sh --coverage
# Run benchmarks
bench:
cargo bench --all-features
# Check code formatting
fmt-check:
cargo fmt --all -- --check
# Format code
fmt:
cargo fmt --all
# Run Clippy lints
clippy:
cargo clippy --all-targets --all-features -- -D warnings
# Fix Clippy issues automatically where possible
clippy-fix:
cargo clippy --all-targets --all-features --fix
# Run security audit
audit:
cargo audit
# Check dependencies for issues
deny:
cargo deny check
# Clean build artifacts
clean:
cargo clean
# Update dependencies
update:
cargo update
# Install development tools
install-dev-tools:
cargo install cargo-audit cargo-deny cargo-llvm-cov
# Run the application in development mode
dev:
RUST_LOG=debug cargo run --all-features
# Run the application in release mode
run:
cargo run --release --all-features
# Generate documentation
docs:
cargo doc --all-features --no-deps --open
# Check documentation
docs-check:
cargo doc --all-features --no-deps
# Package the project for distribution
package:
cargo package
# Publish to crates.io (dry run)
publish-dry:
cargo publish --dry-run
# Publish to crates.io
publish:
cargo publish
# Docker build
docker-build:
docker build -t docx-mcp:latest .
# Docker run
docker-run:
docker run -p 8080:8080 docx-mcp:latest
# Run pre-commit checks (formatting, linting, tests)
pre-commit: fmt-check clippy test-unit
# Full CI pipeline simulation
ci: pre-commit test audit
# Quick development cycle (format, build, test)
dev-cycle: fmt build test-unit
# Setup development environment
setup:
rustup component add rustfmt clippy llvm-tools-preview
just install-dev-tools
# Generate sample documents for testing
generate-samples:
cargo run --bin generate-test-docs --features=test-utils
# Run stress tests
stress-test:
STRESS_TEST=1 cargo test --release --test performance_tests -- --ignored --test-threads=1
# Profile the application
profile:
cargo build --release --all-features
perf record -g target/release/docx-mcp
perf report
# Memory usage analysis
memory-check:
cargo build --all-features
valgrind --tool=memcheck --leak-check=full target/debug/docx-mcp
# Run with different Rust versions (requires rustup)
test-msrv:
rustup install 1.70.0
rustup run 1.70.0 cargo test
# Check for outdated dependencies
outdated:
cargo install cargo-outdated
cargo outdated
# Security scan
security-scan: audit deny
# Performance profiling with flamegraph
flamegraph:
cargo install flamegraph
cargo flamegraph --bin docx-mcp
# Generate changelog (requires git-cliff)
changelog:
git cliff --output CHANGELOG.md
# Release commands using the release script
# Create a patch release (0.1.0 -> 0.1.1)
release-patch:
./scripts/release.sh patch
# Create a minor release (0.1.0 -> 0.2.0)
release-minor:
./scripts/release.sh minor
# Create a major release (0.1.0 -> 1.0.0)
release-major:
./scripts/release.sh major
# Create a specific version release
release-version version:
./scripts/release.sh version {{version}}
# Dry run of patch release (see what would happen)
release-patch-dry:
./scripts/release.sh patch --dry-run
# Dry run of minor release
release-minor-dry:
./scripts/release.sh minor --dry-run
# Dry run of major release
release-major-dry:
./scripts/release.sh major --dry-run
# Dry run of specific version release
release-version-dry version:
./scripts/release.sh version {{version}} --dry-run
# Run all pre-release checks
release-check:
./scripts/release.sh check
# Generate changelog since last tag
release-changelog:
./scripts/release.sh changelog
# Create git tag for current version
release-tag:
./scripts/release.sh tag
# Prepare a release (legacy command - use release-* commands above)
prepare-release version:
@echo "⚠️ This command is deprecated. Use 'just release-version {{version}}' instead."
@echo "The new release commands provide better automation and safety checks."
@echo ""
@echo "Available release commands:"
@echo " just release-patch - Bump patch version"
@echo " just release-minor - Bump minor version"
@echo " just release-major - Bump major version"
@echo " just release-version X.Y.Z - Set specific version"
# Show project statistics
stats:
@echo "=== Project Statistics ==="
@echo "Lines of code:"
@find src -name "*.rs" -type f -exec wc -l {} + | tail -n 1
@echo ""
@echo "Test coverage:"
@just coverage --quiet | grep "Overall coverage" || echo "Run 'just coverage' first"
@echo ""
@echo "Dependencies:"
@cargo tree --depth 1 | wc -l
@echo ""
@echo "Binary size (release):"
@if [ -f "target/release/docx-mcp" ]; then ls -lh target/release/docx-mcp | awk '{print $5}'; else echo "Run 'just build-release' first"; fi
# Watch for changes and run tests
watch:
cargo install cargo-watch
cargo watch -x "test --lib"
# Watch for changes and run specific test
watch-test test_name:
cargo watch -x "test {{test_name}}"
# Initialize git hooks
init-hooks:
#!/usr/bin/env bash
cat > .git/hooks/pre-commit << 'EOF'
#!/bin/bash
just pre-commit
EOF
chmod +x .git/hooks/pre-commit
echo "Pre-commit hook installed"
# Remove git hooks
remove-hooks:
rm -f .git/hooks/pre-commit
echo "Pre-commit hook removed"
# Docker commands
# Build multi-platform Docker image
docker-build-multiarch:
docker buildx create --use --name multiarch || true
docker buildx build --platform linux/amd64,linux/arm64 -t docx-mcp:latest .
# Build and tag Docker image for release
docker-build-release version:
docker buildx build --platform linux/amd64,linux/arm64 \
-t docx-mcp:{{version}} \
-t docx-mcp:latest \
-t ghcr.io/hongkongkiwi/docx-mcp:{{version}} \
-t ghcr.io/hongkongkiwi/docx-mcp:latest \
.
# Push Docker images to registry
docker-push version:
docker push docx-mcp:{{version}}
docker push docx-mcp:latest
docker push ghcr.io/hongkongkiwi/docx-mcp:{{version}}
docker push ghcr.io/hongkongkiwi/docx-mcp:latest
# Run Docker container with volume mount for testing
docker-test:
docker run --rm -it -v $(pwd)/test-docs:/test-docs docx-mcp:latest
# Development environment commands
# Full development setup from scratch
dev-setup:
# Install Rust if not present
@if ! command -v rustup >/dev/null 2>&1; then \
echo "Installing Rust..."; \
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y; \
source ~/.cargo/env; \
fi
# Setup toolchain and tools
just setup
# Initialize git hooks
just init-hooks
# Build project
just build
echo "✅ Development environment ready!"
# Check system dependencies
check-deps:
@echo "=== System Dependencies Check ==="
@echo "Checking required tools..."
@command -v rustc >/dev/null && echo "✅ Rust compiler found" || echo "❌ Rust compiler not found"
@command -v cargo >/dev/null && echo "✅ Cargo found" || echo "❌ Cargo not found"
@command -v git >/dev/null && echo "✅ Git found" || echo "❌ Git not found"
@command -v docker >/dev/null && echo "✅ Docker found" || echo "❌ Docker not found"
@command -v just >/dev/null && echo "✅ Just found" || echo "❌ Just not found"
@echo ""
@echo "Optional tools:"
@command -v libreoffice >/dev/null && echo "✅ LibreOffice found" || echo "⚠️ LibreOffice not found (optional)"
@command -v pdftoppm >/dev/null && echo "✅ pdftoppm found" || echo "⚠️ pdftoppm not found (optional)"
@command -v convert >/dev/null && echo "✅ ImageMagick convert found" || echo "⚠️ ImageMagick not found (optional)"
# Cross-compilation commands
# Build for all supported targets
build-all-targets:
# Install targets if not present
rustup target add x86_64-unknown-linux-gnu
rustup target add x86_64-unknown-linux-musl
rustup target add aarch64-unknown-linux-gnu
rustup target add x86_64-apple-darwin
rustup target add aarch64-apple-darwin
rustup target add x86_64-pc-windows-msvc
# Build for each target
cargo build --release --target x86_64-unknown-linux-gnu --all-features
cargo build --release --target x86_64-unknown-linux-musl --all-features
cargo build --release --target x86_64-apple-darwin --all-features
@echo "✅ Built for all available targets"
# Build using cross for Linux targets
build-cross-linux:
cargo install cross --git https://github.com/cross-rs/cross
cross build --release --target x86_64-unknown-linux-gnu --all-features
cross build --release --target x86_64-unknown-linux-musl --all-features
cross build --release --target aarch64-unknown-linux-gnu --all-features
cross build --release --target aarch64-unknown-linux-musl --all-features
# Maintenance commands
# Update all dependencies to latest versions
update-deps:
cargo update
cargo outdated --depth 1
# Check for security vulnerabilities and update
security-update:
cargo audit fix
cargo update
# Clean everything (including registry cache)
clean-all:
cargo clean
rm -rf ~/.cargo/registry/cache
rm -rf ~/.cargo/git/db
docker system prune -f
# Backup project (excluding target and build artifacts)
backup:
#!/usr/bin/env bash
BACKUP_NAME="docx-mcp-backup-$(date +%Y%m%d-%H%M%S)"
tar czf "${BACKUP_NAME}.tar.gz" \
--exclude='target' \
--exclude='.git' \
--exclude='*.log' \
--exclude='*.tmp' \
.
echo "✅ Backup created: ${BACKUP_NAME}.tar.gz"
# Development workflows
# Quick development loop (format, build, test unit, lint)
dev-loop:
just fmt
just build
just test-unit
just clippy
# Full quality check (everything CI runs)
quality-check:
just fmt-check
just clippy
just test
just docs-check
just audit
just deny
# Continuous development with file watching
dev-watch:
cargo install cargo-watch
cargo watch -w src -w tests -x "build" -x "test --lib"
# Performance analysis
perf-analysis:
# Build optimized release
cargo build --release --all-features
# Run criterion benchmarks
cargo bench --all-features
# Generate flamegraph if available
@if command -v flamegraph >/dev/null 2>&1; then \
echo "Generating flamegraph..."; \
cargo flamegraph --bin docx-mcp -- --help; \
fi
# MCP-specific commands
# Test MCP server functionality
test-mcp:
@echo "Testing MCP server..."
# Build the server
cargo build --release --all-features
# Run basic functionality test
python3 example/test_client.py || echo "❌ MCP test failed"
# Generate MCP documentation
mcp-docs:
@echo "Generating MCP server documentation..."
cargo run --bin docx-mcp -- --help > docs/CLI_REFERENCE.md
@echo "✅ CLI reference updated"
# Example commands
# Run all examples
run-examples:
@echo "Running all examples..."
@if [ -f example/test_client.py ]; then python3 example/test_client.py; fi
@if [ -f example/automation_example.py ]; then python3 example/automation_example.py; fi
# Generate test documents
gen-test-docs:
@echo "Generating test documents..."
mkdir -p test-docs
# You could add commands here to generate various test DOCX files
# Utility commands
# Show detailed project info
info:
@echo "=== Project Information ==="
@echo "Name: docx-mcp"
@echo "Version: $(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/')"
@echo "Rust version: $(rustc --version)"
@echo "Cargo version: $(cargo --version)"
@echo ""
just stats
# List all available commands with descriptions
help:
@echo "=== Available Commands ==="
@just --list
@echo ""
@echo "=== Release Commands ==="
@echo " release-patch - Create patch release (0.1.0 -> 0.1.1)"
@echo " release-minor - Create minor release (0.1.0 -> 0.2.0)"
@echo " release-major - Create major release (0.1.0 -> 1.0.0)"
@echo " release-version X - Create specific version release"
@echo " release-*-dry - Dry run versions of above commands"
@echo ""
@echo "=== Development Workflows ==="
@echo " dev-loop - Quick development cycle"
@echo " quality-check - Full quality assessment"
@echo " dev-setup - Complete development environment setup"