Update_settings #16
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| name: Build, Lint & Coverage | |
| on: | |
| push: | |
| branches: ["master"] | |
| pull_request: | |
| branches: ["master"] | |
| permissions: | |
| contents: read | |
| issues: read | |
| pull-requests: read | |
| env: | |
| BUILD_TYPE: Release | |
| # Apply linter fixes configuration | |
| # | |
| # When active, APPLY_FIXES must also be defined as environment variable | |
| # (in github/workflows/mega-linter.yml or other CI tool) | |
| APPLY_FIXES: all | |
| # Decide which event triggers application of fixes in a commit or a PR | |
| # (pull_request, push, all) | |
| APPLY_FIXES_EVENT: pull_request | |
| # If APPLY_FIXES is used, defines if the fixes are directly committed (commit) | |
| # or posted in a PR (pull_request) | |
| APPLY_FIXES_MODE: commit | |
| jobs: | |
| # Linting job with MegaLinter | |
| megalinter: | |
| name: MegaLinter | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| issues: write | |
| pull-requests: write | |
| steps: | |
| - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 | |
| with: | |
| fetch-depth: 0 | |
| - name: MegaLinter | |
| uses: oxsecurity/megalinter/flavors/c_cpp@55a59b24a441e0e1943080d4a512d827710d4a9d | |
| id: ml | |
| env: | |
| VALIDATE_ALL_CODEBASE: true | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # Disable specific linters | |
| 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 | |
| # Create pull request if applicable | |
| # (for now works only on PR from same repository, not from forks) | |
| - name: Create Pull Request with applied fixes | |
| uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e | |
| id: cpr | |
| if: >- | |
| steps.ml.outputs.has_updated_sources == 1 && | |
| ( | |
| env.APPLY_FIXES_EVENT == 'all' || | |
| env.APPLY_FIXES_EVENT == github.event_name | |
| ) && | |
| env.APPLY_FIXES_MODE == 'pull_request' && | |
| ( | |
| github.event_name == 'push' || | |
| github.event.pull_request.head.repo.full_name == github.repository | |
| ) && | |
| !contains(github.event.head_commit.message, 'skip fix') | |
| with: | |
| token: ${{secrets.GITHUB_TOKEN }} | |
| commit-message: "[MegaLinter] Apply linters automatic fixes" | |
| title: "[MegaLinter] Apply linters automatic fixes" | |
| labels: bot | |
| - name: Create PR output | |
| if: >- | |
| steps.ml.outputs.has_updated_sources == 1 && | |
| ( | |
| env.APPLY_FIXES_EVENT == 'all' || | |
| env.APPLY_FIXES_EVENT == github.event_name | |
| ) && | |
| env.APPLY_FIXES_MODE == 'pull_request' && | |
| ( | |
| github.event_name == 'push' || | |
| github.event.pull_request.head.repo.full_name == github.repository | |
| ) && | |
| !contains(github.event.head_commit.message, 'skip fix') | |
| run: | | |
| echo "PR Number - ${{ steps.cpr.outputs.pull-request-number }}" | |
| echo "PR URL - ${{ steps.cpr.outputs.pull-request-url }}" | |
| # Push new commit if applicable | |
| # (for now works only on PR from same repository, not from forks) | |
| - name: Prepare commit | |
| if: >- | |
| steps.ml.outputs.has_updated_sources == 1 && | |
| ( | |
| env.APPLY_FIXES_EVENT == 'all' || | |
| env.APPLY_FIXES_EVENT == github.event_name | |
| ) && | |
| env.APPLY_FIXES_MODE == 'commit' && | |
| github.ref != 'refs/heads/main' && | |
| ( | |
| github.event_name == 'push' || | |
| github.event.pull_request.head.repo.full_name == github.repository | |
| ) && | |
| !contains(github.event.head_commit.message, 'skip fix') | |
| run: sudo chown -Rc $UID .git/ | |
| - name: Commit and push applied linter fixes | |
| uses: stefanzweifel/git-auto-commit-action@28e16e81777b558cc906c8750092100bbb34c5e3 | |
| if: >- | |
| steps.ml.outputs.has_updated_sources == 1 && | |
| ( | |
| env.APPLY_FIXES_EVENT == 'all' || | |
| env.APPLY_FIXES_EVENT == github.event_name | |
| ) && | |
| env.APPLY_FIXES_MODE == 'commit' && | |
| github.ref != 'refs/heads/main' && | |
| ( | |
| github.event_name == 'push' || | |
| github.event.pull_request.head.repo.full_name == github.repository | |
| ) && | |
| !contains(github.event.head_commit.message, 'skip fix') | |
| with: | |
| branch: >- | |
| ${{ | |
| github.event.pull_request.head.ref || | |
| github.head_ref || | |
| github.ref | |
| }} | |
| commit_message: "[MegaLinter] Apply linters fixes" | |
| commit_user_name: megalinter-bot | |
| commit_user_email: [email protected] | |
| # Build, test and coverage job | |
| build-and-test: | |
| name: Build, Test & Coverage | |
| runs-on: ubuntu-latest | |
| needs: megalinter | |
| if: success() || failure() | |
| permissions: | |
| contents: read | |
| issues: write | |
| pull-requests: write | |
| 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@ed597411d8f924073f98dfc5c65a23a2325f34cd | |
| 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 |