Thank you for your interest in contributing to Geti™. This guide will help you understand our project structure, development workflow, and contribution guidelines.
This project and everyone participating in it are governed by the CODE_OF_CONDUCT document. By
participating, you are expected to adhere to this code.
Read the Security Policy.
If you'd like to help improve Geti™, pick one of the issues listed in GitHub Issues and submit a Pull Request to address it. Note: Before you start working on it, please make sure the change hasn’t already been implemented.
If you encounter a bug, please open an issue in Github Issues.
Be sure to include all the information requested in the bug report template to help us understand and resolve the issue
quickly.
Intel welcomes suggestions for new features and improvements. Follow these steps to make a suggestion:
- Check if there's already a similar suggestion in
Github Issues. - If not, please open a new issue and provide the information requested in the feature request template.
Before submitting a pull request, ensure you follow these guidelines:
- Fork the repository and create your branch from
main. - Follow the
Development Guidelinesin this document. - Test your changes thoroughly.
- Document your changes (in code, readme, etc.).
- Submit your pull request, detailing the changes and linking to any relevant issues.
- Wait for a review. Intel will review your pull request as soon as possible and provide you with feedback. You can expect a merge once your changes are validated with automatic tests and approved by maintainers.
Geti™ project is a monorepo designed to support independent development and release of multiple related subprojects while maintaining a cohesive platform. Our architecture allows for flexible and modular development across different components.
├── Makefile.shared-* # Shared build targets for different languages (go, js, python)
├── interactive_ai/ # Group of components
│ ├── services/ # Group-specific libraries
│ ├── workflows/ # Nested group of components
│ ├── libs/ # Nested group of components
│ └── makefile # Group-level build orchestration
├── libs/ # Cross-project shared libraries
└── makefile # Project-level build orchestration
Each component typically includes:
app/: Source codechart/: Helm chart for Kubernetes deploymentDockerfile: Container build specificationsmakefile: Component-specific build targetsversion: Component version tracking file
-
Group-Specific Libraries
- Scoped to specific service groups
- Minimize rebuild dependencies
- Prevent unnecessary cross-component coupling
-
Cross-Project Libraries
- Shared across entire monorepo
- Kept minimal to reduce rebuild impact
- Contains universal utilities and shared resources
Before you begin, ensure you have:
- Local Kubernetes cluster (kind, k3s, or minikube)
- Docker
- Helm (v3+)
- kubectl
- make (optional)
- Clone the repository
- Configure local Docker registry
docker run -d -p 5000:5000 --restart=always --name registry registry:3
- Build and push all images to local registry
# from root of the repository make build-image # to push to local registry make publish-image
- Build and push helm charts
# from root of the repository make build-umbrella-chart # to push to local registry make publish-umbrella-chart
- Install Geti™ on your local machine
# copy installer to directory eq. /tmp/geti cp platform/services/installer/platform_<TAG>/platform_installer /tmp/geti # launch installation and follow prompts cd /tmp/geti ./platform_installer install
# Navigate to the component directory
cd path/to/component
# Build the component
make build-image
# Run tests
make testsclean: Remove build artifactslint: Run linter in "fix" mode to automatically correct code where possiblestatic-code-analysis: Run static analysis/linters in read-only modetest-unit: Run unit teststest-integration: Run integration teststest-component: Run component-specific teststest: Run all types of testscoverage: Run tests and generate a coverage profilebuild: Create binariespublish: Publish artifacts to registriesbuild-image: Build a container imagebuild-chart: Build a helm chartpublish-image: Publish a container imagelint-chart: Lint a helm chartclean-chart: Clean built chartspublish-chart: Publish a helm chartlist-image: List component Docker imageslist-umbrella-chart: List umbrella charts
Please use the sign-off line at the end of the patch. Your signature certifies that you wrote the patch or otherwise have the right to pass it on as an open-source patch. The rules are pretty simple: if you can certify the below (from developercertificate.org):
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
660 York Street, Suite 102,
San Francisco, CA 94110 USA
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
Then you just add a line to every git commit message:
Signed-off-by: Joe Smith <joe.smith@email.com>
Use your real name (sorry, no pseudonyms or anonymous contributions.)
If you set your user.name and user.email git configs, you can sign your
commit automatically with git commit -s.
Geti™ is licensed under the terms in LICENSE. By contributing to the project, you agree to the license and copyright terms therein and release your contribution under these terms.