| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- name: Build, Lint & Coverage
- on:
- push:
- branches: [ "master" ]
- pull_request:
- branches: [ "master" ]
- env:
- BUILD_TYPE: Release
- jobs:
- # Linting job with MegaLinter
- megalinter:
- name: MegaLinter
- runs-on: ubuntu-latest
- permissions:
- contents: read
- issues: write
- pull-requests: write
- steps:
- - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3
- with:
- fetch-depth: 0
- - name: MegaLinter
- uses: oxsecurity/megalinter/flavors/c_cpp@v9.1.0
- env:
- VALIDATE_ALL_CODEBASE: true
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- # Use C/C++ flavor for faster execution
- MEGALINTER_FLAVOR: c_cpp
- # Enable specific linters you want
- ENABLE_LINTERS: C_CPPLINT,C_CPPCHECK,C_CLANG_FORMAT
- # Optional: disable linters you don't need
- DISABLE_LINTERS: SPELL_CSPELL
- # Fail on errors (set to false if you want warnings only)
- DISABLE_ERRORS: false
- - name: Archive MegaLinter reports
- if: always()
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
- with:
- name: megalinter-reports
- path: |
- megalinter-reports
- mega-linter.log
- # Build, test and coverage job
- build-and-test:
- name: Build, Test & Coverage
- runs-on: ubuntu-latest
- needs: megalinter
- if: success() || failure()
- steps:
- - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3
- with:
- fetch-depth: 0
- - name: Install dependencies
- run: |
- sudo apt-get update
- sudo apt-get install -y \
- libcap-dev \
- lcov \
- cpputest
- - name: Set up Python for gcovr
- uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548
- with:
- python-version: '3.11'
- - name: Install gcovr
- run: pip install gcovr
- - name: Configure CMake
- run: |
- cmake -S ${{github.workspace}}/source \
- -B ${{github.workspace}}/build \
- -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} \
- -DOpENer_PLATFORM:STRING="POSIX" \
- -DBUILD_SHARED_LIBS:BOOL=OFF \
- -DOpENer_TRACES:BOOL=OFF \
- -DOpENer_TESTS:BOOL=ON \
- -DCPPUTEST_HOME:PATH=/usr
- - name: Build
- run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}
- - name: Test
- working-directory: ${{github.workspace}}/build
- run: ctest -C ${{env.BUILD_TYPE}} --output-on-failure
- - name: Generate coverage reports
- run: |
- # Generate HTML report for human viewing
- gcovr --html-details --output coverage-report.html
- # Generate Cobertura XML for tools/badges
- gcovr --cobertura --output coverage.xml
- # Generate text summary for console
- gcovr --print-summary > coverage-summary.txt
- # Print summary to console
- echo "Coverage Summary:"
- cat coverage-summary.txt
- - name: Upload coverage reports
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
- with:
- name: coverage-report
- path: |
- coverage-report.html
- coverage-report.*.html
- coverage.xml
- coverage-summary.txt
- - name: Create coverage summary comment
- if: github.event_name == 'pull_request'
- uses: actions/github-script@v7
- with:
- script: |
- const fs = require('fs');
- const summary = fs.readFileSync('coverage-summary.txt', 'utf8');
- const comment = `## 📊 Coverage Report\n\n\`\`\`\n${summary}\n\`\`\`\n\nDownload the [detailed HTML report](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) from the artifacts.`;
- github.rest.issues.createComment({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body: comment
- });
- - name: Generate coverage badge
- if: github.ref == 'refs/heads/master'
- run: |
- # Extract coverage percentage
- COVERAGE=$(gcovr --print-summary | grep 'lines:' | awk '{print $2}')
- echo "COVERAGE_PERCENTAGE=$COVERAGE" >> $GITHUB_ENV
- echo "Coverage: $COVERAGE"
- - name: Upload build artifacts
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
- with:
- name: build-artifacts
- path: ${{github.workspace}}/build
|