Thank you for your interest in contributing to the Automated Job Intelligence Profiling System (AJIPS)! We welcome contributions from the community.
- Code of Conduct
- Getting Started
- Development Workflow
- Code Standards
- Testing Guidelines
- Documentation
- Pull Request Process
- Release Process
- Community
This project and everyone participating in it is governed by our Code of Conduct. By participating, you are expected to uphold this code.
- Python 3.8 or higher
- Git
- Virtual environment tool (venv, conda, or virtualenv)
# 1. Fork the repository on GitHub
# 2. Clone your fork
git clone https://github.com/YOUR_USERNAME/Auto-JIPS.git
cd Auto-JIPS
# 3. Create and activate virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# 4. Install dependencies
pip install -r requirements.txt
pip install -r requirements-dev.txt # Development dependencies
pip install -e .
# 5. Install pre-commit hooks (recommended)
pre-commit install
# 6. Verify setup
pytest tests/ -v# Create a feature branch
git checkout -b feature/your-feature-name
# Or create a bug fix branch
git checkout -b fix/issue-descriptionBranch Naming Conventions:
feature/description- New featuresfix/description- Bug fixesdocs/description- Documentation updatesrefactor/description- Code refactoringtest/description- Test additions/updates
- Write clear, maintainable code
- Follow our code style guidelines
- Add tests for new functionality
- Update documentation as needed
# Stage changes
git add .
# Commit with descriptive message
git commit -m "feat: add salary extraction for hourly rates
- Implement regex patterns for hourly salary formats
- Add tests for various hourly rate formats
- Update documentation"Commit Message Format (Conventional Commits):
feat:- New featurefix:- Bug fixdocs:- Documentation onlystyle:- Code style changes (formatting, semicolons, etc.)refactor:- Code refactoringtest:- Adding or updating testschore:- Maintenance tasks
# Push to your fork
git push origin feature/your-feature-name
# Create a Pull Request on GitHubWe follow PEP 8 with some modifications:
# Use type hints
def extract_salary(text: str) -> Optional[Dict[str, int]]:
"""
Extract salary information from job posting text.
Args:
text: Job posting text to analyze
Returns:
Dictionary with 'min' and 'max' salary values, or None if not found
Example:
>>> extract_salary("Salary: $50,000 - $100,000")
{'min': 50000, 'max': 100000}
"""
# Implementation here
passBefore committing, run:
# Format code
black ajips/ tests/
# Sort imports
isort ajips/ tests/
# Lint code
flake8 ajips/ tests/ --max-line-length=127
# Type checking (if using mypy)
mypy ajips/
# Run tests
pytest tests/ -v --cov=ajipsWe use pre-commit to ensure code quality:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- id: check-merge-conflict
- repo: https://github.com/psf/black
rev: 23.3.0
hooks:
- id: black
language_version: python3
- repo: https://github.com/pycqa/isort
rev: 5.12.0
hooks:
- id: isort
- repo: https://github.com/pycqa/flake8
rev: 6.0.0
hooks:
- id: flake8
args: ['--max-line-length=127']# tests/test_feature.py
import pytest
from ajips.app.services.extraction import extract_salary_range
class TestSalaryExtraction:
"""Test suite for salary extraction functionality."""
def test_salary_range_dollar_format(self):
"""Test extraction of salary range in dollar format."""
text = "We offer a salary of $50,000 to $100,000 per year"
result = extract_salary_range(text)
assert result is not None
assert result["min"] == 50000
assert result["max"] == 100000
@pytest.mark.parametrize("input_text,expected_min,expected_max", [
("$50k-$100k", 50000, 100000),
("$75,000", 75000, 75000),
])
def test_salary_parametrized(self, input_text, expected_min, expected_max):
"""Test various salary formats."""
result = extract_salary_range(input_text)
assert result["min"] == expected_min
assert result["max"] == expected_max# Run all tests
pytest tests/ -v
# Run with coverage
pytest tests/ --cov=ajips --cov-report=html
# Run specific test file
pytest tests/test_extraction.py -v
# Run specific test class
pytest tests/test_extraction.py::TestSalaryExtraction -v
# Run specific test method
pytest tests/test_extraction.py::TestSalaryExtraction::test_salary_range -v
# Run with verbose output and show locals on failure
pytest tests/ -v --tb=short --showlocalsAim for:
- Minimum 80% overall coverage
- 100% coverage for critical paths
- All edge cases covered
Use Google-style docstrings:
def function_name(param1: str, param2: int = 0) -> bool:
"""
Brief description of the function.
Longer description if needed, explaining the purpose,
behavior, and any important details.
Args:
param1: Description of param1
param2: Description of param2. Defaults to 0.
Returns:
Description of return value
Raises:
ValueError: When param1 is invalid
TypeError: When param2 is not an integer
Example:
>>> function_name("test", 5)
True
"""When adding features:
- Update the main README.md
- Add examples if applicable
- Update API documentation
- Add to CHANGELOG.md
-
Ensure tests pass
pytest tests/ -v --cov=ajips
-
Update documentation
- README.md
- Docstrings
- CHANGELOG.md
-
Fill out the PR template completely
-
Request review
- At least one maintainer approval required
- Address review comments
- Keep discussions constructive
-
Merge
- Squash and merge for clean history
- Delete branch after merge
- Update version in
pyproject.toml - Update CHANGELOG.md
- Create a new release on GitHub
- Tag with semantic version (e.g.,
v1.2.0) - CI/CD will deploy automatically
- GitHub Issues: Bug reports and feature requests
- GitHub Discussions: Questions and general discussion
- Stack Overflow: Tag questions with
ajips
Contributors will be:
- Listed in CONTRIBUTORS.md
- Mentioned in release notes
- Added to the project's Hall of Fame (for significant contributions)
We especially welcome contributions in:
- Additional job board integrations
- Machine learning model improvements
- Performance optimizations
- Documentation and tutorials
- Bug fixes and testing
- UI/UX enhancements
When reporting bugs, please include:
- Clear description of the bug
- Steps to reproduce
- Expected behavior
- Actual behavior
- Environment details (OS, Python version, AJIPS version)
- Logs or error messages
- Sample input that triggers the bug
For feature requests:
- Check existing issues first
- Describe the use case
- Explain the benefits
- Propose implementation (optional)
By contributing to AJIPS, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing to AJIPS! 🚀