#!/bin/bash # Simple Content Manager (Bash) # Uses the enhanced Rust content_processor for all operations set -euo pipefail # Show help information show_help() { cat << 'EOF' Simple Content Manager (Bash) Convenient interface for content operations using the Rust content_processor USAGE: ./content-manager.sh COMMAND [OPTIONS] COMMANDS: build Build all content build-type TYPE Build specific content type (blog, recipes) build-lang LANG Build specific language (en, es) build-category CATEGORY Build specific category build-file FILE Build specific file (supports glob patterns) watch Watch for changes and auto-rebuild clean-build Clean output and rebuild all help Show this help message EXAMPLES: # Build all content ./content-manager.sh build # Build only blog content ./content-manager.sh build-type blog # Build only English content ./content-manager.sh build-lang en # Build specific category ./content-manager.sh build-category rust # Build specific file ./content-manager.sh build-file "blog/en/rust/rust-web-development-2024.md" # Build files with pattern ./content-manager.sh build-file "blog/en/*/rust-*.md" # Watch for changes ./content-manager.sh watch # Clean and rebuild ./content-manager.sh clean-build CONTENT PROCESSOR OPTIONS: The underlying Rust content_processor supports these options: --content-type TYPE Process specific content type --language LANG Process specific language --category CATEGORY Process specific category --file FILE Process specific file(s) with glob support --watch Watch mode for hot reloading GENERATED FILES: post-name.html Markdown content converted to HTML post-name.json Frontmatter data in JSON format index.json Collection index with all posts and metadata NOTES: - All operations use the fast Rust content_processor - Automatically copies generated content to server runtime directory - Respects project configuration-driven architecture - No hardcoded paths or content types EOF } # Run content processor with given arguments run_processor() { local cmd=("cargo" "run" "--features=content-static" "--bin" "content_processor" "--") cmd+=("$@") echo "๐Ÿ”ง Running: ${cmd[*]}" if "${cmd[@]}"; then echo "โœ… Content processing completed!" # Copy to server directory local public_dir="public/r" local server_dir="target/site/r" echo "๐Ÿ“‹ Copying to server directory..." mkdir -p "$server_dir" if [[ -d "$public_dir" ]]; then cp -r "$public_dir"/* "$server_dir/" 2>/dev/null || true echo "โœ… Content copied to server directory" fi else echo "โŒ Content processing failed!" exit 1 fi } # Clean output directory clean_output() { local output_dir="public/r" if [[ -d "$output_dir" ]]; then echo "๐Ÿงน Cleaning output directory: $output_dir" rm -rf "$output_dir" fi mkdir -p "$output_dir" } # Main function main() { local command="${1:-}" if [[ -z "$command" ]] || [[ "$command" == "help" ]] || [[ "$command" == "--help" ]] || [[ "$command" == "-h" ]]; then show_help exit 0 fi case "$command" in "build") echo "๐Ÿš€ Building all content..." run_processor ;; "build-type") if [[ $# -lt 2 ]]; then echo "โŒ build-type requires a content type argument" echo " Example: ./content-manager.sh build-type blog" exit 1 fi local content_type="$2" echo "๐ŸŽฏ Building $content_type content..." run_processor "--content-type" "$content_type" ;; "build-lang") if [[ $# -lt 2 ]]; then echo "โŒ build-lang requires a language argument" echo " Example: ./content-manager.sh build-lang en" exit 1 fi local language="$2" echo "๐ŸŒ Building $language content..." run_processor "--language" "$language" ;; "build-category") if [[ $# -lt 2 ]]; then echo "โŒ build-category requires a category argument" echo " Example: ./content-manager.sh build-category rust" exit 1 fi local category="$2" echo "๐Ÿท๏ธ Building $category category..." run_processor "--category" "$category" ;; "build-file") if [[ $# -lt 2 ]]; then echo "โŒ build-file requires a file pattern argument" echo " Example: ./content-manager.sh build-file \"blog/en/rust/*.md\"" exit 1 fi local file_pattern="$2" echo "๐Ÿ“„ Building file pattern: $file_pattern" run_processor "--file" "$file_pattern" ;; "watch") echo "๐Ÿ‘€ Starting watch mode..." run_processor "--watch" ;; "clean-build") echo "๐Ÿงน Clean build - removing old content..." clean_output run_processor ;; *) echo "โŒ Unknown command: $command" echo "Use 'help' to see available commands" exit 1 ;; esac } # Run main function with all arguments main "$@"