From dfb04425732509fccc30e176a92b21cda9e31282 Mon Sep 17 00:00:00 2001 From: Chris K Wensel Date: Thu, 28 Sep 2023 21:43:03 -0700 Subject: [PATCH] updated cdk to 2.99.0. doc cleanup and improvements. fixed issue with --profile on commands --- .github/workflows/scenario.yml | 2 +- .github/workflows/wip.yml | 8 +- .../command/ExecCommandOptions.java | 7 ++ clusterless-main/build.gradle.kts | 98 ++++++++++++++-- .../java/clusterless/BaseShowElements.java | 108 +++++++++++++----- .../main/java/clusterless/ConfigCommand.java | 3 +- .../src/main/java/clusterless/ShowArcs.java | 31 +++++ .../main/java/clusterless/ShowBarriers.java | 32 ++++++ .../main/java/clusterless/ShowBoundaries.java | 32 ++++++ .../main/java/clusterless/ShowCommand.java | 41 +++++-- .../main/java/clusterless/ShowComponents.java | 19 ++- .../main/java/clusterless/ShowResources.java | 32 ++++++ .../resources/templates/components-adoc.hbs | 2 +- .../templates/elements-list-adoc.hbs | 2 +- .../templates/elements-sublist-adoc.hbs | 5 + .../clusterless/model/deploy/Resource.java | 2 +- .../build.gradle.kts | 2 +- .../substrate/aws/cdk/CDKProcessExec.java | 11 +- .../aws/cdk/bootstrap/Bootstrap.java | 4 +- .../substrate/aws/cdk/lifecycle/Deploy.java | 2 +- .../substrate/aws/cdk/lifecycle/Destroy.java | 2 +- .../substrate/aws/cdk/lifecycle/Diff.java | 2 +- .../substrate/aws/cdk/lifecycle/Import.java | 2 +- .../substrate/aws/cdk/lifecycle/Verify.java | 2 +- 24 files changed, 376 insertions(+), 75 deletions(-) create mode 100644 clusterless-main/src/main/java/clusterless/ShowArcs.java create mode 100644 clusterless-main/src/main/java/clusterless/ShowBarriers.java create mode 100644 clusterless-main/src/main/java/clusterless/ShowBoundaries.java create mode 100644 clusterless-main/src/main/java/clusterless/ShowResources.java create mode 100644 clusterless-main/src/main/resources/templates/elements-sublist-adoc.hbs diff --git a/.github/workflows/scenario.yml b/.github/workflows/scenario.yml index 2de6ff67..35378d03 100644 --- a/.github/workflows/scenario.yml +++ b/.github/workflows/scenario.yml @@ -28,7 +28,7 @@ jobs: uses: actions/setup-node@v3 - name: Install CDK - run: npm install -g aws-cdk@2.96.2 + run: npm install -g aws-cdk@2.99.0 - name: Setup Gradle uses: gradle/gradle-build-action@v2 diff --git a/.github/workflows/wip.yml b/.github/workflows/wip.yml index ef7f695c..c279d98b 100644 --- a/.github/workflows/wip.yml +++ b/.github/workflows/wip.yml @@ -14,7 +14,7 @@ on: - '**.hbs' jobs: run-all-tests-and-release: - concurrency: scenarios-us-east-2 + concurrency: scenarios-us-west-2 runs-on: ubuntu-latest steps: @@ -29,13 +29,13 @@ jobs: uses: actions/setup-node@v3 - name: Install CDK - run: npm install -g aws-cdk@2.96.2 + run: npm install -g aws-cdk@2.99.0 - name: Setup Gradle uses: gradle/gradle-build-action@v2 - name: Setup Env - run: echo "${{ vars.GRADLE_PROPERTIES_EAST }}" > gradle.properties + run: echo "${{ vars.GRADLE_PROPERTIES }}" > gradle.properties - name: Run Tests env: @@ -47,7 +47,7 @@ jobs: env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DEFAULT_REGION: us-east-2 + AWS_DEFAULT_REGION: us-west-2 run: | ./gradlew --no-daemon --info --stacktrace scenarios diff --git a/clusterless-main-common/src/main/java/clusterless/command/ExecCommandOptions.java b/clusterless-main-common/src/main/java/clusterless/command/ExecCommandOptions.java index 20763bbd..aa6c4207 100644 --- a/clusterless-main-common/src/main/java/clusterless/command/ExecCommandOptions.java +++ b/clusterless-main-common/src/main/java/clusterless/command/ExecCommandOptions.java @@ -20,7 +20,14 @@ public class ExecCommandOptions extends CommonCommandOptions { ) private boolean dryRun = false; + @CommandLine.Option(names = "--profile", description = "aws profile") + private String profile = System.getenv("AWS_PROFILE"); + public boolean dryRun() { return dryRun; } + + public String profile() { + return profile; + } } diff --git a/clusterless-main/build.gradle.kts b/clusterless-main/build.gradle.kts index c545da76..c28b20d0 100644 --- a/clusterless-main/build.gradle.kts +++ b/clusterless-main/build.gradle.kts @@ -9,7 +9,6 @@ import org.jreleaser.model.Active import org.jreleaser.model.Distribution import org.jreleaser.model.Stereotype -import java.nio.file.Files plugins { id("clusterless.java-application-conventions") @@ -100,6 +99,34 @@ tasks.register("release") { dependsOn("jreleaserRelease") } +tasks.register("generateComponentModels") { + dependsOn("installDist") + + workingDir = file("build/install/clusterless/bin") + commandLine = listOf( + "./cls", + "show", + "component", + "--model-all", + "--output-path", + "${buildDir}/generated-docs/modules/components" + ) +} + +tasks.register("generateModelModels") { + dependsOn("installDist") + + workingDir = file("build/install/clusterless/bin") + commandLine = listOf( + "./cls", + "show", + "model", + "--model-all", + "--output-path", + "${buildDir}/generated-docs/modules/models" + ) +} + tasks.register("generateComponentDocs") { dependsOn("installDist") @@ -114,20 +141,69 @@ tasks.register("generateComponentDocs") { ) } -tasks.register("generateComponentIndex") { +tasks.register("generateResourceIndex") { dependsOn("installDist") workingDir = file("build/install/clusterless/bin") commandLine = listOf( "./cls", "show", - "component", + "resource", "--list", "--output-path", - "${buildDir}/generated-docs/modules/components/" + "${buildDir}/generated-docs/modules/components/", + "--append=false" ) } +tasks.register("generateArcIndex") { + dependsOn("installDist") + + workingDir = file("build/install/clusterless/bin") + commandLine = listOf( + "./cls", + "show", + "arc", + "--list", + "--output-path", + "${buildDir}/generated-docs/modules/components/", + "--append=true" + ) + mustRunAfter("generateBoundariesIndex") +} + +tasks.register("generateBarriersIndex") { + dependsOn("installDist") + + workingDir = file("build/install/clusterless/bin") + commandLine = listOf( + "./cls", + "show", + "barrier", + "--list", + "--output-path", + "${buildDir}/generated-docs/modules/components/", + "--append=true" + ) + mustRunAfter("generateArcIndex") +} + +tasks.register("generateBoundariesIndex") { + dependsOn("installDist") + + workingDir = file("build/install/clusterless/bin") + commandLine = listOf( + "./cls", + "show", + "boundary", + "--list", + "--output-path", + "${buildDir}/generated-docs/modules/components/", + "--append=true" + ) + mustRunAfter("generateResourceIndex") +} + tasks.register("generateComponentPartial") { dependsOn("installDist") @@ -193,9 +269,14 @@ tasks.register("generateModelPartial") { } tasks.register("generateDocs") { + dependsOn("generateComponentModels") dependsOn("generateComponentDocs") - dependsOn("generateComponentIndex") + dependsOn("generateResourceIndex") + dependsOn("generateArcIndex") + dependsOn("generateBarriersIndex") + dependsOn("generateBoundariesIndex") dependsOn("generateComponentPartial") + dependsOn("generateModelModels") dependsOn("generateModelDocs") dependsOn("generateModelIndex") dependsOn("generateModelPartial") @@ -246,13 +327,10 @@ tasks.register("generateCLIIndex") { dependsOn("generateCLIDocs") doLast { - // remove cls-*-help.adoc files are they are redundant - fileTree("build/generated-docs/modules/commands/pages") - .filter { it.name.endsWith("-help.adoc") && it.name != "cls-help.adoc" } - .forEach { Files.delete(it.toPath()) } - + // remove cls-*-help.adoc files from the index as they are redundant val names = fileTree("build/generated-docs/modules/commands/pages") .map { it.name } + .filter { it == "cls-help.adoc" || !it.endsWith("-help.adoc") } .sortedBy { it.substringBefore(".") } .toList() println(names) diff --git a/clusterless-main/src/main/java/clusterless/BaseShowElements.java b/clusterless-main/src/main/java/clusterless/BaseShowElements.java index ed796fdc..5f240759 100644 --- a/clusterless-main/src/main/java/clusterless/BaseShowElements.java +++ b/clusterless-main/src/main/java/clusterless/BaseShowElements.java @@ -11,6 +11,7 @@ import clusterless.json.JSONUtil; import clusterless.model.Struct; import clusterless.naming.Label; +import clusterless.util.OrderedSafeMaps; import org.jetbrains.annotations.NotNull; import picocli.CommandLine; @@ -44,6 +45,14 @@ public abstract class BaseShowElements extends ShowCommand.BaseShow { ) Optional name; + @CommandLine.Option( + names = "--append", + arity = "1", + description = "Append to the file", + hidden = true + ) + boolean append = false; + interface Handler { int handle(String name, Class documentedClass, Class structClass); } @@ -57,60 +66,68 @@ private static String createFileName(String name) { } protected static String getModel(Class modelClass) { - String model; try { // todo: have provider return a model instance with default values for use as a template - model = JSONUtil.writeAsPrettyStringSafe(modelClass.getConstructor().newInstance()); + return JSONUtil.writeAsPrettyStringSafe(modelClass.getConstructor().newInstance()); } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { throw new RuntimeException(e); } - return model; } @NotNull protected abstract String elementType(); + protected String elementSubType() { + return elementType(); + } + protected abstract Collection getNames(); protected Integer handleList() { Collection ordered = getNames(); if (output.isPresent()) { - try { - Path path = Paths.get(output.get()); - path.toFile().mkdirs(); + writeFromTemplate(ordered); + } else { + showCommand.main.printer().println(ordered); + } - File file = path - .resolve(name.orElse("nav.adoc")) - .toFile(); + return 0; + } - Writer writer = new FileWriter(file); + protected void writeFromTemplate(Collection ordered) { + try { + Path path = Paths.get(output.get()); + path.toFile().mkdirs(); - List> elements = new ArrayList<>(); + File file = path + .resolve(name.orElse("nav.adoc")) + .toFile(); - ordered.forEach(c -> elements.add(Map.of( - "name", c, - "filename", BaseShowElements.createFileName(c) - ))); + Writer writer = new FileWriter(file, append); - Map params = Map.of( - "title", elementType(), - "type", elementType().toLowerCase(), - "elements", elements - ); + List> elements = new ArrayList<>(); - String partial = template.orElse("elements-list-adoc"); // a generic template - showCommand.main.printer().writeWithTemplate("/templates/" + partial, params, writer); + ordered.forEach(c -> elements.add(Map.of( + "name", c, + "filename", BaseShowElements.createFileName(c) + ))); - } catch (IOException e) { - throw new RuntimeException(e); - } - } else { - showCommand.main.printer().println(ordered); - } + Map params = OrderedSafeMaps.of( + "title", !append ? elementType() : null, + "component", elementSubType(), + "type", elementType().toLowerCase(), + "elements", elements + ); - return 0; + String template = elementType().equals(elementSubType()) ? "elements-list-adoc" : "elements-sublist-adoc"; + String partial = this.template.orElse(template); // a generic template + showCommand.main.printer().writeWithTemplate("/templates/" + partial, params, writer); + writer.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } } @Override @@ -121,6 +138,14 @@ protected Integer handleDescribeAll() { return 0; } + @Override + protected Integer handleModelAll() throws Exception { + for (String component : getNames()) { + handle(component, this::printModel); + } + return 0; + } + protected Integer handleModel() { return handle(exclusive.model.orElseThrow(), this::printModel); } @@ -133,7 +158,30 @@ protected Integer handleDescribe() { protected abstract int handle(String name, Handler func); protected int printModel(String name, Class documentedClass, Class modelClass) { - showCommand.main.printer().println(getModel(modelClass)); + try { + Writer writer = showCommand.main.printer().writer(); + + if (output.isPresent()) { + Path path = Paths.get(output.get()).resolve("examples"); + path.toFile().mkdirs(); + + File file = path + .resolve(BaseShowElements.createFileName(name)) + .toFile(); + + writer = new FileWriter(file); + } + + writer.append(getModel(modelClass)); + writer.append("\n"); + + writer.flush(); + writer.close(); + + } catch (IOException e) { + throw new UncheckedIOException(e); + } + return 0; } diff --git a/clusterless-main/src/main/java/clusterless/ConfigCommand.java b/clusterless-main/src/main/java/clusterless/ConfigCommand.java index d59c6518..99878d6b 100644 --- a/clusterless-main/src/main/java/clusterless/ConfigCommand.java +++ b/clusterless-main/src/main/java/clusterless/ConfigCommand.java @@ -21,7 +21,8 @@ */ @CommandLine.Command( name = "config", - description = "Manage local and global configuration settings." + description = "Manage local and global configuration settings.", + subcommands = {CommandLine.HelpCommand.class} ) public class ConfigCommand { @CommandLine.ParentCommand diff --git a/clusterless-main/src/main/java/clusterless/ShowArcs.java b/clusterless-main/src/main/java/clusterless/ShowArcs.java new file mode 100644 index 00000000..e0566604 --- /dev/null +++ b/clusterless-main/src/main/java/clusterless/ShowArcs.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Chris K Wensel . All Rights Reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package clusterless; + +import clusterless.model.deploy.Arc; +import org.jetbrains.annotations.NotNull; +import picocli.CommandLine; + +import java.util.Collection; + +@CommandLine.Command( + name = "arc", + description = "Show available provider arcs." +) +public class ShowArcs extends ShowComponents { + @Override + protected @NotNull String elementSubType() { + return "Arcs"; + } + + @Override + protected Collection getNames() { + return super.getNamesHaving(e -> Arc.class.isAssignableFrom(e.getValue())); + } +} diff --git a/clusterless-main/src/main/java/clusterless/ShowBarriers.java b/clusterless-main/src/main/java/clusterless/ShowBarriers.java new file mode 100644 index 00000000..c65978ef --- /dev/null +++ b/clusterless-main/src/main/java/clusterless/ShowBarriers.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 Chris K Wensel . All Rights Reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package clusterless; + +import clusterless.model.deploy.Barrier; +import org.jetbrains.annotations.NotNull; +import picocli.CommandLine; + +import java.util.Collection; + +@CommandLine.Command( + name = "barrier", + description = "Show available provider barriers." +) +public class ShowBarriers extends ShowComponents { + + @Override + protected @NotNull String elementSubType() { + return "Barriers"; + } + + @Override + protected Collection getNames() { + return super.getNamesHaving(e -> Barrier.class.isAssignableFrom(e.getValue())); + } +} diff --git a/clusterless-main/src/main/java/clusterless/ShowBoundaries.java b/clusterless-main/src/main/java/clusterless/ShowBoundaries.java new file mode 100644 index 00000000..e1293009 --- /dev/null +++ b/clusterless-main/src/main/java/clusterless/ShowBoundaries.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 Chris K Wensel . All Rights Reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package clusterless; + +import clusterless.model.deploy.Boundary; +import org.jetbrains.annotations.NotNull; +import picocli.CommandLine; + +import java.util.Collection; + +@CommandLine.Command( + name = "boundary", + description = "Show available provider boundaries." +) +public class ShowBoundaries extends ShowComponents { + + @Override + protected @NotNull String elementSubType() { + return "Boundaries"; + } + + @Override + protected Collection getNames() { + return super.getNamesHaving(e -> Boundary.class.isAssignableFrom(e.getValue())); + } +} diff --git a/clusterless-main/src/main/java/clusterless/ShowCommand.java b/clusterless-main/src/main/java/clusterless/ShowCommand.java index beeb5b47..19d2c7d0 100644 --- a/clusterless-main/src/main/java/clusterless/ShowCommand.java +++ b/clusterless-main/src/main/java/clusterless/ShowCommand.java @@ -22,7 +22,12 @@ subcommands = { ShowProviders.class, ShowComponents.class, - ShowModels.class + ShowResources.class, + ShowBoundaries.class, + ShowBarriers.class, + ShowArcs.class, + ShowModels.class, + CommandLine.HelpCommand.class } ) public class ShowCommand { @@ -42,14 +47,6 @@ static class Exclusive { ) Optional list; - @SuppressWarnings("OptionalUsedAsFieldOrParameterType") - @CommandLine.Option( - names = "--describe-all", - arity = "0", - description = "Print description of all elements." - ) - Optional all; - @SuppressWarnings("OptionalUsedAsFieldOrParameterType") @CommandLine.Option( names = "--model", @@ -62,6 +59,22 @@ static class Exclusive { @CommandLine.Option(names = "--describe", arity = "1") Optional name; + @SuppressWarnings("OptionalUsedAsFieldOrParameterType") + @CommandLine.Option( + names = "--describe-all", + arity = "0", + description = "Print description of all elements." + ) + Optional describeAll; + + @SuppressWarnings("OptionalUsedAsFieldOrParameterType") + @CommandLine.Option( + names = "--model-all", + arity = "0", + description = "Print model of all elements." + ) + Optional modelAll; + public Exclusive() { } } @@ -74,8 +87,10 @@ public Exclusive() { @Override public Integer call() throws Exception { - if (exclusive.all.isPresent() && exclusive.all.get()) { + if (exclusive.describeAll.isPresent() && exclusive.describeAll.get()) { return handleDescribeAll(); + } else if (exclusive.modelAll.isPresent() && exclusive.modelAll.get()) { + return handleModelAll(); } else if (exclusive.list.isPresent() && exclusive.list.get()) { return handleList(); } else if (exclusive.model.isPresent()) { @@ -99,8 +114,14 @@ protected Integer handleDescribeAll() throws Exception { return 0; } + protected Integer handleModelAll() throws Exception { + return 0; + } + protected Integer handleDescribe() throws Exception { return 0; } } } + + diff --git a/clusterless-main/src/main/java/clusterless/ShowComponents.java b/clusterless-main/src/main/java/clusterless/ShowComponents.java index 98d47a80..baf5bc8a 100644 --- a/clusterless-main/src/main/java/clusterless/ShowComponents.java +++ b/clusterless-main/src/main/java/clusterless/ShowComponents.java @@ -22,10 +22,11 @@ import java.io.Writer; import java.util.*; +import java.util.function.Predicate; @CommandLine.Command( name = "component", - description = "Show available components." + description = "Show all available provider components (resources, barriers, boundaries, and arcs)." ) public class ShowComponents extends BaseShowElements { @@ -40,12 +41,23 @@ protected String elementType() { @Override protected Collection getNames() { - Map providers = showCommand.main.substratesOptions().requestedProvider(); + return getNamesHaving(e -> true); + } + @NotNull + protected Set getNamesHaving(Predicate>> entryPredicate) { + Map providers = showCommand.main.substratesOptions().requestedProvider(); Set ordered = new TreeSet<>(); for (Map.Entry entry : providers.entrySet()) { - ordered.addAll(entry.getValue().models().keySet()); + Map> models = entry.getValue() + .models(); + + models.entrySet() + .stream() + .filter(entryPredicate) + .map(Map.Entry::getKey) + .forEach(ordered::add); } return ordered; @@ -73,6 +85,7 @@ protected void printDescriptionUsing(Class documentedClass, Class params = Map.of( "name", providesComponent.get().type(), + "component", elementSubType(), "synopsis", providesComponent.get().synopsis(), "description", providesComponent.get().description(), "model", BaseShowElements.getModel(modelClass) diff --git a/clusterless-main/src/main/java/clusterless/ShowResources.java b/clusterless-main/src/main/java/clusterless/ShowResources.java new file mode 100644 index 00000000..947997f7 --- /dev/null +++ b/clusterless-main/src/main/java/clusterless/ShowResources.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 Chris K Wensel . All Rights Reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package clusterless; + +import clusterless.model.deploy.Resource; +import org.jetbrains.annotations.NotNull; +import picocli.CommandLine; + +import java.util.Collection; + +@CommandLine.Command( + name = "resource", + description = "Show available provider resources." +) +public class ShowResources extends ShowComponents { + + @Override + protected @NotNull String elementSubType() { + return "Resources"; + } + + @Override + protected Collection getNames() { + return super.getNamesHaving(e -> Resource.class.isAssignableFrom(e.getValue())); + } +} diff --git a/clusterless-main/src/main/resources/templates/components-adoc.hbs b/clusterless-main/src/main/resources/templates/components-adoc.hbs index 02a5f0b2..80a49794 100644 --- a/clusterless-main/src/main/resources/templates/components-adoc.hbs +++ b/clusterless-main/src/main/resources/templates/components-adoc.hbs @@ -1,4 +1,4 @@ -= Component += {{component}} Type: `{{name}}` diff --git a/clusterless-main/src/main/resources/templates/elements-list-adoc.hbs b/clusterless-main/src/main/resources/templates/elements-list-adoc.hbs index bec54f8e..474e2b51 100644 --- a/clusterless-main/src/main/resources/templates/elements-list-adoc.hbs +++ b/clusterless-main/src/main/resources/templates/elements-list-adoc.hbs @@ -1,4 +1,4 @@ -.{{title}} +{{#if title}}.{{title}}{{/if}} {{#elements~}} * xref:{{filename}}[{{name}}] {{/elements~}} diff --git a/clusterless-main/src/main/resources/templates/elements-sublist-adoc.hbs b/clusterless-main/src/main/resources/templates/elements-sublist-adoc.hbs new file mode 100644 index 00000000..dfd53c29 --- /dev/null +++ b/clusterless-main/src/main/resources/templates/elements-sublist-adoc.hbs @@ -0,0 +1,5 @@ +{{#if title}}.{{title}}{{/if}} +* {{component}} +{{#elements~}} + ** xref:{{filename}}[{{name}}] +{{/elements~}} diff --git a/clusterless-model/src/main/java/clusterless/model/deploy/Resource.java b/clusterless-model/src/main/java/clusterless/model/deploy/Resource.java index 384f816a..638a3142 100644 --- a/clusterless-model/src/main/java/clusterless/model/deploy/Resource.java +++ b/clusterless-model/src/main/java/clusterless/model/deploy/Resource.java @@ -15,7 +15,7 @@ */ @JsonTypeName public abstract class Resource extends Support { - String name; + private String name; public String name() { return name; diff --git a/clusterless-substrate-aws-construct-common/build.gradle.kts b/clusterless-substrate-aws-construct-common/build.gradle.kts index e6d1f0e3..b690bc6b 100644 --- a/clusterless-substrate-aws-construct-common/build.gradle.kts +++ b/clusterless-substrate-aws-construct-common/build.gradle.kts @@ -18,7 +18,7 @@ dependencies { // update .github actions when updating this version // https://mvnrepository.com/artifact/software.amazon.awscdk/aws-cdk-lib - val cdkVersion = "2.96.2" + val cdkVersion = "2.99.0" api("software.amazon.awscdk:aws-cdk-lib:$cdkVersion") api("software.amazon.awscdk:glue-alpha:$cdkVersion-alpha.0") // https://mvnrepository.com/artifact/software.constructs/constructs diff --git a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/CDKProcessExec.java b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/CDKProcessExec.java index 1ad878e4..dbe156fb 100644 --- a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/CDKProcessExec.java +++ b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/CDKProcessExec.java @@ -62,8 +62,6 @@ public class CDKProcessExec extends ProcessExec { ) private Optional useLocalStackHost; - @CommandLine.Option(names = "--profile", description = "aws profile") - private String profile = System.getenv("AWS_PROFILE"); @CommandLine.Option(names = "--output-path", description = "cloud assembly output directory") private String output = "cdk.out"; @@ -79,16 +77,19 @@ public class CDKProcessExec extends ProcessExec { private Optional useTempOutput; private final Lazy outputPath = Lazy.of(this::createOutputPath); + private Supplier profile; public CDKProcessExec() { } - public CDKProcessExec(Supplier dryRun, Supplier verbosity) { + public CDKProcessExec(Supplier dryRun, Supplier verbosity, Supplier profile) { super(dryRun, verbosity); + this.profile = profile; } - public CDKProcessExec(Supplier dryRun, Supplier retry, Supplier verbosity) { + public CDKProcessExec(Supplier dryRun, Supplier retry, Supplier verbosity, Supplier profile) { super(dryRun, retry, verbosity); + this.profile = profile; } public String cdk() { @@ -100,7 +101,7 @@ public String cdkApp() { } public String profile() { - return profile; + return profile.get(); } public String output() { diff --git a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/bootstrap/Bootstrap.java b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/bootstrap/Bootstrap.java index caca98ea..bdeaa8a9 100644 --- a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/bootstrap/Bootstrap.java +++ b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/bootstrap/Bootstrap.java @@ -47,7 +47,7 @@ public class Bootstrap extends BaseCDKCommand implements Callable { @CommandLine.Mixin BootstrapCommandOptions commandOptions = new BootstrapCommandOptions(); @CommandLine.Mixin - CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, commandOptions::retry, this::verbosityLevel); + CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, commandOptions::retry, this::verbosityLevel, commandOptions::profile); @Override public Integer call() throws Exception { @@ -103,7 +103,7 @@ private Integer exec() { return 0; } - return Metadata.pushBootstrapMetadata(processExec.profile(), region, processExec.getOutputPath(), commandOptions.dryRun()); + return Metadata.pushBootstrapMetadata(commandOptions.profile(), region, processExec.getOutputPath(), commandOptions.dryRun()); } private Integer synth() { diff --git a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Deploy.java b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Deploy.java index c3640713..2dbbbcb7 100644 --- a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Deploy.java +++ b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Deploy.java @@ -24,7 +24,7 @@ public class Deploy extends BaseCDKCommand implements Callable { @CommandLine.Mixin DeployCommandOptions commandOptions = new DeployCommandOptions(); @CommandLine.Mixin - CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, commandOptions::retry, this::verbosityLevel); + CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, commandOptions::retry, this::verbosityLevel, commandOptions::profile); @Override public Integer call() throws Exception { diff --git a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Destroy.java b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Destroy.java index 7ee5654f..351efa88 100644 --- a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Destroy.java +++ b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Destroy.java @@ -25,7 +25,7 @@ public class Destroy extends BaseCDKCommand implements Callable { @CommandLine.Mixin DestroyCommandOptions commandOptions = new DestroyCommandOptions(); @CommandLine.Mixin - CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, commandOptions::retry, this::verbosityLevel); + CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, commandOptions::retry, this::verbosityLevel, commandOptions::profile); @Override public Integer call() throws Exception { diff --git a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Diff.java b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Diff.java index d91a9d6e..0a72ecd0 100644 --- a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Diff.java +++ b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Diff.java @@ -23,7 +23,7 @@ public class Diff extends BaseCDKCommand implements Callable { @CommandLine.Mixin DiffCommandOptions commandOptions = new DiffCommandOptions(); @CommandLine.Mixin - CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, this::verbosityLevel); + CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, this::verbosityLevel, commandOptions::profile); @Override public Integer call() throws Exception { diff --git a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Import.java b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Import.java index bd626e1b..d415aedf 100644 --- a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Import.java +++ b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Import.java @@ -26,7 +26,7 @@ public class Import extends BaseCDKCommand implements Callable { @CommandLine.Mixin ImportCommandOptions commandOptions = new ImportCommandOptions(); @CommandLine.Mixin - CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, this::verbosityLevel); + CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, this::verbosityLevel, commandOptions::profile); @Override public Integer call() throws Exception { diff --git a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Verify.java b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Verify.java index aeb1d8f4..02849234 100644 --- a/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Verify.java +++ b/clusterless-substrate-aws-kernel/src/main/java/clusterless/substrate/aws/cdk/lifecycle/Verify.java @@ -23,7 +23,7 @@ public class Verify extends BaseCDKCommand implements Callable { @CommandLine.Mixin VerifyCommandOptions commandOptions = new VerifyCommandOptions(); @CommandLine.Mixin - CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, this::verbosityLevel); + CDKProcessExec processExec = new CDKProcessExec(commandOptions::dryRun, this::verbosityLevel, commandOptions::profile); public Verify() { }