Continuous Integration Setup
LoRaWAN Starter Kit uses GitHub Actions for executing CI workflows. This page describes the CI workflows which are currently used in the project.
LoRa Build & Test CI
The Build & Test CI pipeline runs the following tasks:
- Builds the
- Runs unit tests
- Runs integration tests
- Publishes test results
- Builds a docker image of the
LoRa E2E CI
The E2E CI pipeline is used to run end-to-end tests (implemented in
LoRaWan.Tests.E2E project). The pipeline runs the following tasks:
- Prepares the required environment variables
- Builds and deploys Facade Azure Function
- Builds and pushes docker images for
- Generates required server and client certificates using scripts located in
Tools/BasicStation-Certificates-Generation/; the trust certificates are then copied to a pre-created
$CERT_REMOTE_PATHlocation in the local CI and to a remote device
- Deploys IoT Edge solution to ARM gateway
- Deploys IoT Edge solution to EFLOW gateway
- Deploys IoT Edge solution to a standalone concentrator
- Runs E2E tests on a dedicated agent
The E2E pipeline has a number of settings that can be configured in GitHub Actions:
RunE2ETestsOnly- if set to
trueonly the E2E tests will be run, all other steps of the workflow will be skipped
E2ETestsToRun- allows selection of only specific E2E tests to be run using the E2E test class name pattern, e.g. if set to
[MultiGatewayTest]only E2E tests implemented in
Tests/E2E/MultiGatewayTests.cswill be run. The variable defaults to all E2E tests.
TxPower- allows setting a custom transmission power on the leaf devices to be used during the E2E test run (with 14 being the maximum). The default is TX power is 6.
The E2E CI can be triggered manually via GitHub Actions and runs automatically on a daily schedule. The pipeline is also set up to run on pull requests under certain conditions.
In order for this workflow to be run on an open pull request, the label
needs to be added to the PR. Upon successful execution of the tests, additional
labels will be added to the PR automatically by GitHub Actions, e.g. if all
multi-concentrator E2E tests pass, the
MultiConcentrator label will
automatically be added to the PR.
The workflow will be re-executed on new changes being pushed, as long as the
fullci label is present. By default all E2E tests will be run each time
(including the ones which previously passed). In order to prevent this and only
run previously failing tests, additional label must be added to the PR (e.g.
1). In this case the test labels already added to the PR will prevent
those tests from being re-executed.
Universal Decoder CI
The Universal decoder CI pipeline runs the following tasks:
- Builds and tests the Universal Decoder sample project
- Builds and pushes a docker image for the decoder
The repository contains other workflows which are run automatically under certain confitions, typically when a pull request is created:
- CodeQL - runs CodeQL analysis on each PR created against
devbranch and after merge
- Lint and Check Markdown - runs linter and checks links in
markdown files; runs on PR created agains
docs/mainbranch and only checks
- Test Report - publishes test results after Build & Test CI or E2E CI have completed
- Publish docs (new version) - publishes project
documentation using MkDocs. The workflow needs to be triggered manually
docs/mainbranch after documentation has been updated and requires a version to publish as input to run.
- Publish docs dev - runs on changes to
docs/mainbranch and publishes
devversion of the documentation