diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ed4fe9d..adbfe46c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,5 +1,8 @@ name: Full CI -on: [push] +on: [push, pull_request] + +permissions: + pull-requests: write jobs: formatter: @@ -7,6 +10,8 @@ jobs: unit-test: uses: ./.github/workflows/pytest.yml + with: + pr_number: ${{ github.event.pull_request.number }} unit-test-matrix: uses: ./.github/workflows/pytest-matrix.yml diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 75e9b537..0226e64f 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -1,5 +1,15 @@ name: Run Pytest with Coverage -on: [workflow_call] +on: + workflow_call: + inputs: + pr_number: + description: 'Pull request number' + required: false + type: number + + +permissions: + pull-requests: write jobs: pytest: @@ -40,13 +50,46 @@ jobs: pip install -e .[dev,pyside6] - name: Run Pytest with Coverage + id: coverage run: | pip install coverage pytest pytest-random-order coverage run --source=./bec_widgets -m pytest -v --junitxml=report.xml --maxfail=2 --random-order --full-trace ./tests/unit_tests - coverage report - coverage xml - - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v5 + + full_report=$(coverage report) + coverage xml -i -o coverage.cobertura.xml + + # Extract total coverage % + COVERAGE=$(echo "$full_report" | grep TOTAL | awk '{print $4}' | sed 's/%//') + echo "coverage=$COVERAGE" >> $GITHUB_OUTPUT + + - name: Code Coverage Summary Report + uses: irongut/CodeCoverageSummary@v1.3.0 with: - token: ${{ secrets.CODECOV_TOKEN }} - slug: bec-project/bec_widgets \ No newline at end of file + filename: coverage.cobertura.xml + format: 'markdown' + output: 'both' + + - name: Format Coverage Report + shell: bash + run: | + tmpfile=$(cat code-coverage-results.md) + echo "## Code Coverage Report" > code-coverage-results-formatted.md + echo "![Coverage Badge](https://img.shields.io/badge/coverage-${{ steps.coverage.outputs.coverage }}%25-brightgreen)" >> code-coverage-results-formatted.md + echo "
" >> code-coverage-results-formatted.md + echo "Code Coverage" >> code-coverage-results-formatted.md + echo >> code-coverage-results-formatted.md + echo >> code-coverage-results-formatted.md + echo "$tmpfile" >> code-coverage-results-formatted.md + echo "
" >> code-coverage-results-formatted.md + + - name: Add Coverage PR Comment + if: ${{ github.event_name == 'pull_request' }} + uses: marocchino/sticky-pull-request-comment@v2 + with: + number: ${{ github.event.pull_request.number }} + recreate: true + path: code-coverage-results-formatted.md + + - name: Write Coverage to Job Summary + shell: bash + run: cat code-coverage-results.md >> $GITHUB_STEP_SUMMARY \ No newline at end of file