# coverage_report_parser This is a tool to read test coverages of xcresult bundle and generate a json report. This json report will be sent to Metrics Service to create a coverage report as a comment in a PR or to update the coverage database. ## Usage This is tool will be used for both pull_request and merge. Common flags are shown below. ``` swift run CoverageReportGenerator --presubmit "${REPO}" --commit "${GITHUB_SHA}" --token "${TOKEN}" \ --xcresult-dir "${XCRESULT_DIR}" --log-link "${}" --pull-request-num "${PULL_REQUEST_NUM}" \ --base-commit "${BASE_COMMIT}" --branch "${BRANCH}" ``` Common parameters for both pull_request and merge: - `presubmit/merge`: A required flag to know if the request is for pull requests or merge. - `REPO`: A required argument for a repo where coverage data belong. - `commit`: The current commit sha. - `token`: A token to access a service account of Metrics Service - `xcresult-dir`: A directory containing all xcresult bundles. ### Create a report in a pull request In a workflow, this will run for each pull request update. The command below will generate a report in a PR. After a workflow of test coverage is done, a new coverage report will be posted on a comment of a pull request. If such comment has existed, this comment will be overriden by the latest report. Since the flag is `presubmit` here, the following options are required for a PR request: - `log-link`: Log link to unit tests. This is generally a actions/runs/ link in GitHub Actions. - `pull-request-num`: A report will be posted in this pull request. - `base-commit`: The commit sha used to compare the diff of the current`commit`. An example in a GitHub Actions workflow: ``` swift run CoverageReportGenerator --presubmit "firebase/firebase-ios-sdk" --commit "${GITHUB_SHA}" \ --token $(gcloud auth print-identity-token) --xcresult-dir "/Users/runner/test/codecoverage" \ --log-link "https://github.com/firebase/firebase-ios-sdk/actions/runs/${GITHUB_RUN_ID}" \ --pull-request-num ${{github.event.pull_request.number}} --base-commit "$base_commit" ``` ### Add new coverage data to the storage of Metrics Service In a workflow, this will run in merge events or postsubmit tests. After each merge, all pod tests will run to add a new commit and its corresponding coverage data. ``` swift run CoverageReportGenerator --merge "firebase/firebase-ios-sdk" --commit "${GITHUB_SHA}" \ --token $(gcloud auth print-identity-token) --xcresult-dir "/Users/runner/test/codecoverage" \ --log-link "https://github.com/firebase/firebase-ios-sdk/actions/runs/${GITHUB_RUN_ID}" --branch \ "${GITHUB_REF##*/}" ``` - `branch`: this is for merge and the new commit with coverage data will be linked with the branch in the database of Metrics Service. ### Details More details in go/firebase-ios-sdk-test-coverage-metrics. Can also run `swift run CoverageReportGenerator -h` for help info.