Thank you for your interest in contributing to Effective Office! This document provides guidelines for contributing to the project.
- Code of Conduct
- Development Workflow
- Coding Standards
- Pull Request Process
- Testing Guidelines
- Documentation
- Feature Development Guidelines
- Security Guidelines
- Build Guidelines
We expect all contributors to follow these basic principles:
- Be respectful and inclusive
- Provide constructive feedback
- Focus on what is best for the community
- Show empathy towards other community members
We follow a modified Git Flow branching model. For detailed information, please refer to our Git Flow.
- main: Production-ready code
- develop: Integration branch for features
- feature/: For developing new features
- bugfix/: For fixing non-critical bugs
- hotfix/: For critical fixes
- release/: For preparing releases
-
Create a feature branch from
develop:git checkout develop git pull git checkout -b feature/your-feature-name
-
Work on your feature, committing changes regularly
-
Push your branch to the remote repository
-
Create a Pull Request to merge into
develop
- Follow Kotlin coding conventions for all development
- Use consistent naming patterns across the codebase
- Document public APIs and complex logic
- Ensure no secrets or sensitive information is included in the code
- Maintain the multi-module structure of the project
We follow these conventions for commit messages:
- Start with a type:
feat,fix,docs,style,refactor,test,chore - Use the imperative mood ("Add feature" not "Added feature")
- Keep the first line under 50 characters
- Provide more detailed explanations in subsequent lines if necessary
Example:
feat: Add user authentication system
- Implement JWT token generation
- Add login and registration endpoints
- Create user repository and service
- Update documentation with details of changes if appropriate
- Update version numbers in any examples files and documentation
- Ensure all CI checks pass before requesting a review
- You may merge the Pull Request once you have the sign-off of at least one other developer
Tests can be run using Gradle:
./gradlew testFor specific modules:
./gradlew :backend:app:test
./gradlew :clients:android:test- Write unit tests for all new features
- Ensure existing tests pass before submitting a PR
- Include integration tests for API endpoints
- For KMP modules, write platform-independent tests in
commonTest
For more detailed testing guidelines, see our Wiki: Testing Guidelines.
- Update README files when adding new features or making significant changes
- Document public APIs with KDoc comments
- Keep documentation up-to-date with code changes
- Add comments for complex logic
For comprehensive feature development guidelines, please refer to our Wiki: Feature Development Guidelines.
- Every feature should be implemented as a separate feature module
- Feature modules should be independent and self-contained
- Feature modules should only depend on core modules, not on other feature modules
- New features should be added by creating a new module in the appropriate directory
The project follows Clean Architecture principles:
- Domain Layer: Contains business logic and entities
- Data Layer: Implements repository interfaces from the domain layer
- Presentation Layer: Contains UI components and view models
- Dependencies flow from outer layers to inner layers
- Single Responsibility Principle: Each class should have only one reason to change
- Open/Closed Principle: Software entities should be open for extension but closed for modification
- Liskov Substitution Principle: Objects of a superclass should be replaceable with objects of subclasses without affecting correctness
- Interface Segregation Principle: Many client-specific interfaces are better than one general-purpose interface
- Dependency Inversion Principle: Depend on abstractions, not on concretions
- Never commit sensitive information like API keys or credentials
- Use environment variables for configuration as shown in the .env.example files
- Be aware of the pre-commit hooks that scan for potential secrets using Gitleaks
- Follow secure coding practices to prevent common vulnerabilities
For more information, see our Wiki: Security Guidelines.
Before submitting changes, build the project to ensure it compiles correctly:
./gradlew buildFor specific components, use the appropriate Gradle tasks.
For detailed build instructions, see our Wiki: Build Guidelines.
For more detailed information on any aspect of contributing to Effective Office, please refer to our comprehensive Wiki documentation.
If you have questions or need help with the contribution process, please reach out to the project maintainers:
- Alex Korovyansky
- Matvey Avgul
- Tatyana Terleeva
- Stanislav Radchenko
- Vitaly Smirnov
- Victoria Maksimovna
Thank you for contributing to Effective Office!