Thank you for considering contributing to IRIS DevTools! This project embodies years of production experience with InterSystems IRIS, and we welcome contributions that build on that foundation.
This project adheres to the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code.
Bug reports are tracked as GitHub Issues. When creating a bug report:
- Use the bug report template
- Include iris-devtester version, Python version, IRIS edition
- Provide minimal reproduction steps
- Include relevant log output
Feature requests are also tracked as GitHub Issues. When suggesting enhancements:
- Use the feature request template
- Explain the problem this feature would solve
- Describe your proposed solution
- Consider alternatives and trade-offs
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Make your changes following our development guidelines (below)
- Run tests and linters
- Submit a pull request using the PR template
- Python 3.9+
- Docker Desktop
- Git
# Clone repository
git clone https://github.com/intersystems-community/iris-devtester.git
cd iris-devtester
# Install in development mode with all dependencies
pip install -e ".[all,dev,test]"
# Install pre-commit hooks
pre-commit install# All tests
pytest
# Unit tests only (fast)
pytest tests/unit/
# Integration tests only (requires Docker)
pytest tests/integration/
# With coverage report
pytest --cov=iris_devtools --cov-report=htmlThis project uses:
- black (line length 100)
- isort (compatible with black)
- mypy (type checking)
- flake8 (linting)
Run all checks:
black .
isort .
mypy iris_devtools/
flake8 iris_devtools/
pytestPre-commit hooks will run these automatically.
iris_devtools/
├── connections/ # DBAPI/JDBC connection management
├── containers/ # Testcontainers wrapper with auto-remediation
├── testing/ # pytest fixtures and utilities
├── config/ # Configuration discovery
└── cli/ # CLI commands
tests/
├── unit/ # Unit tests (no external dependencies)
├── integration/ # Integration tests (require IRIS container)
└── e2e/ # End-to-end workflow tests
docs/
└── learnings/ # Production insights and "why not X?" docs
- Minimum: 95% overall coverage
- All error paths must be tested
- All public APIs must have tests
- Unit tests: Mock external dependencies (IRIS, Docker)
- Integration tests: Use real IRIS containers via testcontainers
- E2E tests: Full workflow validation
Follow these patterns:
# Unit test example
def test_connection_config_parsing():
"""Unit test - no external dependencies"""
config = ConnectionConfig.from_dict({"host": "localhost"})
assert config.host == "localhost"
# Integration test example
@pytest.mark.integration
def test_iris_connection(iris_container):
"""Integration test - uses real IRIS"""
conn = iris_container.get_connection()
cursor = conn.cursor()
cursor.execute("SELECT 1")
assert cursor.fetchone()[0] == 1All contributions must follow the 8 Constitutional Principles:
- Automatic Remediation Over Manual Intervention - No "run this command" errors
- Choose the Right Tool - DBAPI for SQL, iris.connect() for ObjectScript
- Isolation by Default - Each test gets its own container/namespace
- Zero Configuration Viable -
pip install && pytestmust work - Fail Fast with Guidance - Errors include "what went wrong" + "how to fix it"
- Enterprise Ready, Community Friendly - Support both editions
- Medical-Grade Reliability - 95%+ coverage, all error paths tested
- Document the Blind Alleys - Add to
docs/learnings/when you discover "why not X"
Before submitting a PR, verify your changes align with these principles.
- Primary maintainers listed in pyproject.toml
- Governance model: Benevolent Dictator For Life (BDFL) with community input
- Propose changes via GitHub Issues or Discussions
- Gather community feedback (1-2 weeks for major changes)
- Maintainers make final decision based on:
- Constitutional alignment
- Production evidence
- Community consensus
- Backwards compatibility
- Semantic versioning (MAJOR.MINOR.PATCH)
- CHANGELOG updated for all releases
- Git tags for all versions
- PyPI releases automated via CI
When you discover a "blind alley" (something that didn't work), document it:
- Create
docs/learnings/your-learning.md - Use this template:
# Learning: [Title]
## Problem
[What you were trying to solve]
## What We Tried
[Approach that didn't work]
## Why It Didn't Work
[Root cause, with evidence]
## What We Did Instead
[Successful approach]
## Evidence
[Benchmarks, logs, test results]
## Date
[When this was discovered]- All public APIs need Google-style docstrings
- Include a minimal working example in each docstring
- Document all parameters and return values
- Specify any exceptions raised
- General questions: GitHub Discussions
- Bug reports: GitHub Issues (use template)
- Feature requests: GitHub Issues (use template)
- Security issues: See SECURITY.md
Your contributions make this project better for everyone. Every principle in our constitution was learned through production debugging—your contribution helps others avoid those same pitfalls.