In this section you will learn how to manage ongoing development in an automated CI/CD workflow, using GitHub Actions and self-hosted runner.
In the lighting-app
console, stop the app (Ctrl+C
) if still running.
The Matter repository from where the examples are sourced contains very many workflows for rebuilding different configurations. For the convenience of time, let us remove these, and install only the new workflow.
In the lighting-app
console, navigate to the .github/workflows
directory, and delete all.
cd ~/connectedhomeip/.github/workflows
rm -rf *.yaml
rm -rf *.yml
ls
Create a .yml
textfile, and copy the below to that file.
name: Matter_CICD_Demo
on:
push:
workflow_dispatch:
jobs:
rebuild_lighting_app:
runs-on: self-hosted
steps:
- uses: actions/checkout@v2
- name: submodules
run: ./scripts/checkout_submodules.py --shallow --platform linux
- name: bootstrap and build
run: |
./scripts/build/gn_bootstrap.sh
source scripts/activate.sh
git clone https://github.com/project-chip/zap.git ./zap
cd ./zap
sudo src-script/install-packages-ubuntu
npm ci
export ZAP_DEVELOPMENT_PATH=$PWD
cd ../examples/lighting-app/linux
gn gen out/debug
ninja -C out/debug
run_lighting_app:
needs: rebuild_lighting_app
runs-on: self-hosted
steps:
- name: Run lighting-app for 3 minutes
run: |
cd examples/lighting-app/linux
timeout 180s ./out/debug/chip-lighting-app || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; fi
Browse to the forked Matter repository in your personal GitHub space.
Navigate to Settings
> Actions
> Runners
, and then click on New self-hosted runner
.
Configure for Linux
host on ARM64
Architecture (the host
of the runner will be the lighting-app
Virtual Raspberry Pi 4 instance).
You will see a set of commands (unique to you) to download and configure the runner
.
In the lighting-app
console, return to your home directory:
cd ~
Copy and paste the Download
and Configure
commands (from GitHub) for your self-hosted runner
.
It is OK to select the default options when prompted during configuration.
To keep the console available for later use, run the self-hosted runner agent
as a background service (if started, first stop with Ctrl+C
):
sudo ./svc.sh install pi
sudo ./svc.sh start
sudo ./svc.sh status
In your GitHub repository, you will see your runner listed (Settings
> Actions
> Runners
), with Idle
status.
In the lighting-app
console, make a code change, for example, editing the output message when light is toggled.
This is in a source file named on-off-server.cpp
.
cd ~/connectedhomeip
nano src/app/clusters/on-off-server/on-off-server.cpp
Locate the Toggle on/off
message (if using nano
, use Ctrl+_
to jump to line 175
):
emberAfOnOffClusterPrintln("Toggle ep%x on/off from state %x to %x", endpoint, currentValue, newValue);
Edit to give a new output message, for example:
emberAfOnOffClusterPrintln("HELLO WORLD! Toggle ep%x on/off from state %x to %x", endpoint, currentValue, newValue);
Exit (Ctrl+X
) and save your change.
The workflow contains the below, which tells GitHub to invoke this workflow whenever there is a push
to the repository.
on:
push:
To push the changes, in lighting-app
console, first enter your GitHub credentials.
git config --global user.name "YOUR_GITHUB_USERNAME"
git config --global user.email YOUR_EMAIL_ADDRESS
Ensure you are pushing these changes to your personal forked repository.
git remote -v
Commit the changes to your repository.
cd ~/connectedhomeip
git add .
git commit -m "delete other workflows, update output message"
git push
You will be prompted for your GitHub username and Personal Access Token
(password).
The workflow contains two jobs
, which rebuild, and then run lighting-app
:
jobs:
rebuild_lighting_app:
...
run_lighting_app:
Note that rebuild_lighting_app
will take a few minutes to complete, as it must repeat all the initialization steps for the Matter build system.
The workflow does not output on the target, but rather logs to GitHub.
You can follow the workflow steps, and see the output logs in your GitHub repository, under the Actions
tab.
After lighting-app
is initialized, you can toggle the light with your chip-tool
instance as before:
./out/debug/chip-tool onoff on 0x11 1
./out/debug/chip-tool onoff off 0x11 1
Observer your new message in the run_lighting_app
log, for example:
[TIMESTAMP][INSTANCEID] CHIP:ZCL: HELLO WORLD! Toggle ep1 on/off from state 1 to 0
The workflow will cleanly terminate lighting-app
after 120 seconds.