Thank you for your interest in contributing to the IPC Protocol!
| Requirement | Version | Purpose |
|---|---|---|
| Go | 1.21+ | Core EIPC build and tests |
| CMake | 3.15+ | C SDK build |
| C compiler | C11 | C SDK (gcc, clang, or MSVC) |
- Fork the repository
- Create a feature branch:
git checkout -b feat/my-feature - Make your changes
- Run the build and tests locally
- Submit a pull request
git clone https://github.com/embeddedos-org/eipc.git
cd eipc
go build ./...
go test -race -v ./...cd sdk/c
mkdir build && cd build
cmake ..
cmake --build .
ctest --output-on-failureAll pull requests must pass the following CI checks before merging:
| Check | Platform | What It Validates |
|---|---|---|
| Build (ubuntu-latest) | Linux | go build, go test -race, go vet |
| Build (windows-latest) | Windows | Cross-platform portability |
| Build (macos-latest) | macOS | Apple platform support |
Before submitting a PR, ensure all checks pass:
# Go SDK
go build ./...
go test -race -v ./...
go vet ./...
gofmt -l .
# C SDK
cd sdk/c && mkdir -p build && cd build
cmake ..
cmake --build .
ctest --output-on-failureThe nightly workflow runs additional checks not required for PRs but monitored for regressions:
- Full test suite with race detector on all 3 OS platforms
- Fuzz testing for protocol codec and security components
- Follow the standard Go Code Review Comments
- Use
gofmtfor formatting - Use
go vetfor static analysis - Export only what is needed; keep internal APIs unexported
- Use meaningful package names (
transport,security,core) - Error messages should start with lowercase and not end with punctuation
- Target C11 standard
- Use snake_case for all identifiers: functions, variables, types
- Prefix all public symbols with
eipc_(e.g.,eipc_frame_encode,eipc_transport_send) - Use
stdint.hfixed-width types (uint8_t,uint32_t) - No dynamic memory allocation in transport-critical paths
- Every public function must have a documentation comment
- Use
//go:build !windowsfor Unix-only code - Use
//go:build windowsfor Windows-only code
- Create a new directory under
transport/(e.g.,transport/quic/) - Implement the
Transportinterface:Listen(),Dial(),Accept(),Close() - Add build tags if the transport is platform-specific
- Register the transport in
transport/registry.go - Add unit tests and integration tests
- Update
README.mdwith transport documentation
Follow Conventional Commits:
feat: add Unix domain socket transport
fix: replay tracker window overflow
docs: add transport integration guide
ci: add fuzz testing to nightly
chore: bump go version to 1.22
-
go build ./...succeeds -
go test -race ./...passes -
go vet ./...clean -
gofmtapplied - C SDK builds and tests pass (if C code changed)
- New features include unit tests
- Platform-specific code uses build tags
- Commit messages follow conventional commits format
- Use GitHub Issues with the appropriate label (
bug,enhancement,question) - Include: OS, Go version, and full error output
- For test failures: attach the full test log
By contributing, you agree that your contributions will be licensed under the MIT License.