Thank you for your interest in contributing to Teckel! This guide covers the development setup, testing, code style, and release process.
- JDK 8 or 11 (CI runs against both)
- sbt (Scala Build Tool)
- Scala 2.13.12
-
Clone the repository:
git clone https://github.com/eff3ct0/teckel.git cd teckel -
Compile the project:
sbt compile
-
Build the CLI uber JAR:
sbt cli/assembly
The project is organized into the following modules:
model --> serializer --> api --> cli
\-------> semantic -->/
- model: Core data types (
Asset,Source, transformations) - serializer: YAML parsing via Circe + FS2
- semantic: ETL execution engine
- api: Public library API
- cli: Command-line entry point
- example: Reference implementations
Run all tests with coverage:
sbt clean coverage test coverageReport coverageAggregateRun tests for a specific module:
sbt "api/test"
sbt "serializer/test"
sbt "semantic/test"Tests run forked and non-parallel. The test framework is ScalaTest with Spark Testing Base. The coverage minimum is currently set at 30%.
This project uses scalafmt for code formatting and sbt-header for license headers.
Before submitting a pull request, run:
sbt headerCreateAll scalafmtAllThis ensures all files have the MIT license header and are formatted consistently.
Releases are published to Maven Central via sbt-ci-release and are triggered by version tags.
- The CI pipeline (GitHub Actions) runs tests on both Java 8 and Java 11.
- Coverage reports are sent to Codecov.
- When a version tag is pushed (e.g.,
v1.0.0),sbt ci-releaseautomatically:- Determines the version from the git tag
- Publishes artifacts to Maven Central via Sonatype
- Signs artifacts with GPG
The project's publication metadata is configured in project/SonatypePublish.scala:
- Organization:
com.eff3ct - Homepage: https://github.com/eff3ct0/teckel
- License: MIT
- SCM: https://github.com/eff3ct0/teckel
- Ensure all tests pass on the
masterbranch. - Tag the commit with a version:
git tag v1.0.0 git push origin v1.0.0
- The CI pipeline will handle the rest.
Commits to master without a version tag produce SNAPSHOT versions that are not published to Maven Central.
- Fork the repository and create a feature branch.
- Make your changes and ensure tests pass.
- Run
sbt headerCreateAll scalafmtAllto format code. - Open a pull request against the
masterbranch. - Provide a clear description of the changes and their purpose.
If you find a bug or have a feature request, please create an issue on GitHub. Provide as much detail as possible to help us address it.
Reference ETL configurations are available in docs/etl/ for various transformation types (simple, complex, join, window, etc.). These serve as documentation and can be used for manual testing.