-
Notifications
You must be signed in to change notification settings - Fork 35
/
AllureReport.groovy
101 lines (82 loc) · 2.88 KB
/
AllureReport.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package io.qameta.allure.gradle.task
import io.qameta.allure.gradle.AllureExtension
import io.qameta.allure.gradle.AllureReportContainer
import io.qameta.allure.gradle.util.BuildUtils
import org.gradle.api.Action
import org.gradle.api.DefaultTask
import org.gradle.api.internal.ClosureBackedAction
import org.gradle.api.reporting.Reporting
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import java.nio.file.Files
import java.nio.file.Path
import static io.qameta.allure.gradle.util.BuildUtils.copyCategoriesInfo
import static io.qameta.allure.gradle.util.BuildUtils.copyExecutorInfo
/**
* @author Egor Borisov ehborisov@gmail.com
*/
class AllureReport extends DefaultTask implements Reporting<AllureReportContainer> {
static final String NAME = 'allureReport'
static final String GENERATE_COMMAND = 'generate'
@OutputDirectory
File reportDir
@Input
boolean clean
@Input
String version
@InputFiles
List<File> resultsDirs = []
AllureReport() {
dependsOn(DownloadAllure.NAME)
configureDefaults()
}
@TaskAction
void generateAllureReport() {
Path allureHome = project.rootDir.toPath().resolve('.allure').resolve("allure-${version}")
Path allureExecutable = allureHome.resolve('bin').resolve(BuildUtils.allureExecutable).toAbsolutePath()
if (Files.notExists(allureExecutable)) {
logger.warn("Cannot find allure commanline in $allureHome")
return
}
allureExecutable.toFile().setExecutable(true)
project.exec {
commandLine("$allureExecutable")
args(GENERATE_COMMAND)
resultsDirs.each {
copyCategoriesInfo(it, project)
copyExecutorInfo(it, project)
args("$it.absolutePath")
}
args('-o', "$reportDir.absolutePath")
if (clean) {
args('--clean')
}
}
}
private void configureDefaults() {
AllureExtension allureExtension = project.extensions.findByType(AllureExtension)
if (Objects.nonNull(extensions)) {
resultsDirs.add(allureExtension.resultsDir)
reportDir = allureExtension.reportDir
version = allureExtension.version
clean = allureExtension.clean
}
}
@Internal
@Override
AllureReportContainer getReports() {
return new AllureReportContainer(this)
}
@Override
AllureReportContainer reports(Closure closure) {
return reports(new ClosureBackedAction<AllureReportContainer>(closure))
}
@Override
AllureReportContainer reports(Action<? super AllureReportContainer> configureAction) {
configureAction.execute(reports)
return reports
}
}