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@6b3083af2869dc3314a0257a42f4af696cc79ba3 # v2.3.1
53      with:
54        egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
55
56    - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
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@6b3083af2869dc3314a0257a42f4af696cc79ba3 # v2.3.1
71      with:
72        egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
73
74    - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
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 POSIX
86      run: ./script/cmake-build posix
87    - name: Test POSIX
88      run: cd build/posix && ninja test
89    - name: Generate Coverage
90      run: |
91        ./script/test generate_coverage gcc
92    - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
93      with:
94        name: cov-unit-tests
95        path: tmp/coverage.info
96
97
98  upload-coverage:
99    needs: unit-tests
100    runs-on: ubuntu-20.04
101    steps:
102    - name: Harden Runner
103      uses: step-security/harden-runner@6b3083af2869dc3314a0257a42f4af696cc79ba3 # v2.3.1
104      with:
105        egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
106
107    - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
108      with:
109        submodules: true
110    - name: Bootstrap
111      run: |
112        sudo apt-get --no-install-recommends install -y lcov
113    - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
114      with:
115        path: coverage/
116    - name: Combine Coverage
117      run: |
118        script/test combine_coverage
119    - name: Upload Coverage
120      uses: codecov/codecov-action@894ff025c7b54547a9a2a1e9f228beae737ad3c2 # v3.1.3
121      with:
122        files: final.info
123        fail_ci_if_error: true
124
125  delete-coverage-artifacts:
126    needs: upload-coverage
127    runs-on: ubuntu-20.04
128    steps:
129    - name: Harden Runner
130      uses: step-security/harden-runner@6b3083af2869dc3314a0257a42f4af696cc79ba3 # v2.3.1
131      with:
132        egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
133
134    - uses: geekyeggo/delete-artifact@54ab544f12cdb7b71613a16a2b5a37a9ade990af # v2.0.0
135      with:
136        name: cov-*
137        useGlob: true
138