Thank you for your interest in contributing! This document provides guidelines for contributing to the project.
- Node.js >= 20.0.0
- npm or yarn
- Git
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/reviewflow.git cd reviewflow - Install dependencies:
npm install
- Copy the example configuration:
cp .env.example .env cp config.example.json config.json
- Run tests to verify setup:
npm test
npm run dev # Start with hot reload
npm test # Run tests in watch mode
npm run build # Build for productionBefore submitting a PR, ensure:
- TypeScript compiles:
npm run typecheck - Tests pass:
npm run test:ci - No linting errors: Code follows project conventions
We use Conventional Commits:
feat: add new webhook handler for GitHub Actions
fix: correct signature verification for empty payloads
docs: update deployment guide
refactor: extract platform adapter interface
test: add unit tests for queue service
-
Create a feature branch:
git checkout -b feat/my-feature
-
Make your changes following the coding guidelines
-
Write tests for new functionality
-
Update documentation if needed
-
Submit a PR with a clear description:
- What does this PR do?
- Why is this change needed?
- How was it tested?
- Tests added/updated
- Documentation updated (if applicable)
- TypeScript compiles without errors
- All tests pass
- Commit messages follow conventions
This project follows Clean Architecture principles:
src/
├── entities/ # Domain layer (business logic)
├── usecases/ # Application layer (orchestration)
├── interface-adapters/ # Adapters (controllers, gateways, presenters)
├── main/ # Composition root (DI, server setup)
└── services/ # Infrastructure services
- Dependency Rule: Dependencies point inward (outer layers depend on inner)
- Gateway Pattern: External access through interfaces
- No business logic in adapters: Adapters only transform data
- Tests are located in
src/tests/mirroring the source structure - Use factories from
src/tests/factories/for test data - Use stubs from
src/tests/stubs/for external dependencies - Write tests in English
describe('MyService', () => {
describe('when condition', () => {
it('should expected behavior', () => {
// Arrange
// Act
// Assert
});
});
});- Open an issue for bugs or feature requests
- Check existing issues before creating new ones
- Be respectful and constructive in discussions
By contributing, you agree that your contributions will be licensed under the MIT License.