From c18438ff6a597e18e51948a64c11d1b05f8d871d Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Wed, 14 Jun 2023 12:59:54 +0200 Subject: [PATCH] Small bug fixes; everything working. --- ...BuildScriptBasedStaticSiteGenerator.groovy | 12 ++++------- .../jessebrault/ssg/buildscript/Build.groovy | 5 +++++ .../ssg/buildscript/BuildScriptRunner.groovy | 20 ++++++++++++------- .../ssg/AbstractBuildCommand.groovy | 19 +++++++++++------- .../com/jessebrault/ssg/SsgBuild.groovy | 2 +- .../groovy/com/jessebrault/ssg/SsgInit.groovy | 2 +- ...ssgBuilds.groovy => ssgBuildsMeaty.groovy} | 0 .../CliBasedStaticSiteGeneratorTests.groovy | 6 ++---- 8 files changed, 38 insertions(+), 28 deletions(-) rename cli/src/main/resources/{ssgBuilds.groovy => ssgBuildsMeaty.groovy} (100%) diff --git a/api/src/main/groovy/com/jessebrault/ssg/BuildScriptBasedStaticSiteGenerator.groovy b/api/src/main/groovy/com/jessebrault/ssg/BuildScriptBasedStaticSiteGenerator.groovy index a6aa702..5a85322 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/BuildScriptBasedStaticSiteGenerator.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/BuildScriptBasedStaticSiteGenerator.groovy @@ -18,10 +18,10 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator { private static final Marker enter = MarkerFactory.getMarker('enter') private static final Marker exit = MarkerFactory.getMarker('exit') + private final Collection buildScriptClassLoaderUrls private final @Nullable File buildScript private final Collection builds = [] - private boolean ranBuildScript = false private GroovyClassLoader buildScriptClassLoader /** @@ -34,6 +34,7 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator { Collection buildScriptClassLoaderUrls, @Nullable File buildScript = null ) { + this.buildScriptClassLoaderUrls = buildScriptClassLoaderUrls this.buildScript = buildScript } @@ -53,9 +54,7 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator { this.builds.addAll(result) } else if (this.buildScript.exists() && this.buildScript.isFile()) { logger.info('running buildScript: {}', this.buildScript) - def buildScriptRunner = new BuildScriptRunner([ - this.buildScript.parentFile.toURI().toURL() - ]) + def buildScriptRunner = new BuildScriptRunner(this.buildScriptClassLoaderUrls) this.buildScriptClassLoader = buildScriptRunner.getBuildScriptClassLoader() def result = buildScriptRunner.runBuildScript( this.buildScript.name, @@ -67,7 +66,6 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator { } else { throw new IllegalArgumentException("given buildScript ${ this.buildScript } either does not exist or is not a file") } - this.ranBuildScript = true logger.trace(exit, '') } @@ -91,9 +89,7 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator { ) { logger.trace(enter, 'buildName: {}, diagnosticsConsumer: {}', buildName, diagnosticsConsumer) - if (!this.ranBuildScript) { - this.runBuildScript(configuratorFactories, buildScriptArgs) - } + this.runBuildScript(configuratorFactories, buildScriptArgs) def build = this.builds.find { it.name == buildName } if (!build) { diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/Build.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/Build.groovy index fa2eb0f..cc7ac94 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/Build.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/Build.groovy @@ -54,4 +54,9 @@ final class Build { concat(this, other) } + @Override + String toString() { + "Build(name: ${ this.name }, siteSpec: ${ this.siteSpec }, globals: ${ this.globals })" + } + } diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptRunner.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptRunner.groovy index e4630af..0109b7d 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptRunner.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptRunner.groovy @@ -5,12 +5,20 @@ import groovy.transform.NullCheck import groovy.transform.stc.ClosureParams import groovy.transform.stc.SimpleType import org.codehaus.groovy.control.CompilerConfiguration +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import org.slf4j.Marker +import org.slf4j.MarkerFactory import java.util.function.Consumer @NullCheck final class BuildScriptRunner { + private static final Logger logger = LoggerFactory.getLogger(BuildScriptRunner) + private static final Marker enter = MarkerFactory.getMarker('ENTER') + private static final Marker exit = MarkerFactory.getMarker('EXIT') + private static Collection runBase(BuildScriptBase base) { base.run() BuildSpecUtil.getBuilds(base.getBuildSpecs()) @@ -55,17 +63,15 @@ final class BuildScriptRunner { Map binding, Consumer configureBuildScript ) { - Class scriptClass = this.buildScriptClassLoader.loadClass( - ExtensionUtil.stripExtension(scriptName), - true, - false, - false - ) + logger.trace(enter, 'scriptName: {}, binding: {}', scriptName, binding) + Class scriptClass = this.buildScriptClassLoader.loadClass(ExtensionUtil.stripExtension(scriptName)) def scriptObject = scriptClass.getConstructor().newInstance() assert scriptObject instanceof BuildScriptBase scriptObject.setBinding(new Binding(binding)) configureBuildScript.accept(scriptObject) - runBase(scriptObject) + def result = runBase(scriptObject) + logger.trace(exit, 'result: {}', result) + result } } diff --git a/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy b/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy index 3f2d282..87b313e 100644 --- a/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy +++ b/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy @@ -48,13 +48,18 @@ abstract class AbstractBuildCommand extends AbstractSubCommand { logger.traceEntry('requestedBuild: {}', requestedBuild) if (this.staticSiteGenerator == null) { - this.staticSiteGenerator = new CliBasedStaticSiteGenerator( - this.buildScript, - [ - this.buildScript.parentFile.toURI().toURL(), - *this.buildSrcDirs.collect { it.toURI().toURL() } - ] - ) + final Collection buildScriptUrls = [] + + def buildScriptParentFile = this.buildScript.parentFile + if (buildScriptParentFile == null) { + buildScriptUrls.add(new File('.').toURI().toURL()) + } else { + buildScriptUrls.add(buildScriptParentFile.toURI().toURL()) + } + + buildScriptUrls.addAll(this.buildSrcDirs.collect { it.toURI().toURL() }) + + this.staticSiteGenerator = new CliBasedStaticSiteGenerator(this.buildScript, buildScriptUrls) } final Collection diagnostics = [] diff --git a/cli/src/main/groovy/com/jessebrault/ssg/SsgBuild.groovy b/cli/src/main/groovy/com/jessebrault/ssg/SsgBuild.groovy index bc1f4ba..36967e3 100644 --- a/cli/src/main/groovy/com/jessebrault/ssg/SsgBuild.groovy +++ b/cli/src/main/groovy/com/jessebrault/ssg/SsgBuild.groovy @@ -23,7 +23,7 @@ final class SsgBuild extends AbstractBuildCommand { it, [new DefaultBuildScriptConfiguratorFactory( new File('.'), - this.staticSiteGenerator::getBuildScriptClassLoader + { this.staticSiteGenerator.buildScriptClassLoader } )], this.scriptArgs ) diff --git a/cli/src/main/groovy/com/jessebrault/ssg/SsgInit.groovy b/cli/src/main/groovy/com/jessebrault/ssg/SsgInit.groovy index 850b2c9..78dce7d 100644 --- a/cli/src/main/groovy/com/jessebrault/ssg/SsgInit.groovy +++ b/cli/src/main/groovy/com/jessebrault/ssg/SsgInit.groovy @@ -46,7 +46,7 @@ final class SsgInit extends AbstractSubCommand { if (meaty) { file('ssgBuilds.groovy').tap { - copyResourceToFile('ssgBuilds.groovy', it) + copyResourceToFile('ssgBuildsMeaty.groovy', it) } } else { file('ssgBuilds.groovy').tap { diff --git a/cli/src/main/resources/ssgBuilds.groovy b/cli/src/main/resources/ssgBuildsMeaty.groovy similarity index 100% rename from cli/src/main/resources/ssgBuilds.groovy rename to cli/src/main/resources/ssgBuildsMeaty.groovy diff --git a/cli/src/test/groovy/com/jessebrault/ssg/CliBasedStaticSiteGeneratorTests.groovy b/cli/src/test/groovy/com/jessebrault/ssg/CliBasedStaticSiteGeneratorTests.groovy index 5308839..78173e6 100644 --- a/cli/src/test/groovy/com/jessebrault/ssg/CliBasedStaticSiteGeneratorTests.groovy +++ b/cli/src/test/groovy/com/jessebrault/ssg/CliBasedStaticSiteGeneratorTests.groovy @@ -15,11 +15,9 @@ final class CliBasedStaticSiteGeneratorTests { def baseDir = File.createTempDir() SsgInit.init(baseDir, true) - def groovyClassLoader = new GroovyClassLoader() - [baseDir.toURI().toURL(), new File(baseDir, 'buildSrc').toURI().toURL()] - .each(groovyClassLoader::addURL) + def urls = [baseDir.toURI().toURL(), new File(baseDir, 'buildSrc').toURI().toURL()] - def ssg = new CliBasedStaticSiteGenerator(new File(baseDir, 'ssgBuilds.groovy'), []) + def ssg = new CliBasedStaticSiteGenerator(new File(baseDir, 'ssgBuilds.groovy'), urls) def configuratorFactories = [ new DefaultBuildScriptConfiguratorFactory(baseDir, ssg::getBuildScriptClassLoader) ]