Thank you for your interest in contributing to Template DotNet Tool! We welcome contributions from the community and appreciate your help in making this project better.
This project adheres to a Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior through GitHub.
If you find a bug, please create an issue on GitHub with the following information:
- Description: Clear description of the bug
- Steps to Reproduce: Detailed steps to reproduce the issue
- Expected Behavior: What you expected to happen
- Actual Behavior: What actually happened
- Environment: Operating system, .NET version, Template DotNet Tool version
- Logs: Any relevant error messages or logs
We welcome feature suggestions! Please create an issue on GitHub with:
- Feature Description: Clear description of the proposed feature
- Use Case: Why this feature would be useful
- Proposed Solution: Your ideas on how to implement it (optional)
- Alternatives: Any alternative solutions you've considered (optional)
We follow a standard GitHub workflow for contributions:
- Fork the repository
- Clone your fork locally
- Create a branch for your changes (
git checkout -b feature/my-feature) - Make your changes following our coding standards
- Test your changes thoroughly
- Commit your changes with clear commit messages
- Push to your fork
- Create a Pull Request to the main repository
- .NET SDK 8.0, 9.0, or 10.0
- Git
- A code editor (Visual Studio, VS Code, or Rider recommended)
-
Clone the repository:
git clone https://github.com/demaconsulting/TemplateDotNetTool.git cd TemplateDotNetTool -
Restore dependencies:
dotnet tool restore dotnet restore
-
Build the project:
dotnet build --configuration Release
-
Run unit tests:
dotnet test --configuration Release
- Follow the C# Coding Conventions
- Use clear, descriptive names for variables, methods, and classes
- Write XML documentation comments for all public, internal, and private members
- Keep methods focused and single-purpose
- Write tests for new functionality
This project enforces code style through .editorconfig. Key requirements:
- Indentation: 4 spaces for C#, 2 spaces for YAML/JSON/XML
- Line Endings: LF (Unix-style)
- Encoding: UTF-8
- Namespaces: Use file-scoped namespace declarations
- Braces: Required for all control statements
- Naming Conventions:
- Interfaces:
IInterfaceName - Classes/Structs/Enums:
PascalCase - Methods/Properties:
PascalCase - Parameters/Local Variables:
camelCase
- Interfaces:
All members require XML documentation with proper indentation:
/// <summary>
/// Brief description of what this does.
/// </summary>
/// <param name="parameter">Description of the parameter.</param>
/// <returns>Description of the return value.</returns>
public int ExampleMethod(string parameter)
{
// Implementation
}Note the spaces after /// for proper indentation in summary blocks.
We use MSTest v4 for unit and integration tests.
Use the pattern: ClassName_MethodUnderTest_Scenario_ExpectedBehavior
Examples:
Program_Main_NoArguments_ReturnsSuccessContext_Create_WithInvalidFlag_ThrowsArgumentExceptionValidation_Run_AllTests_ReturnsSuccess
- Write tests that are clear and focused
- Use modern MSTest v4 assertions:
Assert.HasCount(expectedCount, collection)Assert.IsEmpty(collection)Assert.DoesNotContain(item, collection)
- Always clean up resources (use
try/finallyfor console redirection) - Link tests to requirements in
requirements.yamlwhen applicable
# Run all unit tests
dotnet test --configuration Release
# Run specific unit test
dotnet test --filter "FullyQualifiedName~YourTestName"
# Run with coverage
dotnet test --collect "XPlat Code Coverage"# Run self-validation tests
dotnet run --project src/DemaConsulting.TemplateDotNetTool \
--configuration Release --framework net10.0 --no-build -- --validateAll markdown files must follow these rules (enforced by markdownlint):
- Maximum line length: 120 characters
- Use ATX-style headers (
# Header) - Lists must be surrounded by blank lines
- Use reference-style links:
[text][ref]with[ref]: urlat document end - Exceptions:
README.mduses absolute URLs (it's included in the NuGet package)- AI agent markdown files (
.github/agents/*.md) use inline links[text](url)so URLs are visible in agent context
All files are spell-checked using cspell. Add project-specific terms to .cspell.json:
{
"words": [
"myterm"
]
}Before submitting a pull request, ensure all quality checks pass:
# Build the project
dotnet build --configuration Release
# Run unit tests
dotnet test --configuration Release
# Run self-validation tests
dotnet run --project src/DemaConsulting.TemplateDotNetTool --configuration Release --framework net10.0 --no-build -- --validateAll tests must pass with zero warnings.
# These commands run in CI - verify locally if tools are installed
markdownlint-cli2 "**/*.md"
cspell "**/*.{md,cs}"
yamllint -c .yamllint.yaml .Maintain or improve code coverage. Use the --collect "XPlat Code Coverage" option when running tests.
Write clear, concise commit messages:
- Use present tense ("Add feature" not "Added feature")
- Use imperative mood ("Move cursor to..." not "Moves cursor to...")
- Limit first line to 72 characters
- Reference issues and pull requests when applicable
Examples:
Add support for custom report headersFix crash when results file path is invalidUpdate documentation for --report-depth optionRefactor argument parsing for better testability
- Update Documentation: Update relevant documentation for your changes
- Add Tests: Include tests that cover your changes
- Run Quality Checks: Ensure all linters, tests, and builds pass
- Submit PR: Create a pull request with a clear description
- Code Review: Address feedback from maintainers
- Merge: Once approved, a maintainer will merge your PR
When creating a pull request, include:
- Description: What changes does this PR introduce?
- Motivation: Why are these changes needed?
- Related Issues: Link to any related issues
- Testing: How have you tested these changes?
- Checklist:
- Tests added/updated
- Documentation updated
- All tests pass
- Code follows style guidelines
- No new warnings introduced
Template DotNet Tool uses DemaConsulting.ReqStream for requirements traceability:
- All requirements are defined in
requirements.yaml - Each requirement should be linked to test cases
- Run
dotnet reqstreamto generate requirements documentation - Use the
--enforceflag to ensure all requirements have test coverage
Releases are managed by project maintainers. The process includes:
- Version bump in project files
- Tag the release in Git
- Build and test across all supported platforms
- Publish NuGet package
- Create GitHub release with artifacts and release notes
- Questions: Use GitHub Discussions
- Bugs: Report via GitHub Issues
- Security: See SECURITY.md for vulnerability reporting
By contributing to Template DotNet Tool, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing to Template DotNet Tool!