1#
2#  Copyright (c) 2023, The OpenThread Authors.
3#  All rights reserved.
4#
5#  Redistribution and use in source and binary forms, with or without
6#  modification, are permitted provided that the following conditions are met:
7#  1. Redistributions of source code must retain the above copyright
8#     notice, this list of conditions and the following disclaimer.
9#  2. Redistributions in binary form must reproduce the above copyright
10#     notice, this list of conditions and the following disclaimer in the
11#     documentation and/or other materials provided with the distribution.
12#  3. Neither the name of the copyright holder nor the
13#     names of its contributors may be used to endorse or promote products
14#     derived from this software without specific prior written permission.
15#
16#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26#  POSSIBILITY OF SUCH DAMAGE.
27#
28
29name: Unit
30
31on:
32  push:
33    branches-ignore:
34      - 'dependabot/**'
35  pull_request:
36    branches:
37      - 'main'
38
39concurrency:
40  group: ${{ github.workflow }}-${{ github.event.pull_request.number || (github.repository == 'openthread/openthread' && github.run_id) || github.ref }}
41  cancel-in-progress: true
42
43permissions:  # added using https://github.com/step-security/secure-workflows
44  contents: read
45
46jobs:
47
48  tcplp-buffering:
49    runs-on: ubuntu-20.04
50    steps:
51    - name: Harden Runner
52      uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1
53      with:
54        egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
55
56    - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
57      with:
58        submodules: true
59    - name: Build
60      run: make -C third_party/tcplp/lib/test/
61    - name: Run
62      run: third_party/tcplp/lib/test/test_all
63
64  unit-tests:
65    runs-on: ubuntu-20.04
66    env:
67      COVERAGE: 1
68    steps:
69    - name: Harden Runner
70      uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1
71      with:
72        egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
73
74    - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
75      with:
76        submodules: true
77    - name: Bootstrap
78      run: |
79        sudo rm /etc/apt/sources.list.d/* && sudo apt-get update
80        sudo apt-get --no-install-recommends install -y ninja-build lcov
81    - name: Build Simulation
82      run: ./script/cmake-build simulation
83    - name: Test Simulation
84      run: cd build/simulation && ninja test
85    - name: Build Multipan Simulation
86      run: ./script/cmake-build simulation -DOT_MULTIPAN_TEST=ON
87    - name: Test Multipan Simulation
88      run: cd build/simulation && ninja test
89    - name: Build POSIX
90      run: ./script/cmake-build posix
91    - name: Test POSIX
92      run: cd build/posix && ninja test
93    - name: Generate Coverage
94      run: |
95        ./script/test generate_coverage gcc
96    - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6
97      with:
98        name: cov-unit-tests
99        path: tmp/coverage.info
100        retention-days: 1
101
102  upload-coverage:
103    needs: unit-tests
104    runs-on: ubuntu-20.04
105    steps:
106    - name: Harden Runner
107      uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1
108      with:
109        egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
110
111    - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
112      with:
113        submodules: true
114    - name: Bootstrap
115      run: |
116        sudo apt-get --no-install-recommends install -y lcov
117    - uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
118      with:
119        path: coverage/
120        pattern: cov-*
121        merge-multiple: true
122    - name: Combine Coverage
123      run: |
124        script/test combine_coverage
125    - name: Upload Coverage
126      uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0
127      env:
128        CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
129      with:
130        files: final.info
131        fail_ci_if_error: true
132