Thank you for your interest in contributing to VASP-ASE!
-
Clone the repository:
git clone https://github.com/jkitchin/vasp.git cd vasp -
Install in development mode:
make install-dev # or manually: pip install -e ".[dev]"
The project uses a Makefile for common development tasks:
# Run all tests
make test
# Run tests with coverage report
make test-coverage# Run linter (ruff)
make lint
# Run type checker (mypy)
make typecheck
# Auto-format code
make format
# Run all checks (lint + typecheck + test)
make check# Build package
make build
# Publish to TestPyPI (for testing)
make publish-test
# Publish to PyPI (production)
make publish# Build Jupyter Book documentation
make docs-build
# Build and serve locally at http://localhost:8000
make docs-serve# Remove build artifacts
make clean
# Remove all generated files including cache
make clean-all# Show version, git status, and uncommitted changes
make status-
Update the version in
pyproject.toml:version = "2.0.1" # Update this
-
Update CHANGELOG (if applicable):
- Add release notes for the new version
-
Commit changes:
git add pyproject.toml CHANGELOG.md git commit -m "Bump version to 2.0.1" git tag v2.0.1 git push origin master --tags -
Test the build locally:
make check # Run all tests and checks -
Test on TestPyPI first (optional but recommended):
make publish-test # Then test installation: pip install --index-url https://test.pypi.org/simple/ vasp-ase -
Publish to PyPI:
make publish
You'll need PyPI credentials. Configure them with:
# Create ~/.pypirc with: [distutils] index-servers = pypi testpypi [pypi] username = __token__ password = pypi-... # Your PyPI API token [testpypi] repository = https://test.pypi.org/legacy/ username = __token__ password = pypi-... # Your TestPyPI API token
Or use environment variables:
export TWINE_USERNAME=__token__ export TWINE_PASSWORD=pypi-...
- Follow PEP 8 style guide
- Use type hints for all function signatures
- Maximum line length: 100 characters
- Run
make formatbefore committing
- Write tests for all new features
- Maintain test coverage above 80%
- Use
MockRunnerfor testing without VASP installed - Place tests in
vasp/tests/
- Update docstrings for any modified functions
- Add examples to docstrings when helpful
- Update Jupyter Book tutorials for new features
- Follow Google-style docstrings
Use clear, descriptive commit messages:
Add support for MLFF calculations
- Implement ML_LMLFF parameter handling
- Add test cases for MLFF workflows
- Update documentation with MLFF example
Open an issue on GitHub or contact the maintainers.