Skip to content

Commit f3d74f3

Browse files
authored
ESQL: Fail build docs aren't up to date (elastic#131739)
Adds a new behavior to the esql build we enable in CI that, instead of generating the docs, asserts that they are already up to date.
1 parent c3dab39 commit f3d74f3

File tree

19 files changed

+253
-124
lines changed

19 files changed

+253
-124
lines changed

docs/reference/query-languages/esql/_snippets/functions/description/md5.md

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/query-languages/esql/_snippets/functions/examples/knn.md

Lines changed: 2 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/query-languages/esql/_snippets/functions/functionNamedParams/categorize.md

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/query-languages/esql/_snippets/functions/functionNamedParams/knn.md

Lines changed: 0 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/query-languages/esql/_snippets/functions/parameters/knn.md

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/query-languages/esql/kibana/definition/commands/rrf.json

Lines changed: 0 additions & 6 deletions
This file was deleted.

docs/reference/query-languages/esql/kibana/definition/functions/md5.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/query-languages/esql/kibana/docs/functions/md5.md

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

x-pack/plugin/esql/build.gradle

Lines changed: 58 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -94,37 +94,55 @@ interface Injected {
9494
}
9595

9696
tasks.named("test").configure {
97-
if (buildParams.ci == false) {
98-
systemProperty 'generateDocs', true
99-
def injected = project.objects.newInstance(Injected)
100-
// Define the folder to delete and recreate
101-
def tempDir = file("build/testrun/test/temp/esql")
102-
def commandsExamplesFile = new File(tempDir, "commands.examples")
103-
// Find all matching .md files for commands examples
104-
def mdFiles = fileTree("${rootDir}/docs/reference/query-languages/esql/_snippets/commands/examples/") {
105-
include("**/*.csv-spec/*.md")
97+
def injected = project.objects.newInstance(Injected)
98+
// Define the folder to delete and recreate
99+
def tempDir = file("build/testrun/test/temp/esql")
100+
def commandsExamplesFile = new File(tempDir, "commands.examples")
101+
// Find all matching .md files for commands examples
102+
def mdFiles = fileTree("${rootDir}/docs/reference/query-languages/esql/_snippets/commands/examples/") {
103+
include("**/*.csv-spec/*.md")
104+
}
105+
def esqlDocFolder = file("${rootDir}/docs/reference/query-languages/esql").toPath()
106+
def imagesDocFolder = file("${esqlDocFolder}/images")
107+
def snippetsDocFolder = file("${esqlDocFolder}/_snippets")
108+
def kibanaDocFolder = file("${esqlDocFolder}/kibana")
109+
File imagesFolder = file("build/testrun/test/temp/esql/images")
110+
File snippetsFolder = file("build/testrun/test/temp/esql/_snippets")
111+
File kibanaFolder = file("build/testrun/test/temp/esql/kibana")
112+
113+
doFirst {
114+
injected.fs.delete {
115+
it.delete(tempDir)
106116
}
107-
doFirst {
108-
injected.fs.delete {
109-
it.delete(tempDir)
110-
}
111-
// Re-create this folder so we can save a table of generated examples to extract from csv-spec tests
112-
tempDir.mkdirs() // Recreate the folder
117+
// Re-create this folder so we can save a table of generated examples to extract from csv-spec tests
118+
tempDir.mkdirs() // Recreate the folder
113119

114-
// Write directory name and filename of each .md file to the output file
115-
commandsExamplesFile.withWriter { writer ->
116-
mdFiles.each { file ->
117-
writer.writeLine("${file.parentFile.name}/${file.name}")
118-
}
120+
// Write directory name and filename of each .md file to the output file
121+
commandsExamplesFile.withWriter { writer ->
122+
mdFiles.each { file ->
123+
writer.writeLine("${file.parentFile.name}/${file.name}")
119124
}
120-
println "File 'commands.examples' created with ${mdFiles.size()} example specifications from csv-spec files."
121125
}
122-
File imagesFolder = file("build/testrun/test/temp/esql/images")
123-
File snippetsFolder = file("build/testrun/test/temp/esql/_snippets")
124-
File kibanaFolder = file("build/testrun/test/temp/esql/kibana")
125-
def imagesDocFolder = file("${rootDir}/docs/reference/query-languages/esql/images")
126-
def snippetsDocFolder = file("${rootDir}/docs/reference/query-languages/esql/_snippets")
127-
def kibanaDocFolder = file("${rootDir}/docs/reference/query-languages/esql/kibana")
126+
println "File 'commands.examples' created with ${mdFiles.size()} example specifications from csv-spec files."
127+
if (buildParams.ci) {
128+
injected.fs.sync {
129+
from snippetsDocFolder
130+
into snippetsFolder
131+
}
132+
injected.fs.sync {
133+
from imagesDocFolder
134+
into imagesFolder
135+
}
136+
injected.fs.sync {
137+
from kibanaDocFolder
138+
into kibanaFolder
139+
}
140+
}
141+
}
142+
if (buildParams.ci) {
143+
systemProperty 'generateDocs', 'assert'
144+
} else {
145+
systemProperty 'generateDocs', 'write'
128146
def snippetsTree = fileTree(snippetsFolder).matching {
129147
include "**/types/*.md" // Recursively include all types/*.md files (effectively counting functions and operators)
130148
}
@@ -229,9 +247,19 @@ tasks.named("test").configure {
229247
// This is similar to the test task above, but needed for the LookupJoinTypesIT which runs in the internalClusterTest task
230248
// and generates a types table for the LOOKUP JOIN command. It is possible in future we might have move tests that do this.
231249
tasks.named("internalClusterTest").configure {
232-
if (buildParams.ci == false) {
233-
systemProperty 'generateDocs', true
234-
def injected = project.objects.newInstance(Injected)
250+
def injected = project.objects.newInstance(Injected)
251+
File snippetsFolder = file("build/testrun/internalClusterTest/temp/esql/_snippets")
252+
def snippetsDocFolder = file("${rootDir}/docs/reference/query-languages/esql/_snippets")
253+
if (buildParams.ci) {
254+
systemProperty 'generateDocs', 'assert'
255+
doFirst {
256+
injected.fs.sync {
257+
from snippetsDocFolder
258+
into snippetsFolder
259+
}
260+
}
261+
} else {
262+
systemProperty 'generateDocs', 'write'
235263
// Define the folder to delete and recreate
236264
def tempDir = file("build/testrun/internalClusterTest/temp/esql")
237265
doFirst {
@@ -241,8 +269,6 @@ tasks.named("internalClusterTest").configure {
241269
// Re-create this folder so we can save a table of generated examples to extract from csv-spec tests
242270
tempDir.mkdirs() // Recreate the folder
243271
}
244-
File snippetsFolder = file("build/testrun/internalClusterTest/temp/esql/_snippets")
245-
def snippetsDocFolder = file("${rootDir}/docs/reference/query-languages/esql/_snippets")
246272
def snippetsTree = fileTree(snippetsFolder).matching {
247273
include "**/types/*.md" // Recursively include all types/*.md files (effectively counting functions and operators)
248274
}

x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/LookupJoinTypesIT.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,9 @@ private boolean isValidDataType(DataType dataType) {
768768
}
769769

770770
private static void saveJoinTypes(Supplier<Map<List<DataType>, DataType>> signatures) throws Exception {
771+
if (System.getProperty("generateDocs") == null) {
772+
return;
773+
}
771774
ArrayList<EsqlFunctionRegistry.ArgSignature> args = new ArrayList<>();
772775
args.add(new EsqlFunctionRegistry.ArgSignature("field from the left index", null, null, false, false));
773776
args.add(new EsqlFunctionRegistry.ArgSignature("field from the lookup index", null, null, false, false));
@@ -776,7 +779,8 @@ private static void saveJoinTypes(Supplier<Map<List<DataType>, DataType>> signat
776779
LookupJoinTypesIT.class,
777780
null,
778781
args,
779-
signatures
782+
signatures,
783+
DocsV3Support.callbacksFromSystemProperty()
780784
);
781785
docs.renderDocs();
782786
}

0 commit comments

Comments
 (0)