First off, thank you for considering contributing to Sentinel! It's people like you that make Sentinel such a great tool for the API testing community.
- Code of Conduct
- Getting Started
- How Can I Contribute?
- Development Setup
- Style Guidelines
- Testing Guidelines
- Documentation
- Community
This project and everyone participating in it is governed by the Sentinel Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to the project maintainers.
Sentinel is a comprehensive API testing platform that combines deterministic algorithms with AI-powered testing capabilities. Before contributing, please:
- Read the README.md to understand the project's purpose and architecture
- Review the Memory Bank documentation to understand the system design
- Check the project roadmap to see what's being worked on
- Look through existing issues to avoid duplicates
Before creating bug reports, please check existing issues as you might find out that you don't need to create one. When you are creating a bug report, please include as many details as possible using our bug report template.
How to Submit a Good Bug Report:
Bugs are tracked as GitHub issues. Create an issue and provide the following information:
- Use a clear and descriptive title for the issue to identify the problem
- Describe the exact steps which reproduce the problem in as many details as possible
- Provide specific examples to demonstrate the steps
- Describe the behavior you observed after following the steps
- Explain which behavior you expected to see instead and why
- Include screenshots and animated GIFs if possible
- Include your environment details (OS, Python version, Node.js version, Docker version)
Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion, please include:
- Use a clear and descriptive title for the issue to identify the suggestion
- Provide a step-by-step description of the suggested enhancement
- Provide specific examples to demonstrate the steps
- Describe the current behavior and explain which behavior you expected to see instead
- Explain why this enhancement would be useful to most Sentinel users
- List some other API testing tools where this enhancement exists if applicable
Unsure where to begin contributing? You can start by looking through these issues:
- Issues labeled
good first issue- issues which should only require a few lines of code - Issues labeled
help wanted- issues which need extra attention - Issues labeled
documentation- issues related to improving documentation
The process described here has several goals:
- Maintain Sentinel's quality
- Fix problems that are important to users
- Engage the community in working toward the best possible Sentinel
- Enable a sustainable system for Sentinel's maintainers to review contributions
Please follow these steps to have your contribution considered by the maintainers:
- Fork the repository and create your branch from
main - Follow the branch naming convention:
feature/descriptionorfix/description - If you've added code that should be tested, add tests
- If you've changed APIs, update the documentation
- Ensure the test suite passes by running
pytestin the backend andnpm testin the frontend - Make sure your code lints (see style guidelines below)
- Issue that pull request!
- Python 3.10+
- Node.js 16+
- Docker and Docker Compose
- Rust 1.70+ (for the Rust core)
- Make (for convenient commands)
- Anthropic API Key (for AI features)
-
Clone the repository:
git clone https://github.com/proffesor-for-testing/sentinel-api-testing.git cd sentinel-api-testing -
Set up environment:
export SENTINEL_APP_ANTHROPIC_API_KEY=your-anthropic-api-key -
Complete setup:
make setup # Builds images, initializes database, starts services -
Start the frontend:
cd sentinel_frontend npm install npm start
-
Set up the Python backend:
cd sentinel_backend poetry install # or: pip install -e ".[dev]"
-
Set up the Rust core:
cd sentinel_backend/sentinel_rust_core cargo build -
Start services and initialize database:
docker-compose up -d make init-db # Initializes all tables and columns
make help # Show all available commands
make start # Start all services
make stop # Stop all services
make restart # Restart services
make logs # View service logs
make test # Run tests
make init-db # Initialize/repair database
make reset-db # Reset database (WARNING: data loss)
make status # Check service status- Backend tests:
cd sentinel_backend && pytest - Frontend tests:
cd sentinel_frontend && npm test - Rust tests:
cd sentinel_backend/sentinel_rust_core && cargo test - End-to-end tests:
python test_observability_e2e.py
Follow the guidelines in .clinerules:
- Keep commit messages concise (under 50 characters for the title)
- Use format: "Action: Brief description" (e.g., "Add: Analytics dashboard", "Fix: Database connection")
- Use present tense ("Add feature" not "Added feature")
- Reference issues and pull requests liberally after the first line
Example:
Add: OAuth2 authentication support
- Implement OAuth2 flow in auth service
- Add Google and GitHub providers
- Update frontend login component
- Add tests for OAuth2 endpoints
Fixes #123
We follow PEP 8 with the following additions:
- Use type hints for all function signatures
- Use Pydantic models for data validation
- Use async/await for all I/O operations
- Maximum line length: 100 characters
- Use Black for code formatting:
black sentinel_backend/ - Use isort for import sorting:
isort sentinel_backend/
- Use ES6+ features
- Use functional components and hooks in React
- Use Prettier for formatting:
npm run format - Use ESLint for linting:
npm run lint - Prefer async/await over promises
- Use meaningful variable and function names
- Follow the official Rust style guide
- Use
cargo fmtfor formatting - Use
cargo clippyfor linting - Write idiomatic Rust code
- Document public APIs with doc comments
- Write tests for all new features
- Maintain test coverage above 80%
- Use pytest fixtures for test data
- Mock external dependencies
- Write both unit and integration tests
- Test error cases and edge conditions
- Use descriptive test names
Example test structure:
def test_should_create_test_case_with_valid_data():
"""Test that a test case is created successfully with valid input data."""
# Arrange
test_data = {...}
# Act
result = create_test_case(test_data)
# Assert
assert result.status == "success"
assert result.test_case.name == test_data["name"]- Document all public APIs
- Keep README.md up to date
- Update Memory Bank files when making architectural changes
- Add docstrings to all functions and classes
- Include examples in documentation
- Document configuration options
- Discussions: Use GitHub Discussions for general questions
- Stack Overflow: Tag questions with
sentinel-api-testing
Contributors who make significant contributions will be:
- Added to the CONTRIBUTORS.md file
- Mentioned in release notes
- Given credit in the documentation
- Invited to become maintainers (for sustained contributions)
Feel free to open an issue with the question label or reach out to the maintainers directly.
Thank you for contributing to Sentinel! 🚀