Deleted BuildScriptRunner and its implementation.

This commit is contained in:
JesseBrault0709 2023-05-14 16:17:23 +02:00
parent d73f2ba521
commit 594ed8ba7d
5 changed files with 17 additions and 126 deletions

View File

@ -2,7 +2,7 @@ package com.jessebrault.ssg
import com.jessebrault.ssg.buildscript.Build
import com.jessebrault.ssg.buildscript.BuildScriptConfiguratorFactory
import com.jessebrault.ssg.buildscript.BuildScriptRunner
import com.jessebrault.ssg.buildscript.BuildScripts
import com.jessebrault.ssg.util.Diagnostic
import org.jetbrains.annotations.Nullable
import org.slf4j.Logger
@ -18,25 +18,22 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator {
private static final Marker enter = MarkerFactory.getMarker('enter')
private static final Marker exit = MarkerFactory.getMarker('exit')
private final BuildScriptRunner buildScriptRunner
private final BuildScriptConfiguratorFactory configuratorFactory
private final Collection<BuildScriptConfiguratorFactory> configuratorFactories
@Nullable
private final File buildScript
private final Collection<File> buildSrcDirs
private final Map<String, Object> scriptArgs
private final Collection<Build> builds = []
private boolean ranBuildScript = false
BuildScriptBasedStaticSiteGenerator(
BuildScriptRunner buildScriptRunner,
BuildScriptConfiguratorFactory configuratorFactory,
Collection<BuildScriptConfiguratorFactory> configuratorFactories = [],
@Nullable File buildScript = null,
Collection<File> buildSrcDirs = [],
Map<String, Object> scriptArgs = [:]
) {
this.buildScriptRunner = buildScriptRunner
this.configuratorFactory = configuratorFactory
this.configuratorFactories = configuratorFactories
this.buildScript = buildScript
this.buildSrcDirs = buildSrcDirs
this.scriptArgs = scriptArgs
@ -47,19 +44,23 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator {
if (this.buildScript == null) {
logger.info('no specified build script; using defaults')
def result = this.buildScriptRunner.runBuildScript {
this.configuratorFactory.get().accept(it)
def result = BuildScripts.runBuildScript { base ->
this.configuratorFactories.each {
it.get().accept(base)
}
}
this.builds.addAll(result)
} else if (this.buildScript.exists() && this.buildScript.isFile()) {
logger.info('running buildScript: {}', this.buildScript)
def result = this.buildScriptRunner.runBuildScript(
def result = BuildScripts.runBuildScript(
this.buildScript.name,
this.buildScript.parentFile.toURI().toURL(),
this.buildSrcDirs.collect { it.toURI().toURL() },
[args: this.scriptArgs]
) {
this.configuratorFactory.get().accept(it)
) { base ->
this.configuratorFactories.each {
it.get().accept(base)
}
}
this.builds.addAll(result)
} else {

View File

@ -1,51 +0,0 @@
package com.jessebrault.ssg.buildscript
import groovy.transform.stc.ClosureParams
import groovy.transform.stc.SimpleType
import java.util.function.Consumer
/**
* TODO: get rid of this, split it into two different classes/util functions (BuildScripts?)
*/
interface BuildScriptRunner {
Collection<Build> runBuildScript(
String scriptName,
URL scriptBaseDirUrl,
Collection<URL> otherUrls,
Map<String, Object> binding,
Consumer<BuildScriptBase> configureBuildScript
)
Collection<Build> runBuildScript(
@DelegatesTo(value = BuildScriptBase, strategy = Closure.DELEGATE_FIRST)
@ClosureParams(value = SimpleType, options = 'com.jessebrault.ssg.buildscript.BuildScriptBase')
Closure<?> scriptBody
)
default Collection<Build> runBuildScript(
String scriptName,
URL scriptBaseDirUrl,
Collection<URL> otherUrls,
Map<String, Object> binding
) {
this.runBuildScript(scriptName, scriptBaseDirUrl, otherUrls, binding) { }
}
default Collection<Build> runBuildScript(
String scriptName,
URL scriptBaseDirUrl,
Collection<URL> otherUrls
) {
this.runBuildScript(scriptName, scriptBaseDirUrl, otherUrls, [:]) { }
}
default Collection<Build> runBuildScript(
String scriptName,
URL scriptBaseDirUrl
) {
this.runBuildScript(scriptName, scriptBaseDirUrl, [], [:]) { }
}
}

View File

@ -1,55 +0,0 @@
package com.jessebrault.ssg.buildscript
import groovy.transform.NullCheck
import groovy.transform.stc.ClosureParams
import groovy.transform.stc.SimpleType
import org.codehaus.groovy.control.CompilerConfiguration
import org.jgrapht.traverse.DepthFirstIterator
import java.util.function.Consumer
@NullCheck
final class SimpleBuildScriptRunner implements BuildScriptRunner {
@Override
Collection<Build> runBuildScript(
String scriptName,
URL scriptBaseDirUrl,
Collection<URL> otherUrls,
Map<String, Object> binding,
Consumer<BuildScriptBase> configureBuildScript
) {
def engine = new GroovyScriptEngine([scriptBaseDirUrl, *otherUrls] as URL[])
engine.config = new CompilerConfiguration().tap {
scriptBaseClass = 'com.jessebrault.ssg.buildscript.BuildScriptBase'
}
def buildScript = engine.createScript(scriptName, new Binding(binding))
assert buildScript instanceof BuildScriptBase
configureBuildScript.accept(buildScript)
buildScript.run()
BuildSpecUtil.getBuilds(buildScript.buildSpecs)
}
@Override
Collection<Build> runBuildScript(
@DelegatesTo(value = BuildScriptBase, strategy = Closure.DELEGATE_FIRST)
@ClosureParams(value = SimpleType, options = 'com.jessebrault.ssg.buildscript.BuildScriptBase')
Closure<?> scriptBody
) {
def base = new BuildScriptBase() {
@Override
Object run() {
scriptBody.delegate = this
scriptBody.resolveStrategy = Closure.DELEGATE_FIRST
scriptBody.call(this)
}
}
base.run()
BuildSpecUtil.getBuilds(base.buildSpecs)
}
}

View File

@ -2,7 +2,6 @@ package com.jessebrault.ssg
import com.jessebrault.ssg.buildscript.BuildScriptBase
import com.jessebrault.ssg.buildscript.BuildScriptConfiguratorFactory
import com.jessebrault.ssg.buildscript.SimpleBuildScriptRunner
import com.jessebrault.ssg.util.ResourceUtil
import org.junit.jupiter.api.Test
import org.slf4j.Logger
@ -34,15 +33,14 @@ final class BuildScriptBasedStaticSiteGeneratorTests {
}
def ssg = new BuildScriptBasedStaticSiteGenerator(
new SimpleBuildScriptRunner(),
new BuildScriptConfiguratorFactory() {
[new BuildScriptConfiguratorFactory() {
@Override
Consumer<BuildScriptBase> get() {
return { }
}
},
}],
buildScript,
[],
[sourceDir: sourceDir]

View File

@ -1,7 +1,6 @@
package com.jessebrault.ssg
import com.jessebrault.ssg.buildscript.DefaultBuildScriptConfiguratorFactory
import com.jessebrault.ssg.buildscript.SimpleBuildScriptRunner
import com.jessebrault.ssg.util.Diagnostic
import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.Logger
@ -52,8 +51,7 @@ abstract class AbstractBuildCommand extends AbstractSubCommand {
if (this.staticSiteGenerator == null) {
this.staticSiteGenerator = new BuildScriptBasedStaticSiteGenerator(
new SimpleBuildScriptRunner(),
new DefaultBuildScriptConfiguratorFactory(this.baseDir),
[new DefaultBuildScriptConfiguratorFactory(this.baseDir)],
this.buildScript == new File('ssgBuilds.groovy') || this.buildScript.exists()
? new File(this.baseDir, this.buildScript.path)
: null,