1# Copyright (c) 2022-2023 Nordic Semiconductor ASA
2# SPDX-License-Identifier: Apache-2.0
3
4name: Build Zephyr samples with Twister
5
6# Workflow triggers on PRs, pushes to main, once per day at midnight and can be started manually.
7on:
8  # By default, pull_request includes: opened, synchronize, or reopened
9  pull_request:
10    branches:
11      - main
12  push:
13    branches:
14      - main
15  schedule:
16    - cron: 0 0 * * *
17  # When triggered manually, ask for Zephyr and MCUBoot versions to check out
18  workflow_dispatch:
19    inputs:
20      version_zephyr:
21        description: 'Which Zephyr version to checkout?'
22        required: true
23        default: 'main'
24      version_mcuboot:
25        description: 'Which MCUBoot version to checkout?'
26        required: true
27        default: 'main'
28
29env:
30  ZEPHYR_VERSION: 'main'
31  MCUBOOT_VERSION: 'main'
32
33# Only cancel ongoing runs for PRs
34concurrency:
35  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
36  cancel-in-progress: true
37
38jobs:
39  build_zephyr_with_twister:
40    runs-on: ubuntu-latest
41    # Docker image from the zephyr upstream. Includes SDK and other required tools
42    container:
43      image: zephyrprojectrtos/ci:v0.26.4
44      options: '--entrypoint /bin/bash'
45      volumes:
46        - /home/runners/zephyrproject:/github/cache/zephyrproject
47    env:
48      ZEPHYR_SDK_INSTALL_DIR: /opt/toolchains/zephyr-sdk-0.16.1
49
50    steps:
51      - name: Set versions when workflow_dispatch
52        if: github.event_name == 'workflow_dispatch'
53        run: |
54          echo "ZEPHYR_VERSION=${{ github.event.inputs.version_zephyr }}" >> $GITHUB_ENV
55          echo "MCUBOOT_VERSION=${{ github.event.inputs.version_mcuboot }}" >> $GITHUB_ENV
56
57      - name: Set versions when pull_request
58        if: github.event_name == 'pull_request'
59        run: |
60          echo "MCUBOOT_VERSION=${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV
61
62      - name: Checkout Zephyr
63        uses: actions/checkout@v2
64        with:
65          repository: 'zephyrproject-rtos/zephyr'
66          ref: ${{ env.ZEPHYR_VERSION }}
67          path: 'repos/zephyr'
68
69      - name: Setup Zephyr
70        working-directory: repos/zephyr
71        run: |
72          west init -l .
73          west update
74
75      - name: Checkout MCUBoot
76        uses: actions/checkout@v2
77        with:
78          repository: 'mcu-tools/mcuboot'
79          ref: ${{ env.MCUBOOT_VERSION }}
80          path: 'repos/bootloader/mcuboot'
81
82      - name: Run Twister tests
83        working-directory: repos/zephyr
84        env:
85          test_paths: >
86              -T ../bootloader/mcuboot/boot/zephyr
87              -T ./tests/subsys/dfu
88              -T ./samples/subsys/mgmt/mcumgr/smp_svr
89        run: |
90          export ZEPHYR_BASE=${PWD}
91          export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
92          echo "Using Zephyr version: ${{ env.ZEPHYR_VERSION }}"
93          echo "Using Mcuboot version: ${{ env.MCUBOOT_VERSION }}"
94          ./scripts/twister --inline-logs -v -N -M --integration --overflow-as-errors --retry-failed 2 ${test_paths}
95
96      - name: Upload Tests Results
97        uses: actions/upload-artifact@v2
98        if: always()
99        with:
100          name: Tests Results
101          if-no-files-found: ignore
102          path: |
103            repos/zephyr/twister-out/twister.xml
104