Skip to content

Latest commit

 

History

History
223 lines (165 loc) · 4.61 KB

File metadata and controls

223 lines (165 loc) · 4.61 KB

Contributing to fastcert

Thank you for considering contributing to fastcert! This document provides guidelines and instructions for contributing.

Code of Conduct

This project adheres to a code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior.

How Can I Contribute?

Reporting Bugs

Before creating bug reports, please check existing issues to avoid duplicates. When creating a bug report, include:

  • A clear and descriptive title
  • Exact steps to reproduce the problem
  • Expected behavior vs actual behavior
  • Your environment (OS, Rust version, fastcert version)
  • Any relevant error messages or logs

Suggesting Enhancements

Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion, include:

  • A clear and descriptive title
  • Detailed description of the proposed functionality
  • Explain why this enhancement would be useful
  • List any similar features in other tools

Pull Requests

  1. Fork the repository
  2. Create a new branch for your feature or fix
  3. Make your changes
  4. Add tests for your changes
  5. Ensure all tests pass
  6. Update documentation if needed
  7. Submit a pull request

Development Setup

Prerequisites

  • Rust 1.70 or later
  • Cargo
  • Git

Building from Source

git clone https://github.com/yourusername/fastcert.git
cd fastcert
cargo build

Running Tests

# Run all tests
cargo test

# Run with output
cargo test -- --nocapture

# Run specific test
cargo test test_name

Code Style

This project uses standard Rust formatting:

# Format code
cargo fmt

# Check formatting
cargo fmt -- --check

# Run clippy for lints
cargo clippy

# Fix clippy suggestions
cargo clippy --fix

Commit Messages

  • Use clear and descriptive commit messages
  • Start with a verb in present tense (e.g., "add", "fix", "update")
  • Keep the first line under 72 characters
  • Reference issues and pull requests when relevant

Good examples:

  • "add support for custom validity periods"
  • "fix certificate generation for wildcard domains"
  • "update README with installation instructions"

Avoid:

  • "fixed stuff"
  • "updates"
  • "WIP"

Project Structure

fastcert/
├── src/
│   ├── main.rs          # CLI entry point
│   ├── lib.rs           # Library exports
│   ├── ca.rs            # CA management
│   ├── cert.rs          # Certificate generation
│   ├── error.rs         # Error types
│   ├── fileutil.rs      # File utilities
│   └── truststore/      # Trust store integrations
│       ├── mod.rs
│       ├── macos.rs
│       ├── linux.rs
│       ├── windows.rs
│       ├── nss.rs
│       └── java.rs
├── tests/               # Integration tests
├── Cargo.toml          # Dependencies
└── README.md           # Documentation

Testing

Unit Tests

Add unit tests in the same file as the code:

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_something() {
        // Your test here
    }
}

Integration Tests

Add integration tests in the tests/ directory:

use fastcert;

#[test]
fn test_full_workflow() {
    // Your integration test here
}

Platform-Specific Testing

Some features are platform-specific. Use conditional compilation:

#[cfg(target_os = "macos")]
#[test]
fn test_macos_feature() {
    // macOS-specific test
}

Documentation

  • Add doc comments to all public APIs
  • Update README.md for user-facing changes
  • Include examples in doc comments
  • Keep documentation clear and concise

Example:

/// Generates a new certificate for the specified domains.
///
/// # Arguments
///
/// * `domains` - A list of domain names or IP addresses
/// * `ecdsa` - Whether to use ECDSA instead of RSA
///
/// # Examples
///
/// ```
/// use fastcert::cert::generate_certificate;
///
/// generate_certificate(&["example.com"], None, None, None, false, false, false)?;
/// ```
pub fn generate_certificate(domains: &[String], ...) -> Result<()> {
    // Implementation
}

Release Process

  1. Update version in Cargo.toml
  2. Update CHANGELOG.md
  3. Create a git tag
  4. Push tag to trigger release

Platform Support

When adding features, consider:

  • macOS compatibility
  • Linux compatibility (multiple distros)
  • Windows compatibility
  • Graceful degradation when features aren't available

Getting Help

  • Open an issue for questions
  • Check existing issues and pull requests
  • Review the README and documentation

License

By contributing, you agree that your contributions will be licensed under the MIT License.