From 8fd08f51f100173ee334b1ce7fb72a0eba2ab474 Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Thu, 27 Apr 2023 14:05:46 +0200 Subject: [PATCH] Updated Cli to include new options. --- .../ssg/AbstractBuildCommand.groovy | 68 +++++++++++-------- .../com/jessebrault/ssg/SsgBuild.groovy | 10 ++- .../ssg/StaticSiteGeneratorCliTests.groovy | 29 ++++++++ 3 files changed, 78 insertions(+), 29 deletions(-) create mode 100644 cli/src/test/groovy/com/jessebrault/ssg/StaticSiteGeneratorCliTests.groovy diff --git a/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy b/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy index ae0ea43..ad61e0a 100644 --- a/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy +++ b/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy @@ -6,51 +6,63 @@ import com.jessebrault.ssg.buildscript.DefaultBuildScriptConfiguratorFactory import com.jessebrault.ssg.util.Diagnostic import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.Logger +import picocli.CommandLine abstract class AbstractBuildCommand extends AbstractSubCommand { private static final Logger logger = LogManager.getLogger(AbstractBuildCommand) - protected final Collection builds = [] + protected Collection availableBuilds = [] - AbstractBuildCommand() { - // Run build script - if (new File('ssgBuilds.groovy').exists()) { - logger.info('found buildScript: ssgBuilds.groovy') + @CommandLine.Option( + names = ['-b', '--build'], + description = 'The name of a build to execute.', + paramLabel = 'buildName' + ) + protected Collection requestedBuilds = ['default'] + + @CommandLine.Option( + names = ['-s', '--script', '--buildScript'], + description = 'The build script file to execute.', + paramLabel = 'buildScript' + ) + void setBuildFile(File buildScriptFile) { + if (buildScriptFile == null) { + buildScriptFile = new File('ssgBuilds.groovy') + } + if (buildScriptFile.exists()) { + logger.info('found buildScriptFile: {}', buildScriptFile) def configuratorFactory = new DefaultBuildScriptConfiguratorFactory() - this.builds.addAll(BuildScriptUtil.runBuildScript('ssgBuilds.groovy') { + this.availableBuilds = BuildScriptUtil.runBuildScript(buildScriptFile.path) { configuratorFactory.get().accept(it) - }) - logger.debug('after running ssgBuilds.groovy, builds: {}', this.builds) + } + logger.debug('after running buildScriptFile {}, builds: {}', buildScriptFile, this.availableBuilds) } else { - throw new IllegalArgumentException('ssgBuilds.groovy could not be found') + throw new IllegalArgumentException( + "buildScriptFile file ${ buildScriptFile } does not exist or could not be found." + ) } } - protected final Integer doBuild() { - logger.traceEntry('builds: {}', this.builds) + protected final Integer doBuild(String requestedBuild) { + logger.traceEntry('requestedBuild: {}', requestedBuild) def buildTasksConverter = new SimpleBuildTasksConverter() + def build = this.availableBuilds.find { it.name == requestedBuild } + def hadDiagnostics = false - // Do each build - this.builds.each { - def tasksResult = buildTasksConverter.convert(it) - if (tasksResult.hasDiagnostics()) { + def tasksResult = buildTasksConverter.convert(build) + if (tasksResult.hasDiagnostics()) { + hadDiagnostics = true + tasksResult.diagnostics.each { logger.error(it.message) } + } else { + def tasks = tasksResult.get() + Collection taskDiagnostics = [] + tasks.each { it.execute(tasks) } + if (!taskDiagnostics.isEmpty()) { hadDiagnostics = true - tasksResult.diagnostics.each { - logger.error(it.message) - } - } else { - def tasks = tasksResult.get() - Collection taskDiagnostics = [] - tasks.each { it.execute(tasks) } - if (!taskDiagnostics.isEmpty()) { - hadDiagnostics = true - taskDiagnostics.each { - logger.error(it.message) - } - } + taskDiagnostics.each { logger.error(it.message) } } } diff --git a/cli/src/main/groovy/com/jessebrault/ssg/SsgBuild.groovy b/cli/src/main/groovy/com/jessebrault/ssg/SsgBuild.groovy index 07ec493..daaf4ca 100644 --- a/cli/src/main/groovy/com/jessebrault/ssg/SsgBuild.groovy +++ b/cli/src/main/groovy/com/jessebrault/ssg/SsgBuild.groovy @@ -15,7 +15,15 @@ final class SsgBuild extends AbstractBuildCommand { @Override Integer doSubCommand() { - this.doBuild() + logger.traceEntry() + def result = 0 + this.requestedBuilds.each { + def buildResult = this.doBuild(it) + if (buildResult == 1) { + result = 1 + } + } + logger.traceExit(result) } } diff --git a/cli/src/test/groovy/com/jessebrault/ssg/StaticSiteGeneratorCliTests.groovy b/cli/src/test/groovy/com/jessebrault/ssg/StaticSiteGeneratorCliTests.groovy new file mode 100644 index 0000000..6c7a4db --- /dev/null +++ b/cli/src/test/groovy/com/jessebrault/ssg/StaticSiteGeneratorCliTests.groovy @@ -0,0 +1,29 @@ +package com.jessebrault.ssg + +import org.junit.jupiter.api.Test +import picocli.CommandLine + +import static org.junit.jupiter.api.Assertions.assertEquals + +final class StaticSiteGeneratorCliTests { + + private static void cliSmokeScreen(String... args) { + assertEquals(0, new CommandLine(StaticSiteGeneratorCli).execute(args)) + } + + @Test + void helpSmokeScreen() { + cliSmokeScreen('--help') + } + + @Test + void initHelpSmokeScreen() { + cliSmokeScreen('init', '--help') + } + + @Test + void buildHelpSmokeScreen() { + cliSmokeScreen('build', '--help') + } + +}