Thank you for considering contributing to Transformalize. This guide covers the basics of setting up a development environment, building, testing, and submitting changes.
- .NET SDK (the CLI targets .NET 10; the core library targets .NET Standard 2.0)
- A C# editor such as Visual Studio, VS Code, or JetBrains Rider
From the repository root:
dotnet buildTo build a specific project:
dotnet build src/Transformalize/Transformalize.csproj
dotnet build src/CLI/CLI.csprojRun all tests:
dotnet testSome integration tests require external databases (SQL Server, PostgreSQL, MySQL, Elasticsearch, etc.). These tests use test containers, so you'll need Docker installed.
- Follow the existing patterns in the codebase.
- The solution uses
LangVersion=latest. - Use the same formatting and naming conventions found in nearby files.
- Prefer
async/awaitfor I/O-bound operations in providers.
- Fork the repository and create a feature branch from
master. - Keep changes focused: one logical change per pull request.
- Include or update tests when applicable.
- Make sure
dotnet buildanddotnet testpass before submitting. - Write a clear PR description explaining what the change does and why.
- Create a new project under
src/Providers/<ProviderName>/. - Implement
IInputProviderand/orIOutputProviderfromTransformalize.Contracts. - Create an Autofac module project (e.g.,
Transformalize.Provider.<Name>.Autofac) that registers your provider. - Add a
README.mdin the provider directory describing configuration and usage. - Reference the Autofac module from the CLI project (
src/CLI/CLI.csproj) if the provider should be included in the CLI tool.
- Create a class in
src/Transformalize/Transforms/that extendsBaseTransform. - Implement
IRow Operate(IRow row)with your transformation logic. - Override
GetSignatures()to return one or moreOperationSignatureinstances that define the method name(s) used in thetattribute. - Register the transform in
src/Containers/Autofac/TransformBuilder.cs.
Use GitHub Issues to report bugs or request features. Include:
- Steps to reproduce the problem
- The arrangement (XML/JSON) you are using (sanitized of secrets)
- Expected vs. actual behavior
- .NET SDK version and operating system
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.