diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml index bd613d6d..3dc34027 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/coverage.yaml @@ -43,23 +43,20 @@ jobs: sleep 5 done - - name: Run unit tests and generate coverage + - name: Run tests and generate coverage with Melos run: | - melos exec rm -rf coverage - melos run unit_test - - - name: Create coverage directory - run: mkdir -p coverage - - - name: Calculate and merge coverage - if: success() - run: | - melos exec --dir-exists="coverage" -- bash -c 'dart pub global run coverde filter --input coverage/lcov.info --output coverage/filtered.lcov.info --filters .g.dart' - melos exec --dir-exists="coverage" -- bash -c 'dart pub global run coverde value -i coverage/filtered.lcov.info > coverage/result.txt' + dart pub global activate coverage + dart pub global activate coverde + melos run unit_test_and_coverage + + - name: Debug Coverage Directory + run: ls -lh coverage && head -n 20 coverage/lcov.info || true - name: Upload coverage to Codecov if: success() uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }} - files: coverage/filtered.lcov.info + files: ./coverage/filtered.lcov.info + fail_ci_if_error: true + diff --git a/melos.yaml b/melos.yaml index b4e8d218..186c0328 100644 --- a/melos.yaml +++ b/melos.yaml @@ -10,9 +10,29 @@ scripts: run: melos exec --dir-exists="test" --fail-fast -- dart test --concurrency=1 description: Run all Dart tests in this project sequentially. unit_test_and_coverage: - description: Merge all packages coverage trace files ignoring data related to generated files. + description: Merge all packages coverage trace files and filter out generated code and generated folders. run: | - melos exec rm -rf coverage - melos run unit_test - melos exec -c 1 --file-exists=coverage/lcov.info -- coverde filter --input ./coverage/lcov.info --output MELOS_ROOT_PATH/coverage/filtered.lcov.info --filters \.g\.dart - coverde value -i coverage/filtered.lcov.info > MELOS_ROOT_PATH/coverage/result.txt + mkdir -p coverage + melos exec --dir-exists="test" -- dart test --coverage=coverage --concurrency=1 + # Collect all raw .json files from package coverage folders + find . -name "*.json" -path "*/coverage/*.json" -exec cp {} coverage/ \; + # Convert to LCOV format + dart pub global run coverage:format_coverage \ + --lcov \ + --in=coverage \ + --out=coverage/lcov.info + # Filter out generated files + dart pub global run coverde filter \ + --input coverage/lcov.info \ + --output coverage/filtered.lcov.info \ + --filters '.g.dart,lib/generated/' \ + --paths-parent $PWD + # Print summary report + dart pub global run coverde value \ + -i coverage/filtered.lcov.info \ + > coverage/result.txt + + + + +