Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docusaurus Working Directories #17

Merged
merged 4 commits into from
Feb 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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