In this section you will learn how to manage ongoing development in an automated CI/CD workflow, using GitHub Actions and self-hosted runner.
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.
lighting-app console, navigate to the
.github/workflows directory, and delete all.
cd ~/connectedhomeip/.github/workflows rm -rf *.yaml rm -rf *.yml ls
.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.
Runners, and then click on
New self-hosted runner.
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
lighting-app console, return to your home directory:
Copy and paste the
Configure commands (from GitHub) for your
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
sudo ./svc.sh install pi sudo ./svc.sh start sudo ./svc.sh status
In your GitHub repository, you will see your runner listed (
lighting-app console, make a code change, for example, editing the output message when light is toggled.
This is in a source file named
cd ~/connectedhomeip nano src/app/clusters/on-off-server/on-off-server.cpp
Toggle on/off message (if using
Ctrl+_ to jump to line
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);
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.
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
jobs: rebuild_lighting_app: ... run_lighting_app:
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
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.