Thank you for considering contributing to Jasmin Web Panel! This guide will help you get started quickly and ensure a smooth contribution process.
- Code of Conduct
- How to Contribute
- Development Setup
- Coding Standards
- Testing
- Commit Messages
- Pull Request Guidelines
This project follows our Code of Conduct. By participating, you agree to uphold these standards. Please report unacceptable behavior to tarek.it.eng@gmail.com.
- Search existing issues first to avoid duplicates.
- Open a Bug Report with:
- Clear title describing the problem
- Steps to reproduce the issue
- Expected vs actual behavior
- Environment details (OS, Python version, Docker version)
- Relevant logs or screenshots
- Search existing issues/discussions first.
- Open a Feature Request with:
- A clear description of the feature
- The problem it solves
- Potential implementation ideas (optional)
- Fork the repository and create a feature branch:
git checkout -b feature/your-feature-name # or git checkout -b fix/issue-number-short-description - Make your changes following the Coding Standards.
- Write or update tests for your changes.
- Run the test suite and ensure all tests pass.
- Submit a Pull Request.
- Python 3.11+
- Git
- Docker & Docker Compose (recommended)
# Clone your fork
git clone https://github.com/<your-username>/jasmin-web-panel.git
cd jasmin-web-panel
# Create and activate a virtual environment
python3 -m venv env
source env/bin/activate # On Windows: env\Scripts\activate
# Install dependencies (including dev extras)
pip install --upgrade pip wheel uv
uv pip install -r pyproject.toml --extra=dev
# Configure environment
cp sample.env .env
# Edit .env with your local settings (SQLite works fine for development)
# Run database migrations
python manage.py migrate
# Load sample data
python manage.py samples
# Start the development server
python manage.py runservercp sample.env .env
docker compose up -d- Python style: Follow PEP 8. Use
rufforflake8to check your code. - Django conventions: Follow Django's coding style.
- Type hints: Add type hints to new functions and methods where practical.
- Docstrings: Document public functions, classes, and modules.
- Translations: Wrap user-facing strings with
gettext_lazy(_("...")). - Security: Never commit secrets, credentials, or sensitive data. Use environment variables.
The project uses pytest with pytest-django. Run the test suite with:
# Run all tests
make test
# Or directly
DJANGO_SETTINGS_MODULE=config.settings.dev pytest tests/ -vWhen adding a new feature or fixing a bug:
- Add tests in the
tests/directory. - Aim for meaningful test coverage of the new/changed code.
- Tests should be isolated and not require a live Jasmin gateway.
Follow the Conventional Commits specification:
<type>(<scope>): <short summary>
[optional body]
[optional footer(s)]
Types: feat, fix, docs, style, refactor, perf, test, chore, ci
Examples:
feat(api): add rate limiting to REST endpoints
fix(submit_log): handle binary message decoding error
docs(readme): update Docker deployment instructions
chore(deps): upgrade Django to 5.2
- One concern per PR — keep PRs focused on a single feature or fix.
- Link related issues using keywords (
Closes #123,Fixes #456). - Fill in the PR template completely.
- Ensure CI passes — all automated checks must be green.
- Request a review — at least one maintainer review is required before merging.
- Keep the branch up to date with
mainbefore final review.
- My code follows the project's coding standards
- I have added/updated tests for my changes
- All existing tests pass
- I have updated documentation if needed
- The CHANGELOG has been updated (for user-facing changes)
- Telegram: https://t.me/jasminwebpanel
- GitHub Discussions: Start a discussion
- Email: tarek.it.eng@gmail.com
Thank you for contributing! 🎉