This guide helps AI assistants (LLMs / Agents) make safe, consistent, and verifiable changes to the Apache SeaTunnel codebase. It mirrors practices from mature Apache projects and adapts them to SeaTunnel’s build, testing, architecture, and documentation conventions.
Agents MUST run verification commands locally before suggesting or finalizing changes.
# Format code (mandatory) ./mvnw spotless:apply # Quick verification (mandatory) ./mvnw -q -DskipTests verify # Unit tests (strongly recommended) ./mvnw test
Failure to meet these requirements will likely result in PR rejection.
SeaTunnel follows a strict commit message format to maintain a clean and searchable history.
Format:
[Type][Module] Description
Feature – New featuresFix – Bug fixesImprove – Improvements to existing behaviorDocs – Documentation-only changesTest – Test cases or test framework changesChore – Build, dependency, or maintenance tasksConnector-V2 – seatunnel-connectors-v2Zeta – seatunnel-engine (Zeta engine)Core – seatunnel-coreAPI – seatunnel-apiTransform-V2 – seatunnel-transforms-v2Format – seatunnel-formatsTranslation – seatunnel-translationE2E – seatunnel-e2e[Fix][Connector-V2] Fix MySQL source split enumeration bug[Fix][Zeta] Fix checkpoint timeout under heavy backpressure[Feature][Transform-V2] Add LLM transform plugin[Improve][Core] Optimize jar package loading speed[Docs] Update quick start guideseatunnel/ ├── seatunnel-api/ # Core API definitions ├── seatunnel-connectors-v2/ # Source & Sink connectors (main contribution area) ├── seatunnel-transforms-v2/ # Transform plugins (including LLM) ├── seatunnel-engine/ # Zeta engine & Web UI ├── seatunnel-core/ # Job submission & CLI entry points ├── seatunnel-translation/ # Flink & Spark adapters ├── seatunnel-formats/ # Data formats (JSON, Avro, etc.) ├── seatunnel-e2e/ # End-to-End integration tests ├── docs/ # Documentation (en & zh) └── config/ # Default configurations
org.apache.seatunnel.shade.*/** * Enumerates source splits for parallel reading. * Called once during job initialization. * * @param context Split enumeration context * @return Collection of discovered splits */ @Override public List<SourceSplit> enumerateSplits(SplitEnumerationContext context) { // Implementation }
All new files MUST include the ASF license header:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
Agents MUST treat backward compatibility as a hard constraint.
Any incompatible change MUST:
docs/en/introduction/concepts/incompatible-changes.mdorg.apache.seatunnel.shade.*SeaTunnelSource or SeaTunnelSinkOptionSourceSplitEnumeratorRespect task boundaries and lifecycle semantics.
OptionAny user-visible change MUST update:
docs/endocs/zhConfig names, defaults, and examples MUST match the code exactly
Documentation is part of the feature, not an afterthought
src/test/javaCommand:
./mvnw test
seatunnel-e2eTestSuiteBaseCommand:
./mvnw -DskipUT -DskipIT=false verify
Agents MUST consider performance implications:
./mvnw clean install -DskipTests -Dskip.spotless=true
sh bin/install-plugin.sh $current_version
sh bin/seatunnel.sh --config config/v2.batch.config.template -e local