Skip to content

Humble beginnings for thingy91 FOTA #8

Humble beginnings for thingy91 FOTA

Humble beginnings for thingy91 FOTA #8

name: Build and Release
on:
push:
paths:
- "**.c"
- "**.h"
- "**.feature"
- "Kconfig"
- ".github/workflows/build-and-release.yaml"
- "west.yml"
- "*.conf"
- "!package.json"
- "!package-lock.json"
repository_dispatch:
types:
- source-update
workflow_dispatch:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }}
STACK_NAME: ${{ secrets.STACK_NAME }}
CI: 1
FORCE_COLOR: 3
jobs:
# This generates a unique build id (which is also different for re-runs) to
# be used in the artifact names to be able to distinguish them when
# downloading the artifact files.
build-id:
name: Generate build ID
runs-on: ubuntu-22.04
outputs:
id: ${{ steps.id.outputs.id }}
steps:
- name: Generate build ID
id: id
run: |
ID=`uuidgen`
echo "id=${ID}" >> $GITHUB_OUTPUT
# This generates a string containing the current date which is used in
# in artifact names to simpify locating and distinguishing them once they have
# been downloaded
date-string:
name: Generate string containing the current date
runs-on: ubuntu-22.04
outputs:
dateAsString: ${{ steps.dateAsString.outputs.dateAsString }}
steps:
- name: Generate date string
id: dateAsString
run: echo "dateAsString=$(date +'%Y%m%d%H%M%S')" >> $GITHUB_OUTPUT
broker:
name: Determine broker hostname
runs-on: ubuntu-22.04
steps:
- name: Determine the AWS IoT broker hostname
id: broker-hostname
run: |
BROKER_HOSTNAME=`AWS_ACCESS_KEY_ID=${{ env.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY=${{ env.AWS_SECRET_ACCESS_KEY }} AWS_DEFAULT_REGION=${{ env.AWS_REGION }} aws iot describe-endpoint --endpoint-type iot:Data-ATS | jq '.endpointAddress' -r | tr -d '\n'`
echo ${BROKER_HOSTNAME}
if [ -z "$BROKER_HOSTNAME" ]; then echo "Failed to discover broker hostname."; exit 1; fi
echo ${BROKER_HOSTNAME} > broker.conf
- uses: actions/upload-artifact@v3
with:
if-no-files-found: error
name: broker
path: broker.conf
release-version:
name: Determine next release version
runs-on: ubuntu-22.04
outputs:
nextRelease: ${{ steps.version.outputs.nextRelease }}
steps:
- uses: actions/checkout@v4
- name: Determine next release version
uses: nordicsemiconductor/cloud-get-next-version-action@saga
id: version
with:
branch: saga
defaultVersion: "0.0.0-development-${{ github.sha }}"
- run: echo ${{ steps.version.outputs.nextRelease }}
build:
runs-on: ubuntu-22.04
needs: [broker, release-version, date-string]
strategy:
matrix:
board: [thingy91_nrf9160_ns, nrf9160dk_nrf9160_ns]
loglevel: [debug, debugWithMemfault, nodebug]
steps:
- uses: actions/checkout@v4
with:
path: firmware
- name: Configure Version
working-directory: firmware
run: |
APP_VERSION=${{ needs.release-version.outputs.nextRelease }}-${{ matrix.board }}-${{ matrix.loglevel }}
echo "CONFIG_ASSET_TRACKER_V2_APP_VERSION=\"${APP_VERSION}\"" >> firmware.conf
echo "APP_VERSION=${APP_VERSION}" >> $GITHUB_ENV
- uses: actions/download-artifact@v3
with:
name: broker
- name: Configure the AWS IoT broker hostname
working-directory: firmware
run: |
BROKER_HOSTNAME=`cat ../broker.conf`
echo "CONFIG_AWS_IOT_BROKER_HOST_NAME=\"${BROKER_HOSTNAME}\"" >> firmware.conf
- run: cat firmware.conf
working-directory: firmware
- name: Build with debug enabled
working-directory: firmware
if: matrix.loglevel == 'debug'
run: |
docker run --rm -v ${PWD}:/workdir/project nordicplayground/nrfconnect-sdk:main west build -p always -b ${{ matrix.board }} --build-dir /workdir/project/build -- -DOVERLAY_CONFIG="overlay-aws.conf;overlay-pgps.conf;overlay-debug.conf;asset-tracker-cloud-firmware-aws.conf;firmware.conf" -DEXTRA_CFLAGS="-Werror"
- name: Build with debug and Memfault enabled
if: matrix.loglevel == 'debugWithMemfault'
working-directory: firmware
run: |
echo "CONFIG_NRF_MODEM_LIB_TRACE_ENABLED=y" >> firmware.conf
echo "CONFIG_DEBUG_MODULE_MEMFAULT_USE_EXTERNAL_TRANSPORT=y" >> firmware.conf
echo "CONFIG_DEBUG_MODULE_MEMFAULT_HEARTBEAT_INTERVAL_SEC=3600" >> firmware.conf
echo "CONFIG_MEMFAULT_NCS_FW_VERSION_STATIC=y" >> firmware.conf
echo "CONFIG_MEMFAULT_NCS_FW_VERSION=\"${{ env.APP_VERSION }}\"" >> firmware.conf
echo "CONFIG_MEMFAULT_NCS_FW_TYPE=\"asset_tracker_v2\"" >> firmware.conf
echo "CONFIG_MEMFAULT_NCS_PROJECT_KEY=\"${{ secrets.MEMFAULT_PROJECT_KEY }}\"" >> firmware.conf
docker run --rm -v ${PWD}:/workdir/project nordicplayground/nrfconnect-sdk:main west build -p always -b ${{ matrix.board }} --build-dir /workdir/project/build -- -DOVERLAY_CONFIG="overlay-aws.conf;overlay-pgps.conf;overlay-debug.conf;overlay-memfault.conf;asset-tracker-cloud-firmware-aws.conf;firmware.conf" -DEXTRA_CFLAGS="-Werror"
- name: Upload symbols file to Memfault
if: matrix.loglevel == 'debugWithMemfault'
working-directory: firmware
run: |
pip3 install memfault-cli
memfault \
--org-token ${{ secrets.MEMFAULT_ORGANIZATION_TOKEN }} \
--org ${{ secrets.MEMFAULT_ORGANIZATION_SLUG }} \
--project ${{ secrets.MEMFAULT_PROJECT_SLUG }} \
upload-mcu-symbols \
--software-type asset_tracker_v2 \
--software-version ${{ env.APP_VERSION }} \
build/zephyr/zephyr.elf
- name: Build with debug disabled
working-directory: firmware
if: matrix.loglevel == 'nodebug'
run: |
docker run --rm -v ${PWD}:/workdir/project nordicplayground/nrfconnect-sdk:main west build -p always -b ${{ matrix.board }} --build-dir /workdir/project/build -- -DOVERLAY_CONFIG="overlay-aws.conf;overlay-pgps.conf;asset-tracker-cloud-firmware-aws.conf;firmware.conf" -DEXTRA_CFLAGS="-Werror"
- name: Copy firmware
working-directory: firmware
run: |
cp build/zephyr/merged.hex ../
cp build/zephyr/app_signed.hex ../
cp build/zephyr/app_update.bin ../
cp build/zephyr/zephyr.elf ../
cp firmware.conf ../
- uses: actions/upload-artifact@v3
with:
if-no-files-found: error
name:
${{ matrix.board }}-${{ matrix.loglevel }}-${{
needs.date-string.outputs.dateAsString }}-${{ github.sha }}
path: |
merged.hex
app_signed.hex
app_update.bin
firmware.conf
zephyr.elf
release:
name: Release
runs-on: ubuntu-22.04
if:
github.ref == 'refs/heads/saga' && (github.event_name == 'push' ||
github.event_name == 'workflow_dispatch' || github.event_name ==
'repository_dispatch')
needs: [build]
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v3
- uses: actions/setup-node@v3
with:
node-version: "18.x"
- run: npx semantic-release