Skip to content

Update cdefault.yml #1189

Update cdefault.yml

Update cdefault.yml #1189

Workflow file for this run

name: projmgr
on:
workflow_call:
push:
branches:
- main
paths:
- '.github/workflows/projmgr.yml'
- '.github/matrix_includes_projmgr.json'
- 'CMakeLists.txt'
- 'libs/crossplatform/**'
- 'libs/rtefsutils/**'
- 'libs/xmlreader/**'
- 'libs/xmltree/**'
- 'libs/xmltreeslim/**'
- 'tools/projmgr/**'
- '!**/docs/**/*'
- '!**/*.md'
pull_request:
paths:
- '.github/workflows/projmgr.yml'
- '.github/matrix_includes_projmgr.json'
- 'CMakeLists.txt'
- 'libs/crossplatform/**'
- 'libs/rtefsutils/**'
- 'libs/xmlreader/**'
- 'libs/xmltree/**'
- 'libs/xmltreeslim/**'
- 'tools/projmgr/**'
- '!**/*.md'
release:
types: [published]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
setup:
uses: Open-CMSIS-Pack/devtools/.github/workflows/shared_setup_env.yml@main
with:
run_if: ${{ fromJSON((github.event_name == 'pull_request') || (github.event_name == 'release' && startsWith(github.ref, 'refs/tags/tools/projmgr/')) || ((github.event.schedule != '') && (!github.event.repository.private))) }}
matrix_prep:
needs: setup
uses: Open-CMSIS-Pack/devtools/.github/workflows/shared_matrix_prep.yml@main
with:
workflow_name: projmgr
build:
needs: [ setup, matrix_prep ]
runs-on: ${{ matrix.runs_on }}
timeout-minutes: 15
strategy:
# fail-fast: true
matrix: ${{ fromJson(needs.matrix_prep.outputs.matrix) }}
steps:
- name: Checkout devtools
uses: actions/checkout@v3
with:
submodules: true
# https://github.com/Open-CMSIS-Pack/devtools-build-action
- name: Build
uses: Open-CMSIS-Pack/devtools-build-action@arm64
with:
target: projmgr
arch: ${{ matrix.arch }}
- name: Archive projmgr
uses: actions/upload-artifact@v3
with:
name: projmgr-${{ matrix.target }}-${{ matrix.arch }}
path: ./build/tools/projmgr/${{ matrix.target }}-${{ matrix.arch }}/Release/${{ matrix.binary }}
retention-days: ${{ needs.setup.outputs.retention_days }}
if-no-files-found: error
build-swig:
needs: [ setup, matrix_prep ]
runs-on: ${{ matrix.runs_on }}
timeout-minutes: 15
strategy:
# fail-fast: true
matrix: ${{ fromJson(needs.matrix_prep.outputs.matrix) }}
steps:
- name: Checkout devtools
if: matrix.pyswig || matrix.goswig
uses: actions/checkout@v3
with:
submodules: true
- name: Build swig python libs
if: matrix.pyswig
uses: Open-CMSIS-Pack/devtools-build-action@arm64
with:
add_cmake_variables: -DSWIG_LIBS=ON
add_cmake_build_args: --config Release
arch: ${{ matrix.arch }}
build_folder: buildswig
target: projmgr-python
- name: Build swig go libs
if: matrix.goswig
uses: Open-CMSIS-Pack/devtools-build-action@arm64
with:
add_cmake_variables: -DSWIG_LIBS=ON
add_cmake_build_args: --config Release
arch: ${{ matrix.arch }}
build_folder: buildswig
target: projmgr-go
- name: Archive projmgr swig python libs
if: always() && matrix.pyswig
uses: actions/upload-artifact@v3
with:
name: projmgr-swig-python-${{ matrix.target }}-${{ matrix.arch }}
path: |
./buildswig/tools/projmgr/swig/python/projmgr.py
./buildswig/tools/projmgr/swig/python/_projmgr.pyd
./buildswig/tools/projmgr/swig/python/_projmgr.so
retention-days: ${{ needs.setup.outputs.retention_days }}
- name: Archive projmgr swig go libs
if: always() && matrix.goswig
uses: actions/upload-artifact@v3
with:
name: projmgr-swig-go-${{ matrix.target }}-${{ matrix.arch }}
path: |
./buildswig/tools/projmgr/swig/go/projmgr.go
./buildswig/tools/projmgr/swig/go/projmgr.so
retention-days: ${{ needs.setup.outputs.retention_days }}
release:
if: |
github.event_name == 'release' &&
startsWith(github.ref, 'refs/tags/tools/projmgr/')
needs: [ build, build-swig, unittest, coverage ]
runs-on: ubuntu-22.04
timeout-minutes: 15
steps:
- name: Checkout devtools
uses: actions/checkout@v3
- name: Create distribution folders
run: |
mkdir -p tools/projmgr/distribution/bin tools/projmgr/distribution/lib tools/projmgr/distribution/doc tools/projmgr/distribution/etc
cp tools/projmgr/docs/LICENSE.txt tools/projmgr/distribution/
cp -r tools/projmgr/docs/Manual/* tools/projmgr/distribution/doc/
cp -r tools/projmgr/schemas/* tools/projmgr/distribution/etc/
cp -r tools/projmgr/templates/* tools/projmgr/distribution/etc/
- name: Download projmgr linux-amd64
uses: actions/download-artifact@v3
with:
name: projmgr-linux-amd64
path: tools/projmgr/distribution/bin/linux-amd64/
- name: Download projmgr linux-arm64
uses: actions/download-artifact@v3
with:
name: projmgr-linux-arm64
path: tools/projmgr/distribution/bin/linux-arm64/
- name: Download projmgr macos-amd64
uses: actions/download-artifact@v3
with:
name: projmgr-darwin-amd64
path: tools/projmgr/distribution/bin/darwin-amd64/
- name: Download projmgr macos-arm64
uses: actions/download-artifact@v3
with:
name: projmgr-darwin-arm64
path: tools/projmgr/distribution/bin/darwin-arm64/
- name: Download projmgr windows-amd64
uses: actions/download-artifact@v3
with:
name: projmgr-windows-amd64
path: tools/projmgr/distribution/bin/windows-amd64/
- name: Download projmgr windows-arm64
uses: actions/download-artifact@v3
with:
name: projmgr-windows-arm64
path: tools/projmgr/distribution/bin/windows-arm64/
- name: Download projmgr-swig-python linux-amd64
uses: actions/download-artifact@v3
with:
name: projmgr-swig-python-linux-amd64
path: tools/projmgr/distribution/lib/linux-amd64/python/
- name: Download projmgr-swig-python macos-amd64
if: ${{ !github.event.repository.private }}
uses: actions/download-artifact@v3
with:
name: projmgr-swig-python-darwin-amd64
path: tools/projmgr/distribution/lib/darwin-amd64/python/
- name: Download projmgr-swig-python windows-amd64
uses: actions/download-artifact@v3
with:
name: projmgr-swig-python-windows-amd64
path: tools/projmgr/distribution/lib/windows-amd64/python/
- name: Download projmgr-swig-go linux-amd64
uses: actions/download-artifact@v3
with:
name: projmgr-swig-go-linux-amd64
path: tools/projmgr/distribution/lib/linux-amd64/go/
- name: Download projmgr-swig-go macos-amd64
if: ${{ !github.event.repository.private }}
uses: actions/download-artifact@v3
with:
name: projmgr-swig-go-darwin-amd64
path: tools/projmgr/distribution/lib/darwin-amd64/go/
- name: Zip distribution folder
run: zip -r projmgr.zip *
working-directory: tools/projmgr/distribution
- name: Attach zip archive to release assets
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: tools/projmgr/distribution/projmgr.zip
tag: ${{ github.ref }}
overwrite: true
asset_name: projmgr.zip
- name: Download test report windows-amd64
uses: actions/download-artifact@v3
with:
name: unit_test_result-windows-amd64
path: tools/testreport/windows-amd64/
- name: Download test report linux-amd64
uses: actions/download-artifact@v3
with:
name: unit_test_result-linux-amd64
path: tools/testreport/linux-amd64/
- name: Download test report macos-amd64
if: ${{ !github.event.repository.private }}
uses: actions/download-artifact@v3
with:
name: unit_test_result-darwin-amd64
path: tools/testreport/darwin-amd64/
- name: Zip test reports
run: zip -r testreport.zip *
working-directory: tools/testreport
- name: Attach test report archive to release assets
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: tools/testreport/testreport.zip
tag: ${{ github.ref }}
overwrite: true
asset_name: testreport.zip
- name: Download coverage report
uses: actions/download-artifact@v3
with:
name: coverage-report
path: tools/coverage/
- name: Zip coverage reports
run: zip -r coverage.zip coverage_projmgr
working-directory: tools/coverage
- name: Attach coverage archive to release assets
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: tools/coverage/coverage.zip
tag: ${{ github.ref }}
overwrite: true
asset_name: coverage.zip
unittest:
needs: [ setup, matrix_prep ]
runs-on: ${{ matrix.runs_on }}
timeout-minutes: 15
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.matrix_prep.outputs.matrix) }}
steps:
- name: Checkout devtools
uses: actions/checkout@v3
with:
submodules: true
- name: Testspace client install & config
if: ${{ !github.event.repository.private }}
uses: testspace-com/setup-testspace@v1
with:
domain: ${{github.repository_owner}}
# https://github.com/Open-CMSIS-Pack/devtools-build-action
- name: Build ProjMgrUnitTests
uses: Open-CMSIS-Pack/devtools-build-action@arm64
with:
arch: ${{ matrix.arch }}
build_type: Debug
target: ProjMgrUnitTests
- name: Run projmgr unit tests
if: (matrix.arch != 'arm64')
run: |
ctest -V -C Debug -R ProjMgrUnitTests
working-directory: ./build
- name: Archive unit tests results
if: always() && (matrix.arch != 'arm64')
uses: actions/upload-artifact@v3
with:
name: unittest-${{ matrix.target }}-${{ matrix.arch }}
path: ./build/Testing/Temporary/LastTest.log
retention-days: ${{ needs.setup.outputs.retention_days }}
if-no-files-found: error
- name: Archive gtest report
if: always() && (matrix.arch != 'arm64')
uses: actions/upload-artifact@v3
with:
name: unit_test_result-${{ matrix.target }}-${{ matrix.arch }}
path: ./build/test_reports/projmgrunittests-*.xml
retention-days: ${{ needs.setup.outputs.retention_days }}
if-no-files-found: error
- name: Testspace push test content
if: ${{ (!github.event.repository.private) && always() && (matrix.arch != 'arm64') }}
run: |
testspace "[${{ github.workflow }} / Test Report/ ${{ matrix.target }}-${{ matrix.arch }}]./build/test_reports/projmgrunittests-*.xml"
coverage:
if: |
(github.event_name == 'pull_request') ||
(github.event_name == 'push') ||
(github.event_name == 'release' && startsWith(github.ref, 'refs/tags/tools/projmgr/')) ||
((github.event.schedule != '') && (!github.event.repository.private))
env:
lcov_base: https://github.com/linux-test-project/lcov/releases/download/v1.15/
lcov_installer: lcov-1.15.tar.gz
runs-on: ubuntu-22.04
timeout-minutes: 15
steps:
- name: Install linux deps
run: |
sudo apt-get update
sudo apt-get install \
lcov
- name: Checkout devtools
uses: actions/checkout@v3
with:
submodules: true
- name: Testspace client install & config
if: ${{ !github.event.repository.private }}
uses: testspace-com/setup-testspace@v1
with:
domain: ${{github.repository_owner}}
# https://github.com/Open-CMSIS-Pack/devtools-build-action
- name: Build ProjMgrUnitTests
uses: Open-CMSIS-Pack/devtools-build-action@arm64
with:
add_cmake_variables: -DCOVERAGE=ON
arch: amd64
build_type: Debug
target: ProjMgrUnitTests
- name: Run ProjMgrUnitTests
run: |
ctest -V -C Debug -R ProjMgrUnitTests
working-directory: ./build
- name: Get retention days
id: var
run: |
echo "retention_days=$(echo '${{ (!github.event.repository.private && (github.event_name == 'push' || github.event.schedule != '')) && '7' || '1' }}')" >> $GITHUB_OUTPUT
- name: Archive test report
if: (github.event_name == 'push')
uses: actions/upload-artifact@v3
with:
name: unit_test_result-linux-amd64
path: ./build/test_reports/projmgrunittests-*.xml
retention-days: ${{ steps.var.outputs.retention_days }}
if-no-files-found: error
# Needs to be removed once the bug is resolved
# lcov reporting 1.14 on 1.15 version
# https://groups.google.com/g/linux.debian.bugs.dist/c/a9SZGCENJ2s?pli=1
- name: Setup lcov1.15
run: |
wget -q ${{ env.lcov_base }}/${{ env.lcov_installer }}
tar -xvf ${{ env.lcov_installer }}
working-directory: ./build/tools/projmgr
- name: Generate coverage report
run: |
lcov-1.15/bin/lcov --rc lcov_branch_coverage=1 --rc geninfo_no_exception_branch=1 -c --directory . --output-file full_coverage.info
lcov-1.15/bin/lcov --rc lcov_branch_coverage=1 --rc geninfo_no_exception_branch=1 -e full_coverage.info '/tools/projmgr/include/*' '*/tools/projmgr/src/*' -o coverage_projmgr.info
genhtml coverage_projmgr.info --output-directory coverage_projmgr --branch-coverage
working-directory: ./build/tools/projmgr/
# testspace changes start
- name: Set up Python
if: ${{ !github.event.repository.private }}
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
if: ${{ !github.event.repository.private }}
run: |
python -m pip install --upgrade pip
pip install lcov_cobertura
- name: Convert to xml
if: ${{ !github.event.repository.private }}
run: |
lcov_cobertura ./build/tools/projmgr/coverage_projmgr.info
- name: Testspace push coverage
if: ${{ !github.event.repository.private }}
run: |
testspace "[${{ github.workflow }} / Code Coverage]./coverage.xml"
# testspace changes start
- name: Upload Report to Codecov
if: ${{ !github.event.repository.private }}
uses: Wandalen/[email protected]
with:
action: codecov/codecov-action@v3
with: |
files: ./build/tools/projmgr/coverage_projmgr.info
fail_ci_if_error: true
flags: projmgr-cov
functionalities: fix
attempt_limit: 3
attempt_delay: 5000
- name: Archive coverage report
uses: actions/upload-artifact@v3
with:
name: coverage-report
path: |
./build/tools/projmgr/coverage_projmgr/
./build/tools/projmgr/coverage_projmgr.info
retention-days: ${{ steps.var.outputs.retention_days }}
if-no-files-found: error
test-results-preparation:
name: "Publish Tests Results"
needs: [ unittest ]
runs-on: ubuntu-22.04
steps:
- name: Event File
uses: actions/upload-artifact@v3
with:
name: Event File
path: ${{ github.event_path }}