Thank you for your interest in contributing to LicenseView! This document provides guidelines for contributions.
Be respectful, inclusive, and professional in all interactions.
- Check existing issues - Your bug may already be reported
- Open a new issue with:
- Clear title describing the issue
- Steps to reproduce
- Expected vs actual behavior
- Environment details (OS, PowerShell/Python version, Zerto version)
- Relevant log excerpts (redact credentials!)
- Check existing feature requests - Similar ideas may exist
- Open a new issue labeled "enhancement" with:
- Use case description
- Proposed solution
- Alternative approaches considered
- Potential impact on existing functionality
# Clone your fork
git clone https://github.com/YOUR-USERNAME/licenseview.git
cd licenseview
# Create feature branch
git checkout -b feature/my-awesome-feature
# Copy config template
cp config.example.yaml config.yaml
# (Edit config.yaml with test ZVM details)PowerShell:
- Follow PowerShell Best Practices
- Run PSScriptAnalyzer before committing:
Invoke-ScriptAnalyzer -Path . -Recurse
- Use approved verbs (
Get-,Set-,New-, etc.) - Document parameters with comment-based help
Python:
- Follow PEP 8 style guide
- Format with
black:black src/ tests/
- Lint with
flake8:flake8 src/ tests/
- Type hints encouraged (validated with
mypy)
General:
- Write clear commit messages (present tense, imperative mood)
- Keep commits focused and atomic
- Update tests for new functionality
- Update documentation for user-facing changes
PowerShell:
# Run all tests
Invoke-Pester ./tests -Output Detailed
# Run specific test file
Invoke-Pester ./tests/ps/Test-ZertoAuth.Tests.ps1Python:
# Run all tests
pytest tests/
# Run with coverage
pytest tests/ --cov=src/py/zerto --cov-report=htmlIntegration Testing:
- Use mocked Zerto API responses (
tests/fixtures/mock_zvm_responses.json) - Never commit test credentials
- Test both Zerto 10.x and pre-10.x authentication paths
- Verify TLS validation behavior
-
Update your branch with latest main:
git fetch upstream git rebase upstream/main
-
Run all tests and ensure they pass
-
Create pull request with:
- Clear title describing the change
- Description of what changed and why
- Link to related issues (e.g., "Fixes #123")
- Screenshots for UI changes
- Confirmation that tests pass
-
Respond to feedback - Maintainers may request changes
-
Squash commits if requested before merge
src/
ps/ # PowerShell modules
Zerto.Auth.psm1 # Authentication
Zerto.Api.psm1 # API client
Zerto.Data.psm1 # Data transformation
Zerto.Output.psm1 # Report generation
py/ # Python package (mirrors PS structure)
zerto/
auth.py
api.py
data.py
output.py
tests/
ps/ # PowerShell Pester tests
py/ # Python pytest tests
fixtures/ # Mock API responses
- Module changes: Edit appropriate module in
src/ps/orsrc/py/ - Add tests: Create test file in
tests/ps/ortests/py/ - Update docs: Modify README.md if user-facing
- Add fixtures: Update
tests/fixtures/with new API response examples
PowerShell verbose output:
./zerto-licensing-report.ps1 -Config ./config.yaml -VerbosePython debug logging:
python main.py --config ./config.yaml --verboseCheck generated logs:
logs/report.log
-
Update API client (
Zerto.Api.psm1orapi.py):function Get-ZertoNewEndpoint { param($AuthContext) $url = "$($AuthContext.ZvmUrl)/v1/newdata" Invoke-ZertoApiCall -Url $url -AuthContext $AuthContext }
-
Add mock response to
tests/fixtures/mock_zvm_responses.json:{ "endpoint": "/v1/newdata", "response": { "data": "example" } } -
Update data transformation (
Zerto.Data.psm1ordata.py) -
Add to report output (
Zerto.Output.psm1oroutput.py) -
Write tests for new functionality
When adding features that differ between Zerto versions:
if ($ZertoVersion -ge [Version]"10.0") {
# Zerto 10.x logic
} else {
# Pre-10.x fallback
}PowerShell:
<#
.SYNOPSIS
Brief description
.DESCRIPTION
Detailed description
.PARAMETER ParamName
Parameter description
.EXAMPLE
Get-Example -ParamName "value"
Description of example
.NOTES
Additional information
#>Python:
def function_name(param: str) -> dict:
"""Brief description.
Detailed description.
Args:
param: Parameter description
Returns:
Dictionary containing result
Raises:
ValueError: When validation fails
"""Update these files when making user-facing changes:
- README.md - Quick start, usage examples
- TLS_SETUP_GUIDE.md - Certificate configuration
- SECURITY.md - Security best practices
- CHANGELOG.md - Version history
(For maintainers)
- Update
CHANGELOG.mdwith version and changes - Tag release:
git tag -a v1.2.0 -m "Release 1.2.0" - Push tags:
git push origin v1.2.0 - Create GitHub release with notes from CHANGELOG
- General questions: Open a GitHub Discussion
- Bug reports: Open a GitHub Issue
- Security concerns: See SECURITY.md
- Collaboration: Email aaron.lastoff@gmail.com
Aaron Lastoff
- 📧 Email: aaron.lastoff@gmail.com
- 🐙 GitHub: @AaronLastoff
- 💼 Open to collaboration, feature discussions, and code reviews!
By contributing, you agree that your contributions will be licensed under the MIT License.