Obtaining Code and Contributing Changes#
This document describes the steps a developer should take to make a change, testing that change, then submitting the change for review and integration into the Edge Orchestrator.
There are two primary types of repositories in the Edge Orchestrator:
Component Repos, which generally contain the code that makes up a service, an edge node agent, or other supplemental configuration like Helm* charts that deploy services.
Deployment Repos, which are used to deploy the Edge Orchestrator. Currently the only repo of this type is the Edge Manageability Framework
The steps required for making and validating changes to each of these types of repositories will differ and is described below.
Overview#
The following is list of steps required to make a change in a component repo and integrate the change into the Edge Orchestrator deployment, along with the approvals required.
Obtaining source code - how to fork and obtain the Edge Orchestrator code from GitHub* repository.
Making changes in a component repo - making changes to a single component or service.
Testing deployment changes - How to test the service components by deploying them in a local deployment.
Submitting changes to a component repo - Creating a pull request, code review, and CI run on the repo
Submitting deployment changes - Similar to #4, submitting a change via pull request to the EMF repo.
If you are only making changes to the edge-manageability-framework
deployment repo, you only need to follow steps 1, 3, and 5.
Obtaining Source Code#
All Edge Orchestrator codebase is stored in the open-edge-platform GitHub Organization.
In this example the following repos will be used:
infra-core - A component repo that contains service source code.
infra-charts - Another component repo that contains Helm charts that provide deployment configuration for services. Not all components have a separation of service code from Helm charts - many integrate into a single repository.
edge-manageability-framework - Contains the deployment code for the whole Edge Orchestrator, which integrates the services.
In this example the GitHub username is YOUR-USERNAME
.
Create a GitHub fork of the repos - see GitHub repository’s “Fork a repository” instructions.
From your development system, clone the forked repo (replacing
YOUR-USERNAME
):git clone git@github.com/YOUR-USERNAME/infra-core git clone git@github.com/YOUR-USERNAME/infra-charts git clone git@github.com/YOUR-USERNAME/edge-manageability-framework
Making Changes in a Component Repo#
Each repo has instructions on how to build and test changes. Most components
repos follow the process described in Local and CI Workflow using make, and have targets
for make lint
, make build
, and make test
, among others.
See the README in each repo for specific instructions on prerequisite software, such as compilers and other tooling, and any other required resources.
You likely will need to increment the version of the component, the instructions for which can be found in Versioning.
When making a commit, follow the Conventional Commits specification when making a commit message, so reviewers can identify if this is a fix, adding a feature, or something else.
If the service and chart repos are separate you would need to make two pull
requests to integrate a component change. In the example above, you would need
to make one PR in github.com/YOUR-USERNAME/infra-core
with the service
changes, submit that code and have it merged, then another separate PR in
github.com/YOUR-USERNAME/infra-charts
with chart changes
Once you’ve tested your changes and have incremented the version, you should
create local copies of artifacts - using the make docker-build
or similar
to create a Docker* container image, which are then used to test in a deployed
Edge Orchestrator.
Testing Deployment Changes#
To test deployment changes, you need to have a development environment set up and have already deployed an instance of the Edge Orchestrator, which is detailed in Set Up Developer Environment.
Once you have tested your changes, you can make a corresponding change in the
edge-manageability-framework
repo - typically you would increment the
versions used in the argocd/applications/templates/
for your change. See
Argo* CD Architecture for additional information.
Testing Docker Container Images#
In this example, Intel uses a container image of the inventory service
from the infra-core
repo.
Determine the names of the container image. Typically this is done with
docker images
, which will list all containers that exist locally. For this example, Intel uses:registry-rs.edgeorchestration.intel.com/edge-orch/infra/inventory:2.4.0
as the image name, and assume that the previous version of the container was2.3.0
.Export the image with
docker save
. This creates a tarball file of the container image.docker save --output=inventory_2.4.0.tar \ registry-rs.edgeorchestration.intel.com/edge-orch/infra/inventory:2.4.0
Copy the tarball to the Edge Orchestrator - in this case to a VM:
scp inventory_2.4.0.tar user@orchestrator_vm:/tmp/
Load the image into the RKE2 registry:
sudo /var/lib/rancher/rke2/bin/ctr \ --address /run/k3s/containerd/containerd.sock --namespace k8s.io \ ctr images import \ --index-name registry-rs.edgeorchestration.intel.com/edge-orch/infra/inventory:2.4.0 \ /tmp/inventory_2.4.0.tar
Change the version of inventory deployed in Argo* CD tool from
2.3.0
to the new2.4.0
image.
Testing a Helm Chart#
In the
edge-manageability-framework
where you deployed Edge Orchestrator, find theargocd/applications/templates
for the service you want to update. In this example, theinfra-core
chart will be updated that is ininfra-charts
, which is located inargocd/applications/templates/infra-core.yaml
.Change the
repoUrl
to point to a git repo where development changes are made. This could be your GitHub fork, for example:https://github.com/YOUR-USERNAME/infra-charts
Replace the
chart:
line withpath:
, and enter in the file path to the chart within the repo, in this caseinfra-core
.Set the
targetRevision
to the git reference - a branch, tag, or commit hash - for the chart change you are testing.Add the repo to the
localRepos
list in your.mage-local.yaml
file:if
.mage-local.yaml
does not exist, copy the sample from EMF repo .mage-local-sample.yaml and update it to meet your needs.Run
mage argo:addLocalRepos
to add the repo to Argo CD tool.
Follow the steps in Test and submit updates to Edge Orchestrator components to test your changes locally.
Testing Changes to the edge-manageability-framework Deployment Repo#
See
Locally Build and Test changes
for instructions on how to locally test a deployment change in an onPrem
Edge Orchestrator.
Submitting Changes to a Component Repo#
In order to submit a component pull request, follow these steps:
Push a branch that contains your code change to the repo that you’ve forked on Github repository.
Create a Pull Request. You will be prompted to fill out a pull request template which lists the requirements for the change.
The pull request needs an initial review to approve running CI tests. This is done by a member of
open-edge-platform
GitHub Organization.The pull request will be run through automated CI tests. In most repos, these are the same lint and test targets available in the Makefile, and some additional CI-only checks.
If the pull request passes in CI, it will receive a more detailed code review by a member of
open-edge-platform
GitHub Organization. Once approved, the code can be merged.After merge, CI will run Post-PR-Merge Actions and:
If a new version is released, git tags will be created on the repo
Artifacts such as charts and containers will be published.
Once created, these tags and artifacts then be referenced by other dependent components (in the case of separate container and Helm chart repos), and by the deployment repo.

How to Submit Changes#
Submitting Deployment Changes#
This process is functionally similar to submitting code to a component repo, and follows the same steps, but there are substantial additional checks done during the CI test procedure, including:
Running tests with hardware to ensure that edge node onboarding functions properly.
Testing the entire integrated Edge Orchestrator for failures.