We welcome contributions to FaceOFFx! This document provides guidelines for contributing to the project.
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/mistial-dev/FaceOFFx.git - Create a new branch for your feature:
git checkout -b feature/your-feature-name - Make your changes following the guidelines below
- Submit a pull request
- .NET 8.0 SDK or later
- Visual Studio 2022, VS Code, or JetBrains Rider
- Git
# Clone the repository
git clone https://github.com/mistial-dev/FaceOFFx.git
cd FaceOFFx
# Build the solution
dotnet build
# Run tests
dotnet test
# Run the CLI
dotnet run --project src/FaceOFFx.Cli -- process sample.jpg- Use C# 12.0 features where appropriate
- Enable nullable reference types
- Follow functional programming patterns (Result<T>, Maybe<T>)
- No nulls in domain models - use Maybe<T> for optional values
- Direct dependencies - use libraries directly without wrapper abstractions
- Use the .editorconfig settings provided
- Run
dotnet formatbefore committing - Use meaningful variable and method names
- Keep methods focused and small
- Write unit tests for all public methods
- Use AwesomeAssertions for test assertions
- Follow the existing test structure and naming conventions
- Ensure all tests pass before submitting PR
- Add XML documentation comments to all public APIs
- Keep comments concise and meaningful
- Update README.md if adding new features
-
Before submitting:
- Ensure all tests pass:
dotnet test - Run code formatting:
dotnet format - Update documentation if needed
- Add/update tests for new functionality
- Ensure all tests pass:
-
PR Guidelines:
- Create a descriptive title
- Reference any related issues
- Describe what changes you made and why
- Include screenshots for UI changes
- Keep PRs focused - one feature/fix per PR
-
Review Process:
- PRs require at least one approval
- Address review feedback promptly
- Keep discussions professional and constructive
When reporting issues, please include:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- System information (OS, .NET version)
- Sample code or images if applicable
- Error messages or stack traces
We welcome feature requests! Please:
- Check existing issues first
- Describe the use case clearly
- Explain why this feature would be valuable
- Consider submitting a PR if you can implement it
- Be respectful and inclusive
- Welcome newcomers and help them get started
- Accept constructive criticism gracefully
- Focus on what's best for the community
- Show empathy towards others
- Harassment, discrimination, or personal attacks
- Trolling or inflammatory comments
- Publishing private information without consent
- Any conduct that could be considered inappropriate
- Keep domain models in Core project
- No external dependencies in Core (except CSharpFunctionalExtensions)
- Use value objects for domain concepts
- Keep business logic in domain models
- Dependencies flow inward (Infrastructure → Core)
- Use interfaces for external dependencies
- Keep frameworks at the edges
- Separate concerns clearly
- Use Result<T> for operations that can fail
- Provide meaningful error messages
- Fail fast with descriptive errors
- Log errors appropriately
- Update version numbers in project files
- Update CHANGELOG.md with release notes
- Create a git tag:
git tag v1.0.0 - Push tag:
git push origin v1.0.0 - GitHub Actions will build and publish to NuGet
If you have questions, feel free to:
- Open an issue for discussion
- Join our community discussions
- Check existing documentation
Thank you for contributing to FaceOFFx!