Adding buildScript

This commit is contained in:
JesseBrault0709 2023-01-06 14:26:33 -06:00
parent 12e44c3e00
commit 27aab78ca3
6 changed files with 98 additions and 0 deletions

View File

@ -16,6 +16,9 @@ dependencies {
/**
* Logging
*/
// https://mvnrepository.com/artifact/org.slf4j/slf4j-api
implementation 'org.slf4j:slf4j-api:1.7.36'
// https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl
runtimeOnly 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0'

View File

@ -1,5 +1,6 @@
package com.jessebrault.ssg
import com.jessebrault.ssg.buildscript.GroovyBuildScriptRunner
import com.jessebrault.ssg.part.GspPartRenderer
import com.jessebrault.ssg.part.PartFilePartsProvider
import com.jessebrault.ssg.part.PartType
@ -13,9 +14,13 @@ import com.jessebrault.ssg.text.MarkdownFrontMatterGetter
import com.jessebrault.ssg.text.MarkdownTextRenderer
import com.jessebrault.ssg.text.TextType
import com.jessebrault.ssg.text.TextFileTextsProvider
import org.slf4j.Logger
import org.slf4j.LoggerFactory
class StaticSiteGeneratorCli {
private static final Logger logger = LoggerFactory.getLogger(StaticSiteGeneratorCli)
static void main(String[] args) {
def markdownText = new TextType(['.md'], new MarkdownTextRenderer(), new MarkdownFrontMatterGetter())
def gspTemplate = new TemplateType(['.gsp'], new GspTemplateRenderer())
@ -39,6 +44,16 @@ class StaticSiteGeneratorCli {
specialPagesProviderGetter: { Config config -> new SpecialPageFileSpecialPagesProvider(config.specialPageTypes, config.specialPagesDir) }
)
def globals = [:]
if (new File('build.groovy').exists()) {
logger.info('found buildScript: build.groovy')
def buildScriptRunner = new GroovyBuildScriptRunner()
buildScriptRunner.runBuildScript(config, globals)
logger.info('after running buildScript, config: {}', config)
logger.info('after running buildScript, globals: {}', globals)
}
def ssg = new SimpleStaticSiteGenerator(config)
ssg.generate(new File('build'))
}

View File

@ -13,6 +13,9 @@ dependencies {
// https://mvnrepository.com/artifact/org.apache.groovy/groovy-templates
implementation 'org.apache.groovy:groovy-templates:4.0.7'
// https://mvnrepository.com/artifact/org.apache.groovy/groovy-yaml
implementation 'org.apache.groovy:groovy-yaml:4.0.7'
// https://mvnrepository.com/artifact/org.commonmark/commonmark
implementation 'org.commonmark:commonmark:0.21.0'

View File

@ -0,0 +1,47 @@
package com.jessebrault.ssg.buildscript
import com.jessebrault.ssg.Config
import groovy.transform.TupleConstructor
abstract class BuildScriptBase extends Script {
@TupleConstructor(includeFields = true, defaults = false)
static class GlobalsConfigurator {
private final Map globals
@Override
Object getProperty(String propertyName) {
this.globals[propertyName]
}
@Override
void setProperty(String propertyName, Object newValue) {
this.globals.put(propertyName, newValue)
}
}
Config config
Map globals
void config(
@DelegatesTo(value = Config, strategy = Closure.DELEGATE_FIRST)
Closure configClosure
) {
configClosure.setDelegate(this.config)
configClosure.setResolveStrategy(Closure.DELEGATE_FIRST)
configClosure.run()
}
void globals(
@DelegatesTo(value = GlobalsConfigurator, strategy = Closure.DELEGATE_FIRST)
Closure globalsClosure
) {
def globalsConfigurator = new GlobalsConfigurator(this.globals)
globalsClosure.setDelegate(globalsConfigurator)
globalsClosure.setResolveStrategy(Closure.DELEGATE_FIRST)
globalsClosure.run()
}
}

View File

@ -0,0 +1,7 @@
package com.jessebrault.ssg.buildscript
import com.jessebrault.ssg.Config
interface BuildScriptRunner {
void runBuildScript(Config config, Map globals)
}

View File

@ -0,0 +1,23 @@
package com.jessebrault.ssg.buildscript
import com.jessebrault.ssg.Config
import org.codehaus.groovy.control.CompilerConfiguration
class GroovyBuildScriptRunner implements BuildScriptRunner {
@Override
void runBuildScript(Config config, Map globals) {
Objects.requireNonNull(config)
Objects.requireNonNull(globals)
def engine = new GroovyScriptEngine([new File('.').toURI().toURL()] as URL[])
engine.config = new CompilerConfiguration().tap {
scriptBaseClass = 'com.jessebrault.ssg.buildscript.BuildScriptBase'
}
def buildScript = engine.createScript('build.groovy', new Binding())
assert buildScript instanceof BuildScriptBase
buildScript.config = config
buildScript.globals = globals
buildScript.run()
}
}