Skip to content

Commit b9a89a2

Browse files
Merge pull request #141 from isaqb-org/replace_gradle_plugin
Replace gradle plugin
2 parents 23ff707 + cbe6b8a commit b9a89a2

File tree

2 files changed

+184
-88
lines changed

2 files changed

+184
-88
lines changed

build.gradle

Lines changed: 28 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -1,104 +1,44 @@
1-
import org.asciidoctor.gradle.jvm.AsciidoctorTask
21
import java.text.SimpleDateFormat
32

43
plugins {
5-
id "org.asciidoctor.jvm.base" version "3.3.2"
6-
id "org.asciidoctor.jvm.convert" version "3.3.2"
7-
id "org.asciidoctor.jvm.pdf" version "3.3.2"
4+
id "java"
5+
id "application"
86
}
7+
8+
def group = "org.isaqb"
9+
def releaseVersion = System.getenv("RELEASE_VERSION")
10+
def localVersion = "LocalBuild"
11+
project.version = releaseVersion == null ? localVersion : releaseVersion
12+
def curriculumFileName = "curriculum-template"
13+
def versionDate = new SimpleDateFormat("yyyyMMdd").format(new Date())
14+
def languages = ["DE", "EN"]
15+
916
repositories {
1017
mavenCentral()
1118
}
1219

13-
asciidoctorj {
14-
version = '2.5.3'
20+
dependencies {
21+
implementation("org.asciidoctor:asciidoctorj:2.5.10")
22+
implementation("org.asciidoctor:asciidoctorj-pdf:2.3.9")
1523
}
1624

17-
ext {
18-
today = new Date()
19-
versionDate = new SimpleDateFormat("yyyyMMdd").format(today)
20-
21-
releaseVersion = System.getenv("RELEASE_VERSION")
22-
localVersion = "LocalBuild"
23-
project.version = releaseVersion == null ? localVersion : releaseVersion;
24-
25-
curriculumFileName = "curriculum-template"
26-
addSuffixToCurriculum = { suffix ->
27-
for (extension in ["html", "pdf"]) {
28-
File source = new File("${buildDir}/${curriculumFileName}.${extension}")
29-
File target = new File("${buildDir}/${curriculumFileName}${suffix}.${extension}")
30-
31-
source.renameTo(target)
32-
}
33-
}
25+
application {
26+
mainClass.set("org.isaqb.asciidoc.Main")
27+
applicationDefaultJvmArgs = [
28+
"""-DprojectVersion=${project.version}""",
29+
"""-DcurriculumFileName=${curriculumFileName}""",
30+
"""-DversionDate=${versionDate}""",
31+
"""-Dlanguages=${languages.join(',')}""",
32+
"""--add-opens""", """java.base/sun.nio.ch=ALL-UNNAMED""",
33+
"""--add-opens""", """java.base/java.io=ALL-UNNAMED"""]
3434
}
3535

36+
apply from: 'scripts/includeLearningObjectives.gradle'
3637

37-
38-
39-
class RenderCurriculumTask extends AsciidoctorTask {
40-
@Inject
41-
RenderCurriculumTask(WorkerExecutor we, String curriculumFileName, String versionDate, String language) {
42-
super(we)
43-
44-
forkOptions {
45-
jvmArgs "--add-opens", "java.base/sun.nio.ch=ALL-UNNAMED", "--add-opens", "java.base/java.io=ALL-UNNAMED"
46-
}
47-
48-
49-
sourceDir = new File("./docs/")
50-
baseDir = new File ("./docs/")
51-
sources {
52-
include "index.adoc"
53-
include "${curriculumFileName}.adoc"
54-
}
55-
outputDir = new File("./build/")
56-
outputOptions {
57-
separateOutputDirs = false
58-
backends 'pdf', 'html5'
59-
}
60-
61-
def fileVersion = project.version.trim() + "-" + language
62-
63-
attributes = [
64-
'icons' : 'font',
65-
'version-label' : '',
66-
'revnumber' : fileVersion,
67-
'revdate' : versionDate,
68-
'document-version' : fileVersion + "-" + versionDate,
69-
'currentDate' : versionDate,
70-
'language' : language,
71-
'curriculumFileName': curriculumFileName,
72-
'debug_adoc' : false,
73-
'pdf-stylesdir' : '../pdf-theme/themes',
74-
'pdf-fontsdir' : '../pdf-theme/fonts',
75-
'pdf-style' : 'isaqb',
76-
'stylesheet' : '../html-theme/adoc-github.css',
77-
'stylesheet-dir' : '../html-theme'
78-
]
79-
}
80-
}
81-
82-
task buildDocs {
83-
group 'Documentation'
84-
description 'Grouping task for generating all languages in several formats'
85-
dependsOn "includeLearningObjectives", "renderDE", "renderEN"
86-
}
87-
88-
task renderDE(type: RenderCurriculumTask,
89-
constructorArgs: [curriculumFileName, versionDate, "DE"]) {
90-
doLast {
91-
addSuffixToCurriculum("-de")
92-
}
93-
}
94-
95-
task renderEN(type: RenderCurriculumTask,
96-
constructorArgs: [curriculumFileName, versionDate, "EN"]) {
97-
doLast {
98-
addSuffixToCurriculum("-en")
99-
}
38+
tasks.register('buildDocs') {
39+
description = 'Grouping task for generating all languages in several formats'
40+
group = 'documentation'
41+
dependsOn "includeLearningObjectives", "run"
10042
}
10143

102-
apply from: 'scripts/includeLearningObjectives.gradle'
103-
10444
defaultTasks "buildDocs"
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
package org.isaqb.asciidoc;
2+
3+
import org.asciidoctor.Asciidoctor;
4+
import org.asciidoctor.Attributes;
5+
import org.asciidoctor.Options;
6+
import org.asciidoctor.SafeMode;
7+
8+
import java.io.File;
9+
import java.util.HashMap;
10+
import java.util.List;
11+
import java.util.Map;
12+
import java.util.Objects;
13+
import java.util.stream.Stream;
14+
15+
import static org.asciidoctor.Asciidoctor.Factory.create;
16+
17+
public class Main {
18+
19+
private static final String PROJECT_VERSION = "projectVersion";
20+
private static final String CURRICULUM_FILE_NAME = "curriculumFileName";
21+
private static final String INDEX_FILE_NAME = "index";
22+
private static final String VERSION_DATE = "versionDate";
23+
private static final String LANGUAGES = "languages";
24+
private static final String[] FORMATS = {"html", "pdf"};
25+
26+
private static final String LANGUAGE_SEPERATOR = ",";
27+
28+
private static final String SOURCE_DIR = "./docs/";
29+
private static final String BASE_DIR = SOURCE_DIR;
30+
private static final String OUTPUT_DIR = "./build/";
31+
32+
private static final String ADOC = "adoc";
33+
private static final String HTML = "html";
34+
private static final String HTML5 = "html5";
35+
private static final String PDF = "pdf";
36+
private static final String ENGLISH = "EN";
37+
38+
public static void main(final String[] args) {
39+
Objects.requireNonNull(System.getProperty(PROJECT_VERSION));
40+
Objects.requireNonNull(System.getProperty(CURRICULUM_FILE_NAME));
41+
Objects.requireNonNull(System.getProperty(VERSION_DATE));
42+
Objects.requireNonNull(System.getProperty(LANGUAGES));
43+
44+
final String projectVersion = System.getProperty(PROJECT_VERSION);
45+
final String curriculumFileName = System.getProperty(CURRICULUM_FILE_NAME);
46+
final String versionDate = System.getProperty(VERSION_DATE);
47+
final String[] languages = System.getProperty(LANGUAGES).split(LANGUAGE_SEPERATOR);
48+
49+
Stream.of(languages).forEach(language -> convertInLanguage(
50+
language,
51+
projectVersion,
52+
curriculumFileName,
53+
versionDate
54+
));
55+
convertInLanguage(
56+
ENGLISH,
57+
projectVersion,
58+
INDEX_FILE_NAME,
59+
versionDate);
60+
}
61+
62+
private static void convertInLanguage(
63+
final String language,
64+
final String projectVersion,
65+
final String curriculumFileName,
66+
final String versionDate) {
67+
Stream.of(FORMATS).forEach(format -> convertInFormat(
68+
format, projectVersion,
69+
curriculumFileName,
70+
versionDate,
71+
language
72+
));
73+
}
74+
75+
private static void convertInFormat(
76+
final String format,
77+
final String projectVersion,
78+
final String curriculumFileName,
79+
final String versionDate,
80+
final String language) {
81+
try (final Asciidoctor asciidoctor = create()) {
82+
final Attributes attributes = toAttributes(
83+
projectVersion,
84+
curriculumFileName,
85+
versionDate,
86+
language);
87+
asciidoctor.convertDirectory(
88+
List.of(new File("%s%s.%s".formatted(
89+
SOURCE_DIR,
90+
curriculumFileName,
91+
ADOC))),
92+
Options.builder()
93+
.baseDir(new File(BASE_DIR))
94+
.backend(toBackend(format))
95+
.mkDirs(true)
96+
.attributes(attributes)
97+
.standalone(true)
98+
.toDir(new File(OUTPUT_DIR))
99+
.safe(SafeMode.UNSAFE)
100+
.build());
101+
renameResultAccordingToLanguage(curriculumFileName, format, language);
102+
}
103+
}
104+
105+
private static Attributes toAttributes(
106+
final String projectVersion,
107+
final String curriculumFileName,
108+
final String versionDate,
109+
final String language) {
110+
final String fileVersion = "%s - %s".formatted(projectVersion, language);
111+
final String documentVersion = "%s-%s".formatted(fileVersion, versionDate);
112+
113+
final Map<String, Object> attributes = new HashMap<>() {{
114+
put("icons" , "font");
115+
put("version-label" , "");
116+
put("revnumber" , fileVersion);
117+
put("revdate" , versionDate);
118+
put("document-version" , documentVersion);
119+
put("currentDate" , versionDate);
120+
put("language" , language);
121+
put("curriculumFileName", curriculumFileName);
122+
put("debug_adoc" , false);
123+
put("pdf-themesdir" , "../pdf-theme/themes");
124+
put("pdf-fontsdir" , "../pdf-theme/fonts");
125+
put("pdf-theme" , "isaqb");
126+
put("stylesheet" , "../html-theme/adoc-github.css");
127+
put("stylesheet-dir" , "../html-theme");
128+
put("data-uri" , true);
129+
put("allow-uri-read" , true);
130+
}};
131+
132+
return Attributes.builder().attributes(attributes).build();
133+
}
134+
135+
private static String toBackend(final String format) {
136+
return switch (format) {
137+
case HTML -> HTML5;
138+
case PDF -> PDF;
139+
default -> throw new IllegalArgumentException("Unknown target format %s".formatted(format));
140+
};
141+
}
142+
143+
private static void renameResultAccordingToLanguage(
144+
final String fileName,
145+
final String format,
146+
final String language) {
147+
final File original = new File("%s%s.%s".formatted(OUTPUT_DIR, fileName, format));
148+
final File renamed = new File("%s%s-%s.%s".formatted(OUTPUT_DIR, fileName, language.toLowerCase(), format));
149+
if (!original.exists()) {
150+
System.err.printf("Failed to rename result file %s as it does not exist", original.getAbsolutePath());
151+
} else if (!original.renameTo(renamed)) {
152+
System.err.printf("Failed to rename result file %s to %s%n", original.getName(), renamed.getName());
153+
}
154+
original.deleteOnExit();
155+
}
156+
}

0 commit comments

Comments
 (0)