feat: Add CI/CD workflows for testing and publishing SAL crates
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Test Publishing Setup / Test Publishing Setup (pull_request) Has been cancelled
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Test Publishing Setup / Test Publishing Setup (pull_request) Has been cancelled
				
			- Add a workflow for testing the publishing setup - Add a workflow for publishing SAL crates to crates.io - Improve crate metadata and version management - Add optional dependencies for modularity - Improve documentation for publishing and usage
This commit is contained in:
		
							
								
								
									
										171
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										171
									
								
								README.md
									
									
									
									
									
								
							| @@ -22,6 +22,158 @@ This workspace structure provides excellent build performance, dependency manage | ||||
| - **Modular Architecture**: Each module is independently maintainable while sharing common infrastructure | ||||
| - **Production Ready**: 100% test coverage with comprehensive Rhai integration tests | ||||
|  | ||||
| ## 📦 Installation | ||||
|  | ||||
| SAL is designed to be modular - install only the components you need! | ||||
|  | ||||
| ### Option 1: Individual Crates (Recommended) | ||||
|  | ||||
| Install only the modules you need: | ||||
|  | ||||
| ```bash | ||||
| # Core system operations | ||||
| cargo add sal-os sal-process sal-text sal-net | ||||
|  | ||||
| # Database clients | ||||
| cargo add sal-redisclient sal-postgresclient | ||||
|  | ||||
| # Infrastructure tools | ||||
| cargo add sal-git sal-vault sal-kubernetes sal-virt | ||||
|  | ||||
| # Service clients | ||||
| cargo add sal-zinit-client sal-mycelium | ||||
|  | ||||
| # Scripting support | ||||
| cargo add sal-rhai | ||||
| ``` | ||||
|  | ||||
| ### Option 2: Meta-crate with Features | ||||
|  | ||||
| Use the main `sal` crate with specific features: | ||||
|  | ||||
| ```bash | ||||
| # Install specific modules | ||||
| cargo add sal --features os,process,text | ||||
|  | ||||
| # Install feature groups | ||||
| cargo add sal --features core              # os, process, text, net | ||||
| cargo add sal --features clients           # redisclient, postgresclient, zinit_client, mycelium | ||||
| cargo add sal --features infrastructure    # git, vault, kubernetes, virt | ||||
| cargo add sal --features scripting         # rhai | ||||
|  | ||||
| # Install everything | ||||
| cargo add sal --features all | ||||
| ``` | ||||
|  | ||||
| ### Quick Start Examples | ||||
|  | ||||
| #### Using Individual Crates (Recommended) | ||||
|  | ||||
| ```rust | ||||
| use sal_os::fs; | ||||
| use sal_process::run; | ||||
|  | ||||
| fn main() -> Result<(), Box<dyn std::error::Error>> { | ||||
|     // File system operations | ||||
|     let files = fs::list_files(".")?; | ||||
|     println!("Found {} files", files.len()); | ||||
|  | ||||
|     // Process execution | ||||
|     let result = run::command("echo hello")?; | ||||
|     println!("Output: {}", result.stdout); | ||||
|  | ||||
|     Ok(()) | ||||
| } | ||||
| ``` | ||||
|  | ||||
| #### Using Meta-crate with Features | ||||
|  | ||||
| ```rust | ||||
| // In Cargo.toml: sal = { version = "0.1.0", features = ["os", "process"] } | ||||
| use sal::os::fs; | ||||
| use sal::process::run; | ||||
|  | ||||
| fn main() -> Result<(), Box<dyn std::error::Error>> { | ||||
|     // File system operations | ||||
|     let files = fs::list_files(".")?; | ||||
|     println!("Found {} files", files.len()); | ||||
|  | ||||
|     // Process execution | ||||
|     let result = run::command("echo hello")?; | ||||
|     println!("Output: {}", result.stdout); | ||||
|  | ||||
|     Ok(()) | ||||
| } | ||||
| ``` | ||||
|  | ||||
| #### Using Herodo for Scripting | ||||
|  | ||||
| ```bash | ||||
| # Build and install herodo | ||||
| git clone https://github.com/PlanetFirst/sal.git | ||||
| cd sal | ||||
| ./build_herodo.sh | ||||
|  | ||||
| # Create a script file | ||||
| cat > example.rhai << 'EOF' | ||||
| // File operations | ||||
| let files = find_files(".", "*.rs"); | ||||
| print("Found " + files.len() + " Rust files"); | ||||
|  | ||||
| // Process execution | ||||
| let result = run("echo 'Hello from SAL!'"); | ||||
| print("Output: " + result.stdout); | ||||
|  | ||||
| // Network operations | ||||
| let reachable = http_check("https://github.com"); | ||||
| print("GitHub reachable: " + reachable); | ||||
| EOF | ||||
|  | ||||
| # Execute the script | ||||
| herodo example.rhai | ||||
| ``` | ||||
|  | ||||
| ## 📦 Available Packages | ||||
|  | ||||
| SAL is published as individual crates, allowing you to install only what you need: | ||||
|  | ||||
| | Package | Description | Install Command | | ||||
| |---------|-------------|-----------------| | ||||
| | [`sal-os`](https://crates.io/crates/sal-os) | Operating system operations | `cargo add sal-os` | | ||||
| | [`sal-process`](https://crates.io/crates/sal-process) | Process management | `cargo add sal-process` | | ||||
| | [`sal-text`](https://crates.io/crates/sal-text) | Text processing utilities | `cargo add sal-text` | | ||||
| | [`sal-net`](https://crates.io/crates/sal-net) | Network operations | `cargo add sal-net` | | ||||
| | [`sal-git`](https://crates.io/crates/sal-git) | Git repository management | `cargo add sal-git` | | ||||
| | [`sal-vault`](https://crates.io/crates/sal-vault) | Cryptographic operations | `cargo add sal-vault` | | ||||
| | [`sal-kubernetes`](https://crates.io/crates/sal-kubernetes) | Kubernetes management | `cargo add sal-kubernetes` | | ||||
| | [`sal-virt`](https://crates.io/crates/sal-virt) | Virtualization tools | `cargo add sal-virt` | | ||||
| | `sal-redisclient` | Redis database client | `cargo add sal-redisclient` ⏳ | | ||||
| | `sal-postgresclient` | PostgreSQL client | `cargo add sal-postgresclient` ⏳ | | ||||
| | `sal-zinit-client` | Zinit process supervisor | `cargo add sal-zinit-client` ⏳ | | ||||
| | `sal-mycelium` | Mycelium network client | `cargo add sal-mycelium` ⏳ | | ||||
| | `sal-rhai` | Rhai scripting integration | `cargo add sal-rhai` ⏳ | | ||||
| | `sal` | Meta-crate with features | `cargo add sal --features all` ⏳ | | ||||
| | `herodo` | Script executor binary | Build from source ⏳ | | ||||
|  | ||||
| **Legend**: ✅ Published | ⏳ Publishing soon (rate limited) | ||||
|  | ||||
| ### 📢 **Publishing Status** | ||||
|  | ||||
| **Currently Available on crates.io:** | ||||
| - ✅ [`sal-os`](https://crates.io/crates/sal-os) - Operating system operations | ||||
| - ✅ [`sal-text`](https://crates.io/crates/sal-text) - Text processing utilities | ||||
| - ✅ [`sal-net`](https://crates.io/crates/sal-net) - Network operations | ||||
| - ✅ [`sal-git`](https://crates.io/crates/sal-git) - Git repository management | ||||
| - ✅ [`sal-vault`](https://crates.io/crates/sal-vault) - Cryptographic operations | ||||
| - ✅ [`sal-kubernetes`](https://crates.io/crates/sal-kubernetes) - Kubernetes management | ||||
|  | ||||
| **Publishing Soon** (hit crates.io rate limit): | ||||
| - ⏳ `sal-redisclient`, `sal-postgresclient`, `sal-zinit-client`, `sal-mycelium` | ||||
| - ⏳ `sal-process`, `sal-virt`, `sal-rhai` | ||||
| - ⏳ `sal` (meta-crate), `herodo` (binary) | ||||
|  | ||||
| **Estimated Timeline**: Remaining packages will be published within 24 hours once the rate limit resets. | ||||
|  | ||||
| ## Core Features | ||||
|  | ||||
| SAL offers a broad spectrum of functionalities, including: | ||||
| @@ -150,6 +302,25 @@ async fn main() { | ||||
| ``` | ||||
| *(Note: The Redis client API might have evolved; please refer to `src/redisclient/mod.rs` and its documentation for the most current usage.)* | ||||
|  | ||||
| ## 🎯 **Why Choose SAL?** | ||||
|  | ||||
| ### **Modular Architecture** | ||||
| - **Install Only What You Need**: Each package is independent - no bloated dependencies | ||||
| - **Faster Compilation**: Smaller dependency trees mean faster build times | ||||
| - **Smaller Binaries**: Only include the functionality you actually use | ||||
| - **Clear Dependencies**: Explicit about what functionality your project uses | ||||
|  | ||||
| ### **Developer Experience** | ||||
| - **Consistent APIs**: All packages follow the same design patterns and conventions | ||||
| - **Comprehensive Documentation**: Each package has detailed documentation and examples | ||||
| - **Real-World Tested**: All functionality is production-tested, no placeholder code | ||||
| - **Type Safety**: Leverages Rust's type system for safe, reliable operations | ||||
|  | ||||
| ### **Scripting Power** | ||||
| - **Herodo Integration**: Execute Rhai scripts with full access to SAL functionality | ||||
| - **Cross-Platform**: Works consistently across Windows, macOS, and Linux | ||||
| - **Automation Ready**: Perfect for DevOps, CI/CD, and system administration tasks | ||||
|  | ||||
| ## 📦 **Workspace Modules Overview** | ||||
|  | ||||
| SAL is organized as a Cargo workspace with the following crates: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user