Skip to content

Fix for coverage collection. #490

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 7, 2019
Merged

Fix for coverage collection. #490

merged 2 commits into from
Jun 7, 2019

Conversation

yifanyang
Copy link
Contributor

@yifanyang yifanyang commented Jun 5, 2019

Fix failing task :tools:measurement:apksize:preFirestoreAggressiveBuild.
Make coverage task depend on only firebase product check tasks.

The tasks dependency graph previously looks like:

:tools:measurement:coverage:uploadCoverageMeasurements
\--- :tools:measurement:coverage:generateCoverageMeasurements
     +--- :fiamui-app:checkCoverage
     |    \--- :fiamui-app:check ..>
     +--- :firebase-common:checkCoverage
     |    \--- :firebase-common:check ..>
     +--- :firebase-database:checkCoverage
     |    \--- :firebase-database:check ..>
     +--- :firebase-database-collection:checkCoverage
     |    \--- :firebase-database-collection:check ..>
     +--- :firebase-datatransport:checkCoverage
     |    \--- :firebase-datatransport:check ..>
     +--- :firebase-firestore:checkCoverage
     |    \--- :firebase-firestore:check ..>
     +--- :firebase-functions:checkCoverage
     |    \--- :firebase-functions:check ..>
     +--- :firebase-inappmessaging-display:checkCoverage
     |    \--- :firebase-inappmessaging-display:check ..>
     +--- :firebase-storage:checkCoverage
     |    \--- :firebase-storage:check ..>
     +--- :protolite-well-known-types:checkCoverage
     |    \--- :protolite-well-known-types:check ..>
     +--- :tools:checkCoverage
     |    \--- :tools:check ..>
     +--- :transport:checkCoverage
     |    \--- :transport:check ..>
     +--- :firebase-common:ktx:checkCoverage
     |    \--- :firebase-common:ktx:check ..>
     +--- :firebase-firestore:ktx:checkCoverage
     |    \--- :firebase-firestore:ktx:check ..>
     +--- :firebase-functions:ktx:checkCoverage
     |    \--- :firebase-functions:ktx:check ..>
     +--- :firebase-storage:test-app:checkCoverage
     |    \--- :firebase-storage:test-app:check ..>
     +--- :tools:errorprone:checkCoverage
     |    \--- :tools:errorprone:check ..>
     +--- :tools:errorprone:jacocoTestReport
     |    \--- :tools:errorprone:classes ..>
     +--- :tools:lint:checkCoverage
     |    \--- :tools:lint:check ..>
     +--- :tools:lint:jacocoTestReport
     |    +--- :tools:lint:classes ..>
     |    \--- :tools:lint:compileKotlin
     +--- :tools:measurement:checkCoverage
     |    \--- :tools:measurement:check ..>
     +--- :transport:transport-api:checkCoverage
     |    \--- :transport:transport-api:check ..>
     +--- :transport:transport-backend-cct:checkCoverage
     |    \--- :transport:transport-backend-cct:check ..>
     +--- :transport:transport-runtime:checkCoverage
     |    \--- :transport:transport-runtime:check ..>
     +--- :tools:measurement:apksize:checkCoverage
     |    \--- :tools:measurement:apksize:check ..>
     \--- :tools:measurement:coverage:checkCoverage
          \--- :tools:measurement:coverage:check ..>

Now it looks like:

:tools:measurement:coverage:uploadCoverageMeasurements
\--- :tools:measurement:coverage:generateCoverageMeasurements
     +--- :firebase-common:checkCoverage
     |    \--- :firebase-common:check ..>
     +--- :firebase-database:checkCoverage
     |    \--- :firebase-database:check ..>
     +--- :firebase-database-collection:checkCoverage
     |    \--- :firebase-database-collection:check ..>
     +--- :firebase-datatransport:checkCoverage
     |    \--- :firebase-datatransport:check ..>
     +--- :firebase-firestore:checkCoverage
     |    \--- :firebase-firestore:check ..>
     +--- :firebase-functions:checkCoverage
     |    \--- :firebase-functions:check ..>
     +--- :firebase-inappmessaging-display:checkCoverage
     |    \--- :firebase-inappmessaging-display:check ..>
     +--- :firebase-storage:checkCoverage
     |    \--- :firebase-storage:check ..>
     +--- :protolite-well-known-types:checkCoverage
     |    \--- :protolite-well-known-types:check ..>
     +--- :firebase-common:ktx:checkCoverage
     |    \--- :firebase-common:ktx:check ..>
     +--- :firebase-firestore:ktx:checkCoverage
     |    \--- :firebase-firestore:ktx:check ..>
     +--- :firebase-functions:ktx:checkCoverage
     |    \--- :firebase-functions:ktx:check ..>
     +--- :transport:transport-api:checkCoverage
     |    \--- :transport:transport-api:check ..>
     +--- :transport:transport-backend-cct:checkCoverage
     |    \--- :transport:transport-backend-cct:check ..>
     \--- :transport:transport-runtime:checkCoverage
          \--- :transport:transport-runtime:check ..>

@@ -21,7 +21,11 @@ task generateCoverageMeasurements(type: GenerateMeasurementsTask) {
description 'Runs checkCoverage task in all projects and calculates coverage percents.'
group 'Measurements'

dependsOn rootProject.allprojects.collect { it.tasks.withType(JacocoReport) }.flatten()
dependsOn rootProject.allprojects.findAll {
it.path.startsWith(':firebase-')
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The intention here is to only depend on check tasks of firebase products instead of all. Is there a more reliant way to distinguish firebase products from other utility subprojects?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can check if the projects are using the Firebase library plugin. This plugin encapsulates some of the release and testing logic, and we only use it on the actual Firebase projects.

project.extensions.findByType(FirebaseLibraryExtension.class) != null should do the trick.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like all below projects have this plugin:

project ':firebase-common'
project ':firebase-database'
project ':firebase-database-collection'
project ':firebase-datatransport'
project ':firebase-firestore'
project ':firebase-functions'
project ':firebase-inappmessaging-display'
project ':firebase-storage'
project ':protolite-well-known-types'
project ':firebase-common:ktx'
project ':firebase-firestore:ktx'
project ':firebase-functions:ktx'
project ':transport:transport-api'
project ':transport:transport-backend-cct'
project ':transport:transport-runtime'

by running

rootProject.allprojects.findAll { it.extensions.findByType(FirebaseLibraryExtension) != null }.forEach { println it }

Anyway to exclude :protolite-well-known-types, :transport:transport-api, :transport:transport-backend-cct, and :transport:transport-runtime?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should include those. The transport ones are part of Firelog. Any reason for excluding?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. Discussed offline.

Fix failing task `:tools:measurement:apksize:preFirestoreAggressiveBuild`.
Make coverage task depend on only firebase product check tasks.
@yifanyang yifanyang force-pushed the yifany-fix-coverage branch from 4f82b9b to e908e51 Compare June 5, 2019 23:09
@yifanyang yifanyang marked this pull request as ready for review June 5, 2019 23:11
@yifanyang yifanyang merged commit fd463c1 into master Jun 7, 2019
@yifanyang yifanyang deleted the yifany-fix-coverage branch June 7, 2019 00:26
@firebase firebase locked and limited conversation to collaborators Oct 10, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants