Thank you for your interest in contributing to proc! This document provides guidelines and instructions for contributing.
By participating in this project, you agree to abide by our Code of Conduct.
Before creating a bug report, please check the existing issues to see if the problem has already been reported.
When creating a bug report, please include:
-
Environment details:
- Operating system and version
- Rust version (
rustc --version) - proc version (
proc --version)
-
Steps to reproduce:
- What commands did you run?
- What did you expect to happen?
- What actually happened?
-
Additional context:
- Error messages (full output)
- Screenshots if applicable
Feature suggestions are welcome! Please create an issue with:
- A clear description of the feature
- Use cases and examples
- Any alternatives you've considered
-
Fork the repository and create your branch from
main -
Set up the development environment:
git clone https://github.com/yazeed/proc cd proc cargo build -
Make your changes:
- Write clear, concise commit messages
- Add tests for new functionality
- Update documentation as needed
-
Run the test suite:
cargo test cargo fmt -- --check cargo clippy -- -D warnings -
Submit a pull request:
- Provide a clear description of the changes
- Reference any related issues
- Rust 1.70 or later
- Git
# Debug build
cargo build
# Release build
cargo build --release
# Run tests
cargo test
# Run with verbose output
cargo test -- --nocaptureWe follow standard Rust conventions:
# Format code
cargo fmt
# Check formatting
cargo fmt -- --check
# Run linter
cargo clippy -- -D warningsproc/
├── src/
│ ├── main.rs # CLI entry point
│ ├── lib.rs # Library exports
│ ├── error.rs # Error types
│ ├── commands/ # Command implementations
│ │ ├── mod.rs
│ │ ├── find.rs
│ │ ├── on.rs
│ │ ├── ports.rs
│ │ ├── kill.rs
│ │ └── stuck.rs
│ ├── core/ # Core abstractions
│ │ ├── mod.rs
│ │ ├── process.rs
│ │ └── port.rs
│ └── ui/ # Output formatting
│ ├── mod.rs
│ └── output.rs
├── tests/ # Integration tests
├── Cargo.toml
└── README.md
Look for issues labeled good first issue - these are great starting points:
- Documentation improvements
- Error message enhancements
- Test coverage improvements
- Platform-specific bug fixes
- Performance optimizations
- Output formatting improvements
- New commands
- Cross-platform compatibility
- Advanced features (watch mode, process trees)
# Run all tests
cargo test
# Run specific test
cargo test test_find_all_processes
# Run tests with output
cargo test -- --nocapture- Unit tests go in the same file as the code being tested
- Integration tests go in the
tests/directory - Use descriptive test names
Example:
#[test]
fn test_find_process_by_name() {
let processes = Process::find_by_name("cargo").unwrap();
assert!(!processes.is_empty());
}Follow conventional commit format:
type(scope): description
[optional body]
[optional footer]
Types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting)refactor: Code refactoringtest: Adding or updating testschore: Maintenance tasks
Examples:
feat(commands): add proc watch command
fix(ports): handle IPv6 addresses correctly
docs: update installation instructions
Releases are managed by maintainers. The process:
- Update version in
Cargo.toml - Update
CHANGELOG.md - Create a git tag
- GitHub Actions builds and publishes releases
- Open a Discussion for questions
- Join our community chat (if available)
- Reach out to maintainers
Thank you for contributing to proc!