Skip to content

Commit

Permalink
Docusaurus Working Directories (#17)
Browse files Browse the repository at this point in the history
  • Loading branch information
mfwgenerics authored Feb 18, 2023
1 parent 654cfa6 commit 7d5c5f2
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 16 deletions.
2 changes: 1 addition & 1 deletion markout-docusaurus-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ plugins {
dependencies {
implementation("com.github.node-gradle:gradle-node-plugin:3.5.1")
implementation("io.koalaql:kapshot-plugin-gradle:0.1.1")
implementation("io.koalaql:markout-plugin")
implementation("io.koalaql:markout-plugin:${project.version}")
}

pluginBundle {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ import com.github.gradle.node.variant.VariantComputer
import com.github.gradle.node.yarn.exec.YarnExecRunner
import org.gradle.api.Plugin
import org.gradle.api.Project

import com.github.gradle.node.yarn.task.YarnTask
import io.koalaql.markout_plugin.BuildConfig
import org.gradle.api.Action
import org.gradle.api.DefaultTask
import org.gradle.api.file.Directory
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.ProviderFactory
import org.gradle.api.tasks.Input
Expand All @@ -26,10 +26,13 @@ import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
import org.gradle.process.ExecResult
import org.gradle.process.ExecSpec
import java.io.File
import java.nio.file.Path
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicReference
import javax.inject.Inject
import kotlin.concurrent.thread
import org.gradle.api.provider.Provider
import kotlin.io.readLines

class StopHandle {
private companion object {
Expand Down Expand Up @@ -173,14 +176,10 @@ abstract class RunDocusaurus: DefaultTask() {
)
}
} else {
project.logger.warn("""
WARNING: $path was run non-continuously and will not hot reload changes
WARNING: You probably want to run this with `./gradlew $path --continuous` instead
error("""
ERROR: $path was run non-continuously and will not hot reload changes
ERROR: You want to run this with `./gradlew $path --continuous` instead
""".trimIndent())

val start = buildYarnStart()

start()
}
}
}
Expand All @@ -198,11 +197,24 @@ class GradlePlugin: Plugin<Project> {

extensions.configure(NodeExtension::class.java) {
it.download.set(true)
it.nodeProjectDir.set(File("$rootDir/docusaurus"))
}

val workingDirProvider = layout
.buildDirectory
.file("markout/paths.txt")
.flatMap { file -> project.layout.buildDirectory.dir(file
.asFile
.readLines()
.asSequence()
.filter { it.endsWith("/docusaurus.config.js") }
.firstOrNull()
?.removeSuffix("/docusaurus.config.js")
?: error("No docusaurus directory configured")
) }

tasks.register("docusaurusInstall", YarnTask::class.java) {
it.dependsOn("markout")
it.workingDir.set(workingDirProvider)

it.args.set(listOf(
"--silent",
Expand All @@ -214,6 +226,7 @@ class GradlePlugin: Plugin<Project> {

tasks.register("docusaurusCheckInstall", YarnTask::class.java) {
it.dependsOn("markoutCheck")
it.workingDir.set(workingDirProvider)

it.args.set(listOf(
"--silent",
Expand All @@ -226,6 +239,7 @@ class GradlePlugin: Plugin<Project> {
tasks.register<RunDocusaurus>("docusaurusStart", RunDocusaurus::class.java) {
it.dependsOn("docusaurusInstall")
it.dependsOn("markout")
it.workingDir.set(workingDirProvider)

it.doLast {
gradle.startParameter.setExcludedTaskNames(
Expand All @@ -237,6 +251,7 @@ class GradlePlugin: Plugin<Project> {
tasks.register("docusaurusBuild", YarnTask::class.java) {
it.dependsOn("markoutCheck")
it.dependsOn("docusaurusCheckInstall")
it.workingDir.set(workingDirProvider)

it.args.set(listOf(
"--silent",
Expand Down
31 changes: 26 additions & 5 deletions markout-plugin/src/main/kotlin/io/koalaql/markout/GradlePlugin.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,32 @@
package io.koalaql.markout

import org.gradle.api.DefaultTask
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.tasks.JavaExec
import java.util.concurrent.Callable
import io.koalaql.markout_plugin.BuildConfig
import org.gradle.api.*
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.OutputFile

open class MarkoutExecTask: JavaExec() {
@Internal
val markoutBuildDir = project
.buildDir
.toPath()
.resolve("markout")

@OutputFile
val outputPath = project.buildDir.toPath().resolve("markout/paths.txt")

override fun exec() {
markoutBuildDir.toFile().apply {
deleteRecursively()
mkdir()
}

super.exec()
}
}

class GradlePlugin: Plugin<Project> {
override fun apply(target: Project) = with(target) {
Expand All @@ -24,8 +44,8 @@ class GradlePlugin: Plugin<Project> {
}
}

fun execTask(name: String, builder: (JavaExec) -> Unit) = tasks
.register(name, JavaExec::class.java) {
fun execTask(name: String, builder: (MarkoutExecTask) -> Unit) = tasks
.register(name, MarkoutExecTask::class.java) {
val ext = target.extensions.getByType(MarkoutConfig::class.java)

it.group = "markout"
Expand All @@ -39,6 +59,7 @@ class GradlePlugin: Plugin<Project> {
.runtimeClasspath
})

it.environment("MARKOUT_BUILD_DIR", "${it.markoutBuildDir}")
it.environment("MARKOUT_PATH", (ext.rootDir ?: rootDir).absolutePath)

if (ext.mainClass != null) it.mainClass.set(ext.mainClass)
Expand Down
3 changes: 3 additions & 0 deletions markout/src/main/kotlin/io/koalaql/markout/ActionableFiles.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ class ActionableFiles(
return paths.mapNotNull { (path, action) -> action.perform(path) }
}

fun paths(): List<Path> =
paths.asSequence().map { it.key }.toList()

fun expect(): List<Diff> {
val visited = linkedMapOf<Path, Boolean>()

Expand Down
11 changes: 10 additions & 1 deletion markout/src/main/kotlin/io/koalaql/markout/Markout.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import java.io.OutputStream
import java.nio.file.Files
import java.nio.file.NoSuchFileException
import java.nio.file.Path
import java.nio.file.StandardOpenOption
import kotlin.io.path.*

@MarkoutDsl
Expand Down Expand Up @@ -46,7 +47,9 @@ interface Markout {
file(TrackedName(name), contents)
}

fun buildOutput(builder: Markout.() -> Unit): OutputDirectory = OutputDirectory {
fun buildOutput(
builder: Markout.() -> Unit
): OutputDirectory = OutputDirectory {
val entries = linkedMapOf<String, OutputEntry>()

fun set(name: FileName, output: Output) {
Expand Down Expand Up @@ -234,6 +237,12 @@ fun markout(
if (diffs.isNotEmpty()) error(diffs.joinToString("\n"))
}
}

System.getenv("MARKOUT_BUILD_DIR")
?.takeIf { it.isNotBlank() }
?.let(::Path)
?.resolve("paths.txt")
?.writeLines(actions.paths().asSequence().map { "$it" })
}

fun markout(
Expand Down

0 comments on commit 7d5c5f2

Please sign in to comment.