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.Build
import com.jessebrault.ssg.buildscript.BuildScriptConfiguratorFactory 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 com.jessebrault.ssg.util.Diagnostic
import org.jetbrains.annotations.Nullable import org.jetbrains.annotations.Nullable
import org.slf4j.Logger 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 enter = MarkerFactory.getMarker('enter')
private static final Marker exit = MarkerFactory.getMarker('exit') private static final Marker exit = MarkerFactory.getMarker('exit')
private final BuildScriptRunner buildScriptRunner private final Collection<BuildScriptConfiguratorFactory> configuratorFactories
private final BuildScriptConfiguratorFactory configuratorFactory @Nullable
private final File buildScript private final File buildScript
private final Collection<File> buildSrcDirs private final Collection<File> buildSrcDirs
private final Map<String, Object> scriptArgs private final Map<String, Object> scriptArgs
private final Collection<Build> builds = [] private final Collection<Build> builds = []
private boolean ranBuildScript = false private boolean ranBuildScript = false
BuildScriptBasedStaticSiteGenerator( BuildScriptBasedStaticSiteGenerator(
BuildScriptRunner buildScriptRunner, Collection<BuildScriptConfiguratorFactory> configuratorFactories = [],
BuildScriptConfiguratorFactory configuratorFactory,
@Nullable File buildScript = null, @Nullable File buildScript = null,
Collection<File> buildSrcDirs = [], Collection<File> buildSrcDirs = [],
Map<String, Object> scriptArgs = [:] Map<String, Object> scriptArgs = [:]
) { ) {
this.buildScriptRunner = buildScriptRunner this.configuratorFactories = configuratorFactories
this.configuratorFactory = configuratorFactory
this.buildScript = buildScript this.buildScript = buildScript
this.buildSrcDirs = buildSrcDirs this.buildSrcDirs = buildSrcDirs
this.scriptArgs = scriptArgs this.scriptArgs = scriptArgs
@ -47,19 +44,23 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator {
if (this.buildScript == null) { if (this.buildScript == null) {
logger.info('no specified build script; using defaults') logger.info('no specified build script; using defaults')
def result = this.buildScriptRunner.runBuildScript { def result = BuildScripts.runBuildScript { base ->
this.configuratorFactory.get().accept(it) this.configuratorFactories.each {
it.get().accept(base)
}
} }
this.builds.addAll(result) this.builds.addAll(result)
} else if (this.buildScript.exists() && this.buildScript.isFile()) { } else if (this.buildScript.exists() && this.buildScript.isFile()) {
logger.info('running buildScript: {}', this.buildScript) logger.info('running buildScript: {}', this.buildScript)
def result = this.buildScriptRunner.runBuildScript( def result = BuildScripts.runBuildScript(
this.buildScript.name, this.buildScript.name,
this.buildScript.parentFile.toURI().toURL(), this.buildScript.parentFile.toURI().toURL(),
this.buildSrcDirs.collect { it.toURI().toURL() }, this.buildSrcDirs.collect { it.toURI().toURL() },
[args: this.scriptArgs] [args: this.scriptArgs]
) { ) { base ->
this.configuratorFactory.get().accept(it) this.configuratorFactories.each {
it.get().accept(base)
}
} }
this.builds.addAll(result) this.builds.addAll(result)
} else { } 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.BuildScriptBase
import com.jessebrault.ssg.buildscript.BuildScriptConfiguratorFactory import com.jessebrault.ssg.buildscript.BuildScriptConfiguratorFactory
import com.jessebrault.ssg.buildscript.SimpleBuildScriptRunner
import com.jessebrault.ssg.util.ResourceUtil import com.jessebrault.ssg.util.ResourceUtil
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.slf4j.Logger import org.slf4j.Logger
@ -34,15 +33,14 @@ final class BuildScriptBasedStaticSiteGeneratorTests {
} }
def ssg = new BuildScriptBasedStaticSiteGenerator( def ssg = new BuildScriptBasedStaticSiteGenerator(
new SimpleBuildScriptRunner(), [new BuildScriptConfiguratorFactory() {
new BuildScriptConfiguratorFactory() {
@Override @Override
Consumer<BuildScriptBase> get() { Consumer<BuildScriptBase> get() {
return { } return { }
} }
}, }],
buildScript, buildScript,
[], [],
[sourceDir: sourceDir] [sourceDir: sourceDir]

View File

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