Continuous delivery is in important aspect of short time to market and since the nRF9160 supports firmware over the air updates we want to ship a new firmware to our development boards every time we update the application.
One precondition for that is the automation of the process that compiles the HEX file of an application.
In this example I'll provide the configuration for Circle CI, a continuous integration service, which allows you to run task on their service for free, if your project is open source.
After signing up for CircleCI and connecting it to your source code provider, you need to provide a configuration file which instructs the docker-based build system to
Getting all these steps right takes a while, because configuring NCS and Zephyr includes many individual tasks, but afterwards you have a reproducible recipe to build your HEX files, as part of your source code project.
Not only does that mean you can provide up-to-date HEX files with zero effort, but using a CI runner allows you to automate your software releases using a project called semantic release.
This repository contains the
Following this example, all developers need to do format their commit messages following a certain schema (you can read more in detail about this process here) to trigger a new release.
GitHub Actions are a new feature which is to be released in November 2019, but many GitHub organizations already are enrolled in the public beta. Like CircleCI it is a generic task runner but offers deeper integration into GitHub.
Here is the workflow definition for GitHub Actions which automatically compiles HEX files and attaches them to the GitHub release.
It's been a while since I've written this guide. We keep improving the process and the Bifravst project now builds it's firmware using Docker and GitHub actions: https://github.com/bifravst/firmware/blob/saga/.github/workflows/build-and-release.yaml#L42-L143
We also now run tests on real, however this is still experimental: https://github.com/bifravst/firmware/issues/3