We welcome contributions to the Python Environment Manager (PEM)!
-
Clone the repository:
git clone https://github.com/freddiedfre/python-env-manager.git cd python-env-manager -
Install the project locally:
make install
-
Install development dependencies:
# For unit testing brew install bats-core # macOS sudo apt-get install bats # Ubuntu/Debian # For code coverage (optional) brew install kcov # macOS sudo apt-get install kcov # Ubuntu/Debian
-
Run tests to verify setup:
make test-all
We follow Conventional Commits:
<type>(<scope>): <description>
[optional body]
[optional footer]
- feat: New feature
- fix: Bug fix
- docs: Documentation changes
- chore: Maintenance tasks
- refactor: Code restructuring
- test: Adding or updating tests
- ci: CI/CD changes
feat(init): add support for custom Python versions
fix(doctor): correct venv detection on macOS
docs(readme): update installation instructions
chore(release): bump version to v1.1.0
- Fork the repository
- Create a branch from
mainusing naming convention:feat/descriptionfor featuresfix/descriptionfor bug fixesdocs/descriptionfor documentation
- Make your changes following the coding style
- Add tests for new functionality
- Run tests:
make test-all - Run linting:
make lint - Commit with conventional commit messages
- Push to your fork
- Open a Pull Request with:
- Clear description of changes
- Reference to related issues
- Screenshots for UI changes
- Follow the existing style in the codebase
- Use
snake_casefor variables and functions - Add comments for complex logic
- Use shellcheck for linting
# Good
my_function() {
local param="$1"
log_info "Processing: $param"
}
# Bad
MyFunction() {
P=$1
echo "Processing: $P"
}- Write unit tests for new library functions in
tests/unit/ - Write integration tests for new commands in
tests/integration/ - Aim for ≥80% code coverage
- Use descriptive test names
@test "function_name handles empty input gracefully" {
run my_function ""
[[ "$status" -ne 0 ]]
[[ "$output" =~ "error" ]]
}Add appropriate labels to your PR for automatic changelog generation:
feat/feature- New featuresfix/bugfix- Bug fixesdocs- Documentation updateschore- Maintenancebreaking/major- Breaking changessecurity- Security-related changes
The labels determine version bumping:
major/breaking→ v2.0.0minor/feat→ v1.1.0patch/fix→ v1.0.1
All submissions require review. We use GitHub pull requests for this purpose.
Reviewers will check for:
- Code quality and style
- Test coverage
- Documentation updates
- Breaking changes properly communicated
- Performance impact
Open an issue or discussion on GitHub!