Skip to content

Commit

Permalink
validate upgraded models in Upgrade1to2Command
Browse files Browse the repository at this point in the history
  • Loading branch information
AndrewFossAWS committed Jan 11, 2023
1 parent 44e7263 commit 9fbd9e2
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,19 @@ static Model buildModel(
CliPrinter printer,
boolean quietValidation,
SmithyBuildConfig config
) {
ModelAssembler assembler = createModelAssembler(arguments, models, env, printer, config);
ValidatedResult<Model> result = assembler.assemble();
Validator.validate(quietValidation, env.colors(), env.stderr(), result);
return result.getResult().orElseThrow(() -> new RuntimeException("Expected Validator to throw"));
}

static ModelAssembler createModelAssembler(
Arguments arguments,
List<String> models,
Command.Env env,
CliPrinter printer,
SmithyBuildConfig config
) {
ClassLoader classLoader = env.classLoader();
ModelAssembler assembler = CommandUtils.createModelAssembler(classLoader);
Expand Down Expand Up @@ -79,10 +92,7 @@ static Model buildModel(
config.getSources().forEach(assembler::addImport);
models.forEach(assembler::addImport);
config.getImports().forEach(assembler::addImport);

ValidatedResult<Model> result = assembler.assemble();
Validator.validate(quietValidation, colors, env.stderr(), result);
return result.getResult().orElseThrow(() -> new RuntimeException("Expected Validator to throw"));
return assembler;
}

static ModelAssembler createModelAssembler(ClassLoader classLoader) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
import software.amazon.smithy.model.traits.EnumTrait;
import software.amazon.smithy.model.traits.Trait;
import software.amazon.smithy.model.transform.ModelTransformer;
import software.amazon.smithy.model.validation.ValidatedResultException;
import software.amazon.smithy.utils.IoUtils;
import software.amazon.smithy.utils.SimpleParser;
import software.amazon.smithy.utils.StringUtils;
Expand Down Expand Up @@ -124,7 +125,27 @@ protected int run(Arguments arguments, Env env, List<String> models) {
smithyBuild.build(resultConsumer, resultConsumer);
Model finalizedModel = resultConsumer.getResult().getModel();

for (Path modelFile : resolveModelFiles(finalizedModel, models)) {
List<Path> resolvedModelFiles = resolveModelFiles(finalizedModel, models);

// Validate upgraded models before writing
ModelAssembler assembler = CommandUtils
.createModelAssembler(arguments, models, env, env.stderr(), smithyBuildConfig);

for (Path modelFile : resolvedModelFiles) {
String upgradedModel = upgradeFile(finalizedModel, modelFile);
// Replace existing models with upgraded models for a Smithy IDL model file
assembler.addUnparsedModel(modelFile.toAbsolutePath().toString(), upgradedModel);
}

try {
assembler.assemble().validate();
} catch (ValidatedResultException e) {
throw new RuntimeException("Upgraded Smithy models are invalid. "
+ "Please report the following errors to Smithy team.\n"
+ e.getMessage());
}

for (Path modelFile : resolvedModelFiles) {
writeUpgradedFile(finalizedModel, modelFile);
}

Expand Down

0 comments on commit 9fbd9e2

Please sign in to comment.