Contributing to Mistcraft
Welcome Contributors!
Mistcraft is an open-source project and we love contributions from our community! Whether you're fixing bugs, adding features, improving documentation, or helping others, every contribution is valuable.
Ways to Contribute
- Fix bugs and issues
- Add new features
- Improve performance
- Write tests
- Improve existing docs
- Write tutorials
- Add examples
- Fix typos
- Answer questions
- Review PRs
- Report bugs
- Share feedback
- Add cloud providers
- Implement resources
- Test integrations
- Update APIs
Getting Started
Development Setup
# 1. Fork and clone the repository
git clone https://github.com/YOUR_USERNAME/mistcraft.git
cd mistcraft
# 2. Install Rust nightly
rustup install nightly
rustup override set nightly
# 3. Build the project
cargo build
# 4. Run tests
cargo test
# 5. Run a specific crate
cargo run -p mistup -- --help
Project Structure
misting/ | Core resource management library |
mistwrite/ | DSL parser and evaluator |
mistup/ | CLI interface |
mistforge/ | Provider code generator |
providers/ | Cloud provider implementations |
Contribution Process
Step-by-Step Guide
- Find an Issue
Look for issues labeled "good first issue" or "help wanted"
- Create a Branch
Use descriptive names like
fix/memory-leak
orfeat/aws-provider
- Make Changes
Follow the coding style and add tests for new features
- Run Tests
Ensure
cargo test
andcargo clippy
pass - Submit PR
Include a clear description of your changes
Pull Request Guidelines
- Keep PRs focused on a single issue
- Update documentation if needed
- Add tests for new functionality
- Follow the existing code style
- Update CHANGELOG.md if applicable
Code Style
Rust Guidelines
// Use descriptive names
let resource_manager = ResourceManager::new();
// Document public APIs
/// Creates a new deployment with the specified resources
///
/// # Arguments
/// * `resources` - List of resources to deploy
///
/// # Returns
/// Deployment result with status
pub fn deploy(resources: Vec<Resource>) -> Result<Deployment> {
// Implementation
}
// Handle errors properly
match operation() {
Ok(result) => process(result),
Err(e) => log::error!("Operation failed: {}", e),
}
// Use idiomatic Rust
resources
.iter()
.filter(|r| r.is_valid())
.map(|r| r.deploy())
.collect::<Result<Vec<_>>>()?;
Commit Messages
Follow conventional commits format:
feat: Add AWS S3 provider support
fix: Resolve memory leak in state manager
docs: Update quickstart guide
test: Add integration tests for Azure provider
refactor: Simplify deployment logic
Community
Get Help
Need help with your contribution? We're here to help!
Code of Conduct
Please be respectful and inclusive. We're committed to providing a welcoming environment for all contributors.