Skip to content

Commit 06aa893

Browse files
authored
Merge pull request #37 from ketan/license-checker
Add a license checker for dependencies
2 parents da54e94 + cbc5dce commit 06aa893

File tree

4 files changed

+110
-1
lines changed

4 files changed

+110
-1
lines changed

build.gradle

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
import cd.go.plugin.buildsrc.license.NoticeFileGenerator
2+
import cd.go.plugin.buildsrc.license.TeeRenderer
3+
import com.github.jk1.license.render.SimpleHtmlReportRenderer
4+
5+
plugins {
6+
id "com.github.jk1.dependency-license-report"
7+
}
8+
19
group = 'com.thoughtworks.go'
210
version = '0.3.6'
311

@@ -18,7 +26,7 @@ repositories {
1826
dependencies {
1927
compile group: 'com.google.code.gson', name: 'gson', version: '2.6.2'
2028
compile group: 'commons-io', name: 'commons-io', version: '2.4'
21-
compile group: 'org.apache.ant', name: 'ant', version: '1.7.1'
29+
compile group: 'org.apache.ant', name: 'ant', version: '1.10.5'
2230
compile group: 'com.beust', name: 'jcommander', version: '1.72'
2331

2432
compileOnly group: 'cd.go.plugin', name: 'go-plugin-api', version: project.pluginDesc.goCdVersion
@@ -70,5 +78,15 @@ jar {
7078
attributes 'Main-Class': 'com.tw.go.config.json.cli.JsonPluginCli'
7179
}
7280

81+
from(generateLicenseReport) {
82+
into "dependency-license-report"
83+
exclude "NOTICE.txt"
84+
}
85+
7386
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
7487
}
88+
89+
90+
licenseReport {
91+
renderers = [new NoticeFileGenerator(new TeeRenderer(new SimpleHtmlReportRenderer()), "${project.buildDir}/reports/dependency-license/")]
92+
}

buildSrc/build.gradle

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apply plugin: 'groovy'
2+
3+
repositories {
4+
mavenCentral()
5+
gradlePluginPortal()
6+
}
7+
8+
dependencies {
9+
compile group: 'com.github.jk1.dependency-license-report', name: 'com.github.jk1.dependency-license-report.gradle.plugin', version: '1.3'
10+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package cd.go.plugin.buildsrc.license
2+
3+
import com.github.jk1.license.ProjectData
4+
import com.github.jk1.license.render.ReportRenderer
5+
import com.github.jk1.license.render.SingleInfoReportRenderer
6+
7+
class NoticeFileGenerator extends SingleInfoReportRenderer implements ReportRenderer {
8+
ReportRenderer toDecorate
9+
String licenseFolder
10+
11+
NoticeFileGenerator(ReportRenderer toDecorate, String licenseFolder) {
12+
this.toDecorate = toDecorate;
13+
this.licenseFolder = licenseFolder;
14+
}
15+
16+
@Override
17+
void render(ProjectData projectData) {
18+
toDecorate.render(projectData)
19+
20+
projectData.allDependencies.collect { data ->
21+
def noticeFile = new File(licenseFolder + 'NOTICE.txt')
22+
if (!data.licenseFiles.empty) {
23+
data.licenseFiles.first().files.collect { file ->
24+
if (new File(file).name.toLowerCase().contains("notice")) {
25+
noticeFile.append(new File(licenseFolder + file).getText('UTF-8'))
26+
noticeFile.append('\n')
27+
}
28+
}
29+
}
30+
}
31+
}
32+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package cd.go.plugin.buildsrc.license
2+
3+
import com.github.jk1.license.ProjectData
4+
import com.github.jk1.license.render.ReportRenderer
5+
import com.github.jk1.license.render.SingleInfoReportRenderer
6+
7+
class TeeRenderer extends SingleInfoReportRenderer implements ReportRenderer {
8+
ReportRenderer toDecorate
9+
def LICENSES = [
10+
'Apache License, Version 2.0',
11+
'Apache 2.0',
12+
'The Apache Software License, Version 2.0',
13+
'New BSD License'
14+
]
15+
16+
TeeRenderer(ReportRenderer toDecorate) {
17+
this.toDecorate = toDecorate;
18+
}
19+
20+
@Override
21+
void render(ProjectData projectData) {
22+
toDecorate.render(projectData)
23+
24+
def violations = []
25+
26+
projectData.allDependencies.collect { data ->
27+
28+
def moduleDesc = "${data.group}:${data.name}:${data.version}"
29+
30+
if (data.poms.empty) {
31+
violations << "POM file for ${moduleDesc} does not contain license information"
32+
}
33+
34+
def pomData = data.poms.first()
35+
if (pomData.licenses.empty) {
36+
violations << "POM file for ${moduleDesc} does not contain license information"
37+
}
38+
39+
def hasValidLicense = pomData.licenses.any { license -> LICENSES.contains(license.name) }
40+
if (!hasValidLicense) {
41+
violations << "Unsupported license '${pomData.licenses}', from module '${moduleDesc}'"
42+
}
43+
}
44+
45+
if (!violations.empty) {
46+
throw new RuntimeException("There were the following errors with enforcing licensing\n${violations.collect { "\t${it}" }.join("\n")}")
47+
}
48+
}
49+
}

0 commit comments

Comments
 (0)