-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.gradle
126 lines (115 loc) · 3.55 KB
/
build.gradle
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
plugins {
id 'lifecycle-base'
id 'net.nokeedev.jbake-site'
id 'maven-publish'
}
/**
* Prepares ExecSpec for pandoc tool using host docker command.
*
* @param action additional ExecSpec configuration action, must not be null
* @return a ExecSpec configuration action, never null
*/
private static Action<ExecSpec> pandoc(Action<? super ExecSpec> action) {
return { spec ->
spec.commandLine('docker', 'run', '--rm', '--volume', "${spec.workingDir}:/data", 'pandoc/core')
action.execute(spec)
}
}
class MarkdownToAsciidocSpec {
File markdownFile
String asciidocPath
String bakeType
Map<String, String> attributes
}
/**
* Configures generic task to convert markdown to asciidoc file using pandoc.
*
* @param action configuration action for MarkdownToAsciidocSpec, must not be null
* @return an Task configuration action, never null
*/
private static Action<Task> convertMarkdownToAsciidoc(Action<? super MarkdownToAsciidocSpec> action) {
return { task ->
def spec = new MarkdownToAsciidocSpec()
action.execute(spec)
task.inputs.file(spec.markdownFile)
task.doLast {
def asciidocFile = new File(task.temporaryDir, spec.asciidocPath)
asciidocFile.parentFile.mkdirs()
asciidocFile.withOutputStream { outStream ->
def out = new PrintWriter(outStream)
out.println(':encoding: UTF-8')
out.println(':jbake-type: ' + spec.bakeType)
out.println(':jbake-status: published')
spec.attributes.forEach { k, v ->
out.println(":${k}: ${v}".toString())
}
out.flush()
project.exec(pandoc {
it.args('-t', 'asciidoc', '-f', 'markdown-smart', project.relativePath(spec.markdownFile))
it.workingDir(project.projectDir)
it.standardOutput(outStream)
})
}
asciidocFile.text = asciidocFile.text.replace('== ', '= ')
}
}
}
def convertTask = tasks.register('convert') { task ->
outputs.dir(project.layout.buildDirectory.dir("tmp/${task.name}"))
}
convertTask.configure(convertMarkdownToAsciidoc { spec ->
spec.markdownFile = project.file('CODE_OF_CONDUCT.md')
spec.asciidocPath = 'conduct/index.adoc'
spec.bakeType = 'conduct_page'
spec.attributes = [
'jbake-description': 'The contributor covenant Code of Conduct for the Nokee project.',
'jbake-tags': 'conduct, coc, contributor',
]
})
convertTask.configure(convertMarkdownToAsciidoc { spec ->
spec.markdownFile = project.file('SUPPORT.md')
spec.asciidocPath = 'support/index.adoc'
spec.bakeType = 'support_page'
spec.attributes = [
'jbake-description': 'Getting help with Nokee project.',
'jbake-tags': 'support, help',
]
})
jbake {
content.from(convertTask)
templates.from('templates')
configurations.putAll([
'render.encoding': 'UTF-8',
'render.tags': false,
'render.sitemap': false,
'render.index': false,
'render.archive': false,
'render.post': false,
'render.page': true,
'render.feed': false,
'template.conduct_page.file': 'page-conduct.tpl',
'template.support_page.file': 'page-support.tpl',
'site.host': 'https://nokee.dev/'
])
}
dependencies {
jbake project(':menu')
jbake project(':favicon')
jbake project(':meta-page-information')
jbake project(':meta-open-graph')
jbake project(':meta-twitter-card')
jbake project(':meta-encoding')
jbake project(':multi-language-sample')
jbake project(':asciidoc')
jbake project(':layout-main')
jbake project(':layout-page')
}
// Consumer will bake from content
((AdhocComponentWithVariants) components.jbake).withVariantsFromConfiguration(jbake.dependencies.bakedElements.get()) {
it.skip()
}
publishing {
publications.register('jbake', MavenPublication) {
from components.jbake
}
}