You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
6.1 KiB
184 lines
6.1 KiB
name: Code Coverage with codecov |
|
|
|
on: |
|
schedule: |
|
- cron: '25 06,18 * * 1-5' |
|
|
|
concurrency: |
|
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.head_ref || github.ref }} |
|
cancel-in-progress: true |
|
|
|
jobs: |
|
codecov: |
|
if: github.repository == 'zephyrproject-rtos/zephyr' |
|
runs-on: zephyr-runner-linux-x64-4xlarge |
|
container: |
|
image: ghcr.io/zephyrproject-rtos/ci:v0.26.7 |
|
options: '--entrypoint /bin/bash' |
|
volumes: |
|
- /repo-cache/zephyrproject:/github/cache/zephyrproject |
|
strategy: |
|
fail-fast: false |
|
matrix: |
|
platform: ["mps2/an385", "native_sim", "qemu_x86", "unit_testing"] |
|
steps: |
|
- name: Apply container owner mismatch workaround |
|
run: | |
|
# FIXME: The owner UID of the GITHUB_WORKSPACE directory may not |
|
# match the container user UID because of the way GitHub |
|
# Actions runner is implemented. Remove this workaround when |
|
# GitHub comes up with a fundamental fix for this problem. |
|
git config --global --add safe.directory ${GITHUB_WORKSPACE} |
|
|
|
- name: Update PATH for west |
|
run: | |
|
echo "$HOME/.local/bin" >> $GITHUB_PATH |
|
|
|
- name: Clone cached Zephyr repository |
|
continue-on-error: true |
|
run: | |
|
git clone --shared /github/cache/zephyrproject/zephyr . |
|
git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} |
|
|
|
- name: checkout |
|
uses: actions/checkout@v4 |
|
with: |
|
fetch-depth: 0 |
|
|
|
- name: west setup |
|
run: | |
|
west init -l . || true |
|
west update 1> west.update.log || west update 1> west.update-2.log |
|
|
|
- name: Environment Setup |
|
run: | |
|
cmake --version |
|
gcc --version |
|
ls -la |
|
|
|
echo "ZEPHYR_SDK_INSTALL_DIR=/opt/toolchains/zephyr-sdk-$( cat SDK_VERSION )" >> $GITHUB_ENV |
|
|
|
- name: Prepare ccache keys |
|
id: ccache_cache_prop |
|
shell: cmake -P {0} |
|
run: | |
|
string(REPLACE "/" "_" repo ${{github.repository}}) |
|
string(REPLACE "-" "_" repo2 ${repo}) |
|
file(APPEND $ENV{GITHUB_OUTPUT} "repo=${repo2}\n") |
|
|
|
- name: use cache |
|
id: cache-ccache |
|
uses: zephyrproject-rtos/action-s3-cache@v1.2.0 |
|
with: |
|
key: ${{ steps.ccache_cache_prop.outputs.repo }}-${{github.event_name}}-${{matrix.platform}}-codecov-ccache |
|
path: /github/home/.cache/ccache |
|
aws-s3-bucket: ccache.zephyrproject.org |
|
aws-access-key-id: ${{ vars.AWS_CCACHE_ACCESS_KEY_ID }} |
|
aws-secret-access-key: ${{ secrets.AWS_CCACHE_SECRET_ACCESS_KEY }} |
|
aws-region: us-east-2 |
|
|
|
- name: ccache stats initial |
|
run: | |
|
mkdir -p /github/home/.cache |
|
test -d github/home/.cache/ccache && mv github/home/.cache/ccache /github/home/.cache/ccache |
|
ccache -M 10G -s |
|
|
|
- name: Run Tests with Twister (Push) |
|
continue-on-error: true |
|
run: | |
|
export ZEPHYR_BASE=${PWD} |
|
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr |
|
mkdir -p coverage/reports |
|
pip3 install gcovr==6.0 |
|
./scripts/twister -i --force-color -N -v --filter runnable -p ${{ matrix.platform }} --coverage -T tests --coverage-tool gcovr -xCONFIG_TEST_EXTRA_STACK_SIZE=4096 -e nano |
|
|
|
- name: ccache stats post |
|
run: | |
|
ccache -s |
|
ccache -p |
|
|
|
- name: Rename coverage files |
|
if: always() |
|
run: | |
|
cp twister-out/coverage.json coverage/reports/${{ matrix.platform }}.json |
|
|
|
- name: Upload Coverage Results |
|
if: always() |
|
uses: actions/upload-artifact@v4 |
|
with: |
|
name: Coverage Data (Subset ${{ matrix.platform }}) |
|
path: coverage/reports/${{ matrix.platform }}.json |
|
|
|
codecov-results: |
|
name: "Publish Coverage Results" |
|
needs: codecov |
|
runs-on: ubuntu-22.04 |
|
# the codecov job might be skipped, we don't need to run this job then |
|
if: success() || failure() |
|
|
|
steps: |
|
- name: checkout |
|
uses: actions/checkout@v4 |
|
with: |
|
fetch-depth: 0 |
|
- name: Download Artifacts |
|
uses: actions/download-artifact@v4 |
|
with: |
|
path: coverage/reports |
|
|
|
- name: Move coverage files |
|
run: | |
|
mv ./coverage/reports/*/*.json ./coverage/reports |
|
ls -la ./coverage/reports |
|
|
|
- name: Generate list of coverage files |
|
id: get-coverage-files |
|
shell: cmake -P {0} |
|
run: | |
|
file(GLOB INPUT_FILES_LIST "coverage/reports/*.json") |
|
set(MERGELIST "") |
|
set(FILELIST "") |
|
foreach(ITEM ${INPUT_FILES_LIST}) |
|
get_filename_component(f ${ITEM} NAME) |
|
if(FILELIST STREQUAL "") |
|
set(FILELIST "${f}") |
|
else() |
|
set(FILELIST "${FILELIST},${f}") |
|
endif() |
|
endforeach() |
|
foreach(ITEM ${INPUT_FILES_LIST}) |
|
get_filename_component(f ${ITEM} NAME) |
|
if(MERGELIST STREQUAL "") |
|
set(MERGELIST "--add-tracefile ${f}") |
|
else() |
|
set(MERGELIST "${MERGELIST} -a ${f}") |
|
endif() |
|
endforeach() |
|
file(APPEND $ENV{GITHUB_OUTPUT} "mergefiles=${MERGELIST}\n") |
|
file(APPEND $ENV{GITHUB_OUTPUT} "covfiles=${FILELIST}\n") |
|
|
|
- name: Merge coverage files |
|
run: | |
|
cd ./coverage/reports |
|
pip3 install gcovr==6.0 |
|
gcovr ${{ steps.get-coverage-files.outputs.mergefiles }} --merge-mode-functions=separate --json merged.json |
|
gcovr ${{ steps.get-coverage-files.outputs.mergefiles }} --merge-mode-functions=separate --cobertura merged.xml |
|
|
|
- name: Upload Merged Coverage Results |
|
if: always() |
|
uses: actions/upload-artifact@v4 |
|
with: |
|
name: Merged Coverage Data |
|
path: | |
|
coverage/reports/merged.json |
|
coverage/reports/merged.xml |
|
|
|
- name: Upload coverage to Codecov |
|
if: always() |
|
uses: codecov/codecov-action@v3 |
|
with: |
|
directory: ./coverage/reports |
|
env_vars: OS,PYTHON |
|
fail_ci_if_error: false |
|
verbose: true |
|
files: merged.xml
|
|
|