Thank you for your interest in contributing to Power Platform Developer Suite! This document provides guidelines for contributing to the project.
- .NET SDK 8.0+
- Node.js 20+ (for extension development)
- PowerShell 7+ (for scripts)
- Git
-
Clone the repository:
git clone https://github.com/joshsmithxrm/power-platform-developer-suite.git cd power-platform-developer-suite -
Open the workspace in VS Code (recommended):
code ppds.code-workspace
-
Build the solution:
dotnet build PPDS.sln
-
Run unit tests:
dotnet test --filter Category!=Integration
main- Protected branch, always deployablefeat/*- New featuresfix/*- Bug fixeschore/*- Maintenance tasks
Create a branch from main for your work:
git checkout -b feat/your-feature-name- Make your changes in small, focused commits
- Follow existing code patterns and conventions
- Add or update tests for your changes
- Ensure all tests pass before submitting a PR
| Test Category | Command | When to Run |
|---|---|---|
| Unit tests | dotnet test --filter Category!=Integration |
Before every commit |
| TUI tests | dotnet test --filter Category=TuiUnit |
When modifying TUI code |
| Integration tests | dotnet test --filter Category=Integration |
Requires Dataverse connection |
The pre-commit hook automatically runs unit tests (~10s).
- Create a PR targeting
main - Fill out the PR template with:
- Summary of changes
- Test plan
- Related issues (use
Closes #Non separate lines)
- Wait for CI - All checks must pass
- Address review feedback - Respond to comments and make requested changes
- Squash and merge - Once approved
- Keep PRs focused - one feature/fix per PR
- Include tests for new functionality
- Update documentation if needed
- Don't commit files with secrets (.env, credentials.json)
- Use file-scoped namespaces
- Use early-bound entity classes (not late-bound
Entity) - Use
EntityLogicalNameandFields.*constants - Add XML documentation to public APIs
- Follow patterns in existing code
| Pattern | Reference |
|---|---|
| Connection pooling | ServiceClientPool.cs |
| Bulk operations | BulkOperationExecutor.cs |
| CLI output | src/PPDS.Cli/Services/ |
| Application services | src/PPDS.Cli/Services/ |
- Creating new
ServiceClientper request (use pooling) - Magic strings for entity names
Console.WriteLinefor status (useConsole.Error.WriteLine)- Hardcoded paths or GUIDs
power-platform-developer-suite/
├── src/
│ ├── PPDS.Plugins/ # Plugin attributes
│ ├── PPDS.Dataverse/ # Connection pooling, bulk ops
│ ├── PPDS.Migration/ # Data migration engine
│ ├── PPDS.Auth/ # Authentication profiles
│ ├── PPDS.Cli/ # CLI tool + TUI
│ ├── PPDS.Mcp/ # MCP server
│ └── PPDS.Extension/ # VS Code extension
├── tests/ # Test projects
├── specs/ # Feature specifications
└── templates/claude/ # Claude Code integration
- Questions: Open a Discussion
- Bugs: Open an Issue
- Architecture: Check
specs/for design decisions
By contributing, you agree that your contributions will be licensed under the MIT License.