fun checkDirs()

in tutorials/checker/build.gradle.kts [73:108]


fun checkDirs(dirs: List<String>, template: String, buildCmd: String, kotlinVersion: String?) {
  val snippets = findSnippets(dirs)
  snippets.forEachIndexed { index, snippet ->
    println("process snippet $index at ${snippet.file}:${snippet.lineNumber} with $template")
    snippet.tempDir = cloneTemplate(template, index, snippet.content)
    val isWin = System.getProperty("os.name").startsWith("Win")
    val args = buildList {
        if (isWin) {
            add("gradlew.bat")
        } else {
            add("bash")
            add("./gradlew")
        }

        add(buildCmd)

        kotlinVersion?.also {
            add("-Pkotlin.version=$it")
        }
        project.findProperty("compose.version")?.also {
            add("-Pcompose.version=$it")
        }
    }
    val proc = ProcessBuilder(*args.toTypedArray())
      .directory(snippet.tempDir)
      .redirectOutput(ProcessBuilder.Redirect.PIPE)
      .redirectError(ProcessBuilder.Redirect.PIPE)
      .start()
    proc.waitFor(5, TimeUnit.MINUTES)
    if (proc.exitValue() != 0) {
      println(proc.inputStream.bufferedReader().readText())
      println(proc.errorStream.bufferedReader().readText())
      maybeFail(snippet.file.parentFile.name, "Error in snippet at ${snippet.file}:${snippet.lineNumber}")
    }
  }
}