Thank you for helping build PipeForge! This guide explains how to propose a change, how to set up a development environment and what a pull request needs before it can be merged.
- Small fixes (typos, obvious bugs, missing tests) can go straight to a pull request.
- New features, new plugins and any change to
pipeforge-api, the wire protocol or the checkpoint format start with a feature proposal issue. Agree on the direction first, then write the code. - Questions belong in GitHub Discussions, not in issues.
You need JDK 21 (see .java-version), Docker, and Node.js with pnpm for the UI and the
documentation site. Everything else comes through the Maven Wrapper.
./mvnw verify # full build with every quality gate
./mvnw -Pquick install # fast build without formatting, static analysis and coverage
./mvnw -pl pipeforge-api verify # build and test a single module
./dev/up.sh # start the local services (databases, object storage, ...)- Java is formatted by Spotless with palantir-java-format, and checked by Error Prone and
SpotBugs. Run
./mvnw spotless:applybefore committing. - Frontend code uses ESLint and Prettier; run
pnpm lint:fix. - Every source file starts with the MIT license header.
./mvnw spotless:applyadds it to Java files andtools/license-header/check.sh --fixto every other file type. - User-visible errors carry a registered error code; logs are in English and never contain secrets.
- English Conventional Commits:
feat,fix,perf,refactor,test,docs,build,ci,chore, with the module name as scope, for examplefeat(connector-fake): add fake source. - One commit does one thing and builds and passes its tests on its own.
- Each plugin is exactly one commit that contains its tests and its documentation page.
- Breaking changes say
BREAKING CHANGE: ...in the commit body.
New features and bug fixes come with tests. Plugins must pass the connector testkit and the acceptance criteria of the plugin catalog. Changes to the distributed protocol add a chaos test scenario.
Every user-visible feature updates the documentation site in the same commit, in both
English and Chinese. If a change really needs no documentation, end the commit message with
Docs-Not-Needed: <reason>; reviewers check that the reason holds.
- Generate the project skeleton.
- Implement the plugin and make it pass the testkit.
- Write the plugin page for the documentation site.
- Register the plugin in the plugin catalog.
- Open a pull request.
Third-party plugins may also live in their own repository and apply for a listing in the plugin repository index.
- At least one maintainer approves. Changes to
pipeforge-api, the protocol or the checkpoint format need two maintainers. - CI must be green (the
ci-okcheck). - Pull requests are merged with rebase so that every commit is kept.