Skip to content

Commit

Permalink
Feature - option to copy reports into variant-specific asset director…
Browse files Browse the repository at this point in the history
…ies (#58)

* added useVariantSpecificAssetDirs configuration option

* updated readme to group android-related options
  • Loading branch information
rabidaudio authored May 28, 2022
1 parent 56a1309 commit ec5f8ec
Show file tree
Hide file tree
Showing 5 changed files with 136 additions and 27 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -251,11 +251,14 @@ licenseReport {
copyHtmlReportToAssets = true
copyJsonReportToAssets = false
copyTextReportToAssets = false
useVariantSpecificAssetDirs = false
}
```

The `copyHtmlReportToAssets` option in the above example would have no effect since the HTML report is disabled.

The `useVariantSpecificAssetDirs` allows the reports to be copied into the source set asset directory of the variant. For example, `licensePaidProductionReleaseReport` would put the reports in `src/paidProductionRelease/assets`. They are copied into `src/main/assets` by default.

## Usage Example

### Create an open source dialog
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ open class BaseLicenseReportTask : DefaultTask() {
@Input var copyHtmlReportToAssets = false
@Input var copyJsonReportToAssets = false
@Input var copyTextReportToAssets = false
@Input var useVariantSpecificAssetDirs = false

init {
// From DefaultTask
Expand All @@ -38,5 +39,6 @@ open class BaseLicenseReportTask : DefaultTask() {
copyHtmlReportToAssets = extension.copyHtmlReportToAssets
copyJsonReportToAssets = extension.copyJsonReportToAssets
copyTextReportToAssets = extension.copyTextReportToAssets
useVariantSpecificAssetDirs = extension.useVariantSpecificAssetDirs
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ open class LicenseReportExtension { // extensions can't be final
*/
var copyJsonReportToAssets = false

/**
* Wheither when copying reports to the Android assets directory, it uses the variant-specific
* asset directory instead of main. Defaults to false.
*/
var useVariantSpecificAssetDirs = false

/**
* Whether or not the Text report should be copied to the Android assets directory. Ignored if the
* project is not an Android project. Has no effect if the Text report is disabled.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,10 @@ private fun Project.configureVariant(
}

tasks.register("license${name}Report", LicenseReportTask::class.java) {
val sourceSetName = if (it.useVariantSpecificAssetDirs) variant.name else "main"
it.assetDirs = baseExtension
.sourceSets
.getByName("main")
.getByName(sourceSetName)
.assets
.srcDirs
.toList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ final class LicensePluginAndroidSpec extends Specification {
private String mavenRepoUrl
private File buildFile
private String reportFolder
private String assetsFolder
private String srcFolder
private String mainAssetsFolder

def 'setup'() {
def pluginClasspathResource = getClass().classLoader.getResource('plugin-classpath.txt')
Expand All @@ -37,7 +38,8 @@ final class LicensePluginAndroidSpec extends Specification {
buildFile = testProjectDir.newFile('build.gradle')
// In case we're on Windows, fix the \s in the string containing the name
reportFolder = "${testProjectDir.root.path.replaceAll('\\\\', '/')}/build/reports/licenses"
assetsFolder = "${testProjectDir.root.path.replaceAll('\\\\', '/')}/src/main/assets"
srcFolder = "${testProjectDir.root.path.replaceAll('\\\\', '/')}/src"
mainAssetsFolder = "${srcFolder}/main/assets"
}

@Unroll def '#taskName that has no dependencies'() {
Expand Down Expand Up @@ -66,7 +68,7 @@ final class LicensePluginAndroidSpec extends Specification {
def result = gradleWithCommand(testProjectDir.root, "${taskName}", '-s')
def actualCsv = new File(reportFolder, "${taskName}.csv")
def actualHtml = new File(reportFolder, "${taskName}.html")
def openSourceHtml = new File(assetsFolder, "open_source_licenses.html")
def openSourceHtml = new File(mainAssetsFolder, "open_source_licenses.html")
def expectedHtml =
"""
<!DOCTYPE html>
Expand Down Expand Up @@ -145,7 +147,7 @@ final class LicensePluginAndroidSpec extends Specification {
def result = gradleWithCommand(testProjectDir.root, "${taskName}", '-s')
def actualCsv = new File(reportFolder, "${taskName}.csv")
def actualHtml = new File(reportFolder, "${taskName}.html")
def openSourceHtml = new File(assetsFolder, "open_source_licenses.html")
def openSourceHtml = new File(mainAssetsFolder, "open_source_licenses.html")
def expectedHtml =
"""
<!DOCTYPE html>
Expand Down Expand Up @@ -353,7 +355,7 @@ final class LicensePluginAndroidSpec extends Specification {
def result = gradleWithCommand(testProjectDir.root, "${taskName}", '-s')
def actualCsv = new File(reportFolder, "${taskName}.csv")
def actualHtml = new File(reportFolder, "${taskName}.html")
def openSourceHtml = new File(assetsFolder, "open_source_licenses.html")
def openSourceHtml = new File(mainAssetsFolder, "open_source_licenses.html")
def expectedHtml =
"""
<!DOCTYPE html>
Expand Down Expand Up @@ -500,7 +502,7 @@ final class LicensePluginAndroidSpec extends Specification {
def result = gradleWithCommand(testProjectDir.root, "${taskName}", '-s')
def actualCsv = new File(reportFolder, "${taskName}.csv")
def actualHtml = new File(reportFolder, "${taskName}.html")
def openSourceHtml = new File(assetsFolder, "open_source_licenses.html")
def openSourceHtml = new File(mainAssetsFolder, "open_source_licenses.html")
def expectedHtml =
"""
<!DOCTYPE html>
Expand Down Expand Up @@ -724,7 +726,7 @@ final class LicensePluginAndroidSpec extends Specification {
def result = gradleWithCommand(testProjectDir.root, "${taskName}", '-s')
def actualCsv = new File(reportFolder, "${taskName}.csv")
def actualHtml = new File(reportFolder, "${taskName}.html")
def openSourceHtml = new File(assetsFolder, "open_source_licenses.html")
def openSourceHtml = new File(mainAssetsFolder, "open_source_licenses.html")
def expectedHtml =
"""
<!DOCTYPE html>
Expand Down Expand Up @@ -865,7 +867,7 @@ final class LicensePluginAndroidSpec extends Specification {
def result = gradleWithCommand(testProjectDir.root, "${taskName}", '-s')
def actualCsv = new File(reportFolder, "${taskName}.csv")
def actualHtml = new File(reportFolder, "${taskName}.html")
def openSourceHtml = new File(assetsFolder, "open_source_licenses.html")
def openSourceHtml = new File(mainAssetsFolder, "open_source_licenses.html")
def expectedHtml =
"""
<!DOCTYPE html>
Expand Down Expand Up @@ -980,7 +982,7 @@ final class LicensePluginAndroidSpec extends Specification {
def result = gradleWithCommand(testProjectDir.root, "${taskName}", '-s')
def actualCsv = new File(reportFolder, "${taskName}.csv")
def actualHtml = new File(reportFolder, "${taskName}.html")
def openSourceHtml = new File(assetsFolder, "open_source_licenses.html")
def openSourceHtml = new File(mainAssetsFolder, "open_source_licenses.html")
def expectedHtml =
"""
<!DOCTYPE html>
Expand Down Expand Up @@ -1130,7 +1132,7 @@ final class LicensePluginAndroidSpec extends Specification {
def result = gradleWithCommand(testProjectDir.root, "${taskName}", '-s')
def actualCsv = new File(reportFolder, "${taskName}.csv")
def actualHtml = new File(reportFolder, "${taskName}.html")
def openSourceHtml = new File(assetsFolder, "open_source_licenses.html")
def openSourceHtml = new File(mainAssetsFolder, "open_source_licenses.html")
def expectedHtml =
"""
<!DOCTYPE html>
Expand Down Expand Up @@ -1271,7 +1273,7 @@ final class LicensePluginAndroidSpec extends Specification {
def result = gradleWithCommand(testProjectDir.root, "${taskName}", '-s')
def actualCsv = new File(reportFolder, "${taskName}.csv")
def actualHtml = new File(reportFolder, "${taskName}.html")
def openSourceHtml = new File(assetsFolder, "open_source_licenses.html")
def openSourceHtml = new File(mainAssetsFolder, "open_source_licenses.html")
def actualJson = new File(reportFolder, "${taskName}.json")
def actualText = new File(reportFolder, "${taskName}.txt")

Expand All @@ -1287,15 +1289,15 @@ final class LicensePluginAndroidSpec extends Specification {
actualText.exists()
if (copyEnabled) {
openSourceHtml.exists()
result.output.find("Copied CSV report to .*${assetsFolder}/open_source_licenses.csv.")
result.output.find("Copied HTML report to .*${assetsFolder}/open_source_licenses.html.")
result.output.find("Copied JSON report to .*${assetsFolder}/open_source_licenses.json.")
result.output.find("Copied Text report to .*${assetsFolder}/open_source_licenses.txt.")
result.output.find("Copied CSV report to .*${mainAssetsFolder}/open_source_licenses.csv.")
result.output.find("Copied HTML report to .*${mainAssetsFolder}/open_source_licenses.html.")
result.output.find("Copied JSON report to .*${mainAssetsFolder}/open_source_licenses.json.")
result.output.find("Copied Text report to .*${mainAssetsFolder}/open_source_licenses.txt.")
} else {
!result.output.find("Copied CSV report to .*${assetsFolder}/open_source_licenses.csv.")
!result.output.find("Copied HTML report to .*${assetsFolder}/open_source_licenses.html.")
!result.output.find("Copied JSON report to .*${assetsFolder}/open_source_licenses.json.")
!result.output.find("Copied Text report to .*${assetsFolder}/open_source_licenses.txt.")
!result.output.find("Copied CSV report to .*${mainAssetsFolder}/open_source_licenses.csv.")
!result.output.find("Copied HTML report to .*${mainAssetsFolder}/open_source_licenses.html.")
!result.output.find("Copied JSON report to .*${mainAssetsFolder}/open_source_licenses.json.")
!result.output.find("Copied Text report to .*${mainAssetsFolder}/open_source_licenses.txt.")
}

where:
Expand Down Expand Up @@ -1347,7 +1349,7 @@ final class LicensePluginAndroidSpec extends Specification {
def result = gradleWithCommand(testProjectDir.root, "${taskName}", '-s')
def actualCsv = new File(reportFolder, "${taskName}.csv")
def actualHtml = new File(reportFolder, "${taskName}.html")
def openSourceHtml = new File(assetsFolder, "open_source_licenses.html")
def openSourceHtml = new File(mainAssetsFolder, "open_source_licenses.html")
def actualJson = new File(reportFolder, "${taskName}.json")
def actualText = new File(reportFolder, "${taskName}.txt")

Expand All @@ -1362,16 +1364,111 @@ final class LicensePluginAndroidSpec extends Specification {
!actualJson.exists()
!result.output.find("Wrote Text report to .*${reportFolder}/${taskName}.txt.")
!actualText.exists()
!result.output.find("Copied CSV report to .*${assetsFolder}/open_source_licenses.csv.")
!result.output.find("Copied HTML report to .*${assetsFolder}/open_source_licenses.html.")
!result.output.find("Copied JSON report to .*${assetsFolder}/open_source_licenses.json.")
!result.output.find("Copied Text report to .*${assetsFolder}/open_source_licenses.txt.")
!result.output.find("Copied CSV report to .*${mainAssetsFolder}/open_source_licenses.csv.")
!result.output.find("Copied HTML report to .*${mainAssetsFolder}/open_source_licenses.html.")
!result.output.find("Copied JSON report to .*${mainAssetsFolder}/open_source_licenses.json.")
!result.output.find("Copied Text report to .*${mainAssetsFolder}/open_source_licenses.txt.")

where:
taskName << ['licenseDebugReport', 'licenseReleaseReport']
copyEnabled << [true, false]
}

@Unroll def '#taskName with variant-specific report'() {
given:
buildFile <<
"""
buildscript {
dependencies {
classpath files($classpathString)
}
}
repositories {
maven {
url '${mavenRepoUrl}'
}
}
apply plugin: 'com.android.application'
apply plugin: 'com.jaredsburrows.license'
android {
compileSdkVersion $compileSdkVersion
defaultConfig {
applicationId 'com.example'
}
buildTypes {
debug {}
release {}
}
flavorDimensions 'version'
productFlavors {
paid {
dimension "version"
}
free {
dimension "version"
}
}
}
dependencies {
implementation 'com.android.support:appcompat-v7:26.1.0'
debugImplementation 'com.android.support:design:26.1.0'
releaseImplementation 'com.android.support:design:26.1.0'
}
licenseReport {
generateCsvReport = true
generateHtmlReport = true
generateJsonReport = true
generateTextReport = true
copyCsvReportToAssets = true
copyHtmlReportToAssets = true
copyJsonReportToAssets = true
copyTextReportToAssets = true
useVariantSpecificAssetDirs = true
}
"""

when:
def result = gradleWithCommand(testProjectDir.root, "${taskName}", '-s')
def variantName = taskName.replaceFirst(/^license/, '')
.replaceFirst(/Report$/, '')
.uncapitalize()
def variantAssetFolder = "${srcFolder}/${variantName}/assets"
def copiedCsv = new File(variantAssetFolder, "open_source_licenses.csv")
def copiedHtml = new File(variantAssetFolder, "open_source_licenses.html")
def copiedJson = new File(variantAssetFolder, "open_source_licenses.json")
def copiedText = new File(variantAssetFolder, "open_source_licenses.txt")

then:
result.task(":${taskName}").outcome == SUCCESS
copiedCsv.exists()
result.output.find("Copied CSV report to .*${variantAssetFolder}/open_source_licenses.csv.")
copiedHtml.exists()
result.output.find("Copied HTML report to .*${variantAssetFolder}/open_source_licenses.html.")
copiedJson.exists()
result.output.find("Copied JSON report to .*${variantAssetFolder}/open_source_licenses.json.")
copiedText.exists()
result.output.find("Copied Text report to .*${variantAssetFolder}/open_source_licenses.txt.")

where:
taskName << [
"licensePaidDebugReport",
"licensePaidReleaseReport",
"licenseFreeDebugReport",
"licenseFreeReleaseReport"
]
}

@Unroll def '#taskName with android gradle plugin version < 7.1.0 (7.0.4)'() {
given:
def androidGradlePluginVersion = '7.0.4'
Expand Down Expand Up @@ -1415,7 +1512,7 @@ final class LicensePluginAndroidSpec extends Specification {
def result = gradleWithCommand(testProjectDir.root, "${taskName}", '-s')
def actualCsv = new File(reportFolder, "${taskName}.csv")
def actualHtml = new File(reportFolder, "${taskName}.html")
def openSourceHtml = new File(assetsFolder, "open_source_licenses.html")
def openSourceHtml = new File(mainAssetsFolder, "open_source_licenses.html")
def expectedHtml =
"""
<!DOCTYPE html>
Expand Down Expand Up @@ -1526,7 +1623,7 @@ final class LicensePluginAndroidSpec extends Specification {
def result = gradleWithCommand(testProjectDir.root, "${taskName}", '-s')
def actualCsv = new File(reportFolder, "${taskName}.csv")
def actualHtml = new File(reportFolder, "${taskName}.html")
def openSourceHtml = new File(assetsFolder, "open_source_licenses.html")
def openSourceHtml = new File(mainAssetsFolder, "open_source_licenses.html")
def expectedHtml =
"""
<!DOCTYPE html>
Expand Down

0 comments on commit ec5f8ec

Please sign in to comment.