Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore!: Python and Go codegen runs in polymorph_code_gen target #688

Open
wants to merge 32 commits into
base: main-1.x
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/manual.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ jobs:
uses: ./.github/workflows/test_models_dafny_verification.yml
with:
dafny: ${{ inputs.dafny }}
manual-ci-polymorph-code-gen:
uses: ./.github/workflows/test_models_polymorph_code_gen.yml
with:
dafny: ${{ inputs.dafny }}
manual-ci-java:
uses: ./.github/workflows/test_models_java_tests.yml
with:
Expand Down
9 changes: 9 additions & 0 deletions .github/workflows/pull.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,15 @@ jobs:
uses: ./.github/workflows/test_models_dafny_verification.yml
with:
dafny: ${{ matrix.dafny-version }}
pr-ci-polymorph-code-gen:
needs: pr-populate-dafny-versions
strategy:
fail-fast: false
matrix:
dafny-version: ${{ fromJson(needs.pr-populate-dafny-versions.outputs.dafny-version-list) }}
uses: ./.github/workflows/test_models_polymorph_code_gen.yml
with:
dafny: ${{ matrix.dafny-version }}
pr-ci-java:
needs: pr-populate-dafny-versions
strategy:
Expand Down
9 changes: 9 additions & 0 deletions .github/workflows/push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,15 @@ jobs:
uses: ./.github/workflows/test_models_dafny_verification.yml
with:
dafny: ${{ matrix.dafny-version }}
push-ci-polymorph-code-gen:
needs: pr-populate-dafny-versions
strategy:
fail-fast: false
matrix:
dafny-version: ${{ fromJson(needs.pr-populate-dafny-versions.outputs.dafny-version-list) }}
uses: ./.github/workflows/test_models_polymorph_code_gen.yml
with:
dafny: ${{ matrix.dafny-version }}
push-ci-java:
needs: pr-populate-dafny-versions
strategy:
Expand Down
51 changes: 51 additions & 0 deletions .github/workflows/test_models_polymorph_code_gen.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# This workflow runs polymorph_code_gen.
name: polymorph_code_gen test

on:
workflow_call:
inputs:
dafny:
description: "The Dafny version to run"
required: true
type: string

jobs:
testPolymorphCodeGen:
runs-on: "ubuntu-latest"
steps:
- name: Support longpaths on Git checkout
run: |
git config --global core.longpaths true

- uses: actions/checkout@v3
with:
submodules: recursive

- name: Setup Dafny
uses: dafny-lang/[email protected]
with:
dafny-version: ${{ inputs.dafny }}

- name: Setup Java 17 for codegen
uses: actions/setup-java@v3
with:
distribution: "corretto"
java-version: 17

- name: Setup Python for running tests
uses: actions/setup-python@v4
with:
python-version: 3.11
architecture: x64
- run: |
python -m pip install --upgrade pip
pip install --upgrade tox
pip install poetry

- name: Install Python formatters
run: make setup_smithy_dafny_python

- name: Build one TestModel with all languages (smoke test for polymorph_code_gen target)
shell: bash
working-directory: TestModels/SimpleTypes/SimpleString
run: make polymorph_code_gen
24 changes: 13 additions & 11 deletions SmithyDafnyMakefile.mk
Original file line number Diff line number Diff line change
Expand Up @@ -288,13 +288,15 @@ _polymorph:
$(OUTPUT_JAVA_TEST) \
$(OUTPUT_DOTNET) \
$(OUTPUT_GO) \
$(if $(strip $(GO_MODULE_NAME)),--go-module-name $(GO_MODULE_NAME),) \
$(GO_DEPENDENCY_MODULE_NAMES) \
$(OUTPUT_PYTHON) \
$(MODULE_NAME) \
$(if $(strip $(PYTHON_MODULE_NAME)),--python-module-name $(PYTHON_MODULE_NAME),) \
$(PYTHON_DEPENDENCY_MODULE_NAMES) \
$(OUTPUT_RUST) \
--model $(if $(DIR_STRUCTURE_V2), $(LIBRARY_ROOT)/dafny/$(SERVICE)/Model, $(SMITHY_MODEL_ROOT)) \
--dependent-model $(PROJECT_ROOT)/$(SMITHY_DEPS) \
$(patsubst %, --dependent-model $(PROJECT_ROOT)/%/Model, $($(service_deps_var))) \
$(DEPENDENCY_MODULE_NAMES) \
$(patsubst %, --namespace %, $($(namespace_var))) \
$(OUTPUT_LOCAL_SERVICE_$(SERVICE)) \
$(AWS_SDK_CMD) \
Expand All @@ -313,13 +315,15 @@ _polymorph_wrapped:
$(OUTPUT_DOTNET_WRAPPED) \
$(OUTPUT_JAVA_WRAPPED) \
$(OUTPUT_GO_WRAPPED) \
$(if $(strip $(GO_MODULE_NAME)),--go-module-name $(GO_MODULE_NAME),) \
$(GO_DEPENDENCY_MODULE_NAMES) \
$(OUTPUT_PYTHON_WRAPPED) \
$(MODULE_NAME) \
$(if $(strip $(PYTHON_MODULE_NAME)),--python-module-name $(PYTHON_MODULE_NAME),) \
$(PYTHON_DEPENDENCY_MODULE_NAMES) \
$(OUTPUT_RUST_WRAPPED) \
--model $(if $(DIR_STRUCTURE_V2),$(LIBRARY_ROOT)/dafny/$(SERVICE)/Model,$(LIBRARY_ROOT)/Model) \
--dependent-model $(PROJECT_ROOT)/$(SMITHY_DEPS) \
$(patsubst %, --dependent-model $(PROJECT_ROOT)/%/Model, $($(service_deps_var))) \
$(DEPENDENCY_MODULE_NAMES) \
--namespace $($(namespace_var)) \
--local-service-test \
$(AWS_SDK_CMD) \
Expand Down Expand Up @@ -354,6 +358,7 @@ _polymorph_code_gen: OUTPUT_DOTNET=\
_polymorph_code_gen: OUTPUT_JAVA=--output-java $(LIBRARY_ROOT)/runtimes/java/src/main/smithy-generated
_polymorph_code_gen: OUTPUT_GO=--output-go $(LIBRARY_ROOT)/runtimes/go/
_polymorph_code_gen: OUTPUT_JAVA_TEST=--output-java-test $(LIBRARY_ROOT)/runtimes/java/src/test/smithy-generated
_polymorph_code_gen: OUTPUT_PYTHON=--output-python $(LIBRARY_ROOT)/runtimes/python/src/$(PYTHON_MODULE_NAME)/smithygenerated
_polymorph_code_gen: OUTPUT_RUST=--output-rust $(LIBRARY_ROOT)/runtimes/rust
_polymorph_code_gen: _polymorph

Expand Down Expand Up @@ -429,10 +434,6 @@ polymorph_python:
done

_polymorph_python: OUTPUT_PYTHON=--output-python $(LIBRARY_ROOT)/runtimes/python/src/$(PYTHON_MODULE_NAME)/smithygenerated
# Defined per-Makefile
_polymorph_python: MODULE_NAME=--library-name $(PYTHON_MODULE_NAME)
# Defined per-Makefile
_polymorph_python: DEPENDENCY_MODULE_NAMES=$(PYTHON_DEPENDENCY_MODULE_NAMES)
_polymorph_python: _polymorph

# Dependency for formatting generating Java code
Expand Down Expand Up @@ -469,8 +470,6 @@ polymorph_go:
done

_polymorph_go: OUTPUT_GO=--output-go $(LIBRARY_ROOT)/runtimes/go/
_polymorph_go: MODULE_NAME=--library-name $(GO_MODULE_NAME)
_polymorph_go: DEPENDENCY_MODULE_NAMES = $(GO_DEPENDENCY_MODULE_NAMES)
# TODO: run_goimports should be an independent command. Right now it is required because of import issues in polymorph_go
_polymorph_go: _polymorph _mv_polymorph_go run_goimports

Expand Down Expand Up @@ -659,6 +658,9 @@ _clean:
rm -rf $(LIBRARY_ROOT)/TestResults
rm -rf $(LIBRARY_ROOT)/runtimes/net/Generated $(LIBRARY_ROOT)/runtimes/net/bin $(LIBRARY_ROOT)/runtimes/net/obj
rm -rf $(LIBRARY_ROOT)/runtimes/net/tests/bin $(LIBRARY_ROOT)/runtimes/net/tests/obj
rm -rf $(LIBRARY_ROOT)/runtimes/python/src/**/smithygenerated
rm -rf $(LIBRARY_ROOT)/runtimes/python/src/**/internaldafny/generated
rm -rf $(LIBRARY_ROOT)/runtimes/python/test/internaldafny/generated

clean: _clean

Expand Down Expand Up @@ -706,7 +708,7 @@ setup_python: setup_smithy_dafny_python
setup_python:
python3 -m pip install poetry

net: polymorph_dafny transpile_python polymorph_python test_python
python: polymorph_dafny transpile_python polymorph_python test_python

# Python MUST transpile dependencies first to generate .dtr files
transpile_python: $(if $(ENABLE_EXTERN_PROCESSING), _no_extern_pre_transpile, )
Expand Down
8 changes: 4 additions & 4 deletions TestModels/CallingAWSSDKFromLocalService/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ WRAPPED_INDEX_FILE_WITHOUT_EXTERN_STRING="module WrappedSimpleCallingawssdkfroml
# Go

GO_DEPENDENCY_MODULE_NAMES := \
--dependency-library-name=com.amazonaws.kms=github.com/smithy-lang/smithy-dafny/kmsv2 \
--dependency-library-name=com.amazonaws.dynamodb=github.com/smithy-lang/smithy-dafny/ddbv2 \
--dependency-library-name=sdk.com.amazonaws.dynamodb=github.com/aws/aws-sdk-go-v2/service/dynamodb \
--dependency-library-name=sdk.com.amazonaws.kms=github.com/aws/aws-sdk-go-v2/service/kms
--go-dependency-module-name=com.amazonaws.kms=github.com/smithy-lang/smithy-dafny/kmsv2 \
--go-dependency-module-name=com.amazonaws.dynamodb=github.com/smithy-lang/smithy-dafny/ddbv2 \
--go-dependency-module-name=sdk.com.amazonaws.dynamodb=github.com/aws/aws-sdk-go-v2/service/dynamodb \
--go-dependency-module-name=sdk.com.amazonaws.kms=github.com/aws/aws-sdk-go-v2/service/kms

GO_MODULE_NAME="github.com/smithy-lang/smithy-dafny/TestModels/CallingAWSSDKFromLocalService"

Expand Down
16 changes: 8 additions & 8 deletions TestModels/Dependencies/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ SMITHY_DEPS=dafny-dependencies/Model/traits.smithy
GO_MODULE_NAME="github.com/smithy-lang/smithy-dafny/TestModels/Dependencies"

GO_DEPENDENCY_MODULE_NAMES := \
--dependency-library-name=simple.constraints=github.com/smithy-lang/smithy-dafny/TestModels/Constraints \
--dependency-library-name=simple.errors=github.com/smithy-lang/smithy-dafny/TestModels/Errors \
--dependency-library-name=simple.extendable.resources=github.com/smithy-lang/smithy-dafny/TestModels/Extendable \
--dependency-library-name=simple.resources=github.com/smithy-lang/smithy-dafny/TestModels/Resource
--go-dependency-module-name=simple.constraints=github.com/smithy-lang/smithy-dafny/TestModels/Constraints \
--go-dependency-module-name=simple.errors=github.com/smithy-lang/smithy-dafny/TestModels/Errors \
--go-dependency-module-name=simple.extendable.resources=github.com/smithy-lang/smithy-dafny/TestModels/Extendable \
--go-dependency-module-name=simple.resources=github.com/smithy-lang/smithy-dafny/TestModels/Resource

TRANSLATION_RECORD_GO := \
Resource/runtimes/go/ImplementationFromDafny-go/ImplementationFromDafny-go.dtr \
Expand All @@ -66,10 +66,10 @@ clean: _clean
PYTHON_MODULE_NAME=simple_dependencies

PYTHON_DEPENDENCY_MODULE_NAMES := \
--dependency-library-name=simple.resources=simple_resources \
--dependency-library-name=simple.errors=simple_errors \
--dependency-library-name=simple.extendable.resources=simple_extendable_resources \
--dependency-library-name=simple.constraints=simple_constraints
--python-dependency-module-name=simple.resources=simple_resources \
--python-dependency-module-name=simple.errors=simple_errors \
--python-dependency-module-name=simple.extendable.resources=simple_extendable_resources \
--python-dependency-module-name=simple.constraints=simple_constraints

TRANSLATION_RECORD_PYTHON := \
--translation-record ../dafny-dependencies/StandardLibrary/runtimes/python/src/smithy_dafny_standard_library/internaldafny/generated/dafny_src-py.dtr \
Expand Down
2 changes: 1 addition & 1 deletion TestModels/MultipleModels/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ TRANSLATION_RECORD_GO := \
PYTHON_MODULE_NAME=multiple_models

PYTHON_DEPENDENCY_MODULE_NAMES := \
--dependency-library-name=simple.multiplemodels.dependencyproject=multiple_models
--python-dependency-module-name=simple.multiplemodels.dependencyproject=multiple_models

TRANSLATION_RECORD_PYTHON := \
--translation-record ../dafny-dependencies/StandardLibrary/runtimes/python/src/smithy_dafny_standard_library/internaldafny/generated/dafny_src-py.dtr
Expand Down
2 changes: 1 addition & 1 deletion TestModels/aws-sdks/ddb/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ AWS_SDK_CMD=--aws-sdk
GO_MODULE_NAME="github.com/smithy-lang/smithy-dafny/ddb"

GO_DEPENDENCY_MODULE_NAMES := \
--dependency-library-name=sdk.com.amazonaws.dynamodb=github.com/aws/aws-sdk-go-v2/service/dynamodb \
--go-dependency-module-name=sdk.com.amazonaws.dynamodb=github.com/aws/aws-sdk-go-v2/service/dynamodb \

TRANSLATION_RECORD_GO := \
dafny-dependencies/StandardLibrary/runtimes/go/ImplementationFromDafny-go/ImplementationFromDafny-go.dtr
Expand Down
2 changes: 1 addition & 1 deletion TestModels/aws-sdks/ddbv2/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ TRANSLATION_RECORD_PYTHON := \
GO_MODULE_NAME="github.com/smithy-lang/smithy-dafny/ddbv2"

GO_DEPENDENCY_MODULE_NAMES := \
--dependency-library-name=sdk.com.amazonaws.dynamodb=github.com/aws/aws-sdk-go-v2/service/dynamodb \
--go-dependency-module-name=sdk.com.amazonaws.dynamodb=github.com/aws/aws-sdk-go-v2/service/dynamodb \

TRANSLATION_RECORD_GO := \
dafny-dependencies/StandardLibrary/runtimes/go/ImplementationFromDafny-go/ImplementationFromDafny-go.dtr
Expand Down
2 changes: 1 addition & 1 deletion TestModels/aws-sdks/kmsv2/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ TRANSLATION_RECORD_PYTHON := \
GO_MODULE_NAME="github.com/smithy-lang/smithy-dafny/kmsv2"

GO_DEPENDENCY_MODULE_NAMES := \
--dependency-library-name=sdk.com.amazonaws.kms=github.com/aws/aws-sdk-go-v2/service/kms \
--go-dependency-module-name=sdk.com.amazonaws.kms=github.com/aws/aws-sdk-go-v2/service/kms \

TRANSLATION_RECORD_GO := \
dafny-dependencies/StandardLibrary/runtimes/go/ImplementationFromDafny-go/ImplementationFromDafny-go.dtr
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,8 @@ public static void main(String[] args) {
.withLibraryRoot(cliArguments.libraryRoot)
.withServiceModel(serviceModel)
.withDependentModelPaths(cliArguments.dependentModelPaths)
.withDependencyLibraryNames(cliArguments.dependencyLibraryNames)
.withDependencyPythonModuleNames(cliArguments.dependencyPythonModuleNames)
.withDependencyGoModuleNames(cliArguments.dependencyGoModuleNames)
.withNamespaces(cliArguments.namespaces)
.withTargetLangOutputDirs(outputDirs)
.withTargetLangTestOutputDirs(testOutputDirs)
Expand Down Expand Up @@ -159,7 +160,10 @@ public static void main(String[] args) {
cliArguments.includeDafnyFile.ifPresent(
engineBuilder::withIncludeDafnyFile
);
cliArguments.libraryName.ifPresent(engineBuilder::withLibraryName);
cliArguments.pythonModuleName.ifPresent(
engineBuilder::withPythonModuleName
);
cliArguments.goModuleName.ifPresent(engineBuilder::withGoModuleName);
cliArguments.patchFilesDir.ifPresent(engineBuilder::withPatchFilesDir);
final CodegenEngine engine = engineBuilder.build();
switch (cliArguments.command) {
Expand Down Expand Up @@ -202,10 +206,20 @@ private static Options getCliOptionsForBuild() {
)
.addOption(
Option
.builder("dln")
.longOpt("dependency-library-name")
.builder("pdmn")
.longOpt("python-dependency-module-name")
.desc(
"namespace-to-library-name map entry for a dependency namespace"
"<optional> if using Python, a dependency namespace-to-Python module name map entry"
)
.hasArg()
.build()
)
.addOption(
Option
.builder("gdmn")
.longOpt("go-dependency-module-name")
.desc(
"<optional> if using Go, a dependency namespace-to-Go module name map entry"
)
.hasArg()
.build()
Expand All @@ -221,10 +235,20 @@ private static Options getCliOptionsForBuild() {
)
.addOption(
Option
.builder("ln")
.longOpt("library-name")
.builder("pmn")
.longOpt("python-module-name")
.desc(
"<optional> if using Python, the intended Python module name for generated code"
)
.hasArg()
.build()
)
.addOption(
Option
.builder("gmn")
.longOpt("go-module-name")
.desc(
"if generating for a language that uses library names (go, python), the name of the library in that language"
"<optional> if using Go, the intended Go module name for generated code"
)
.hasArg()
.build()
Expand Down Expand Up @@ -472,9 +496,11 @@ private record CliArguments(
Path libraryRoot,
Path modelPath,
Path[] dependentModelPaths,
Map<String, String> dependencyLibraryNames,
Map<String, String> dependencyPythonModuleNames,
Map<String, String> dependencyGoModuleNames,
Set<String> namespaces,
Optional<String> libraryName,
Optional<String> pythonModuleName,
Optional<String> goModuleName,
Optional<Path> outputDotnetDir,
Optional<Path> outputJavaDir,
Optional<Path> outputGoDir,
Expand Down Expand Up @@ -538,10 +564,18 @@ static Optional<CliArguments> parse(String[] args) throws ParseException {
// ex. `dependency-library-name=aws.cryptography.materialproviders=aws_cryptographic_materialproviders`
// maps the Smithy namespace `aws.cryptography.materialproviders` to a module name `aws_cryptographic_materialproviders`
// via a map key of "aws.cryptography.materialproviders" and a value of "aws_cryptographic_materialproviders"
final Map<String, String> dependencyNamespacesToLibraryNamesMap =
commandLine.hasOption("dependency-library-name")
final Map<String, String> dependencyNamespacesToPythonModuleNamesMap =
commandLine.hasOption("python-dependency-module-name")
? Arrays
.stream(commandLine.getOptionValues("dln"))
.stream(commandLine.getOptionValues("pdmn"))
.map(s -> s.split("="))
.collect(Collectors.toMap(i -> i[0], i -> i[1]))
: new HashMap<>();

final Map<String, String> dependencyNamespacesToGoModuleNamesMap =
commandLine.hasOption("go-dependency-module-name")
? Arrays
.stream(commandLine.getOptionValues("gdmn"))
.map(s -> s.split("="))
.collect(Collectors.toMap(i -> i[0], i -> i[1]))
: new HashMap<>();
Expand All @@ -551,8 +585,12 @@ static Optional<CliArguments> parse(String[] args) throws ParseException {
.<Set<String>>map(ns -> new HashSet<>(Arrays.asList(ns)))
.orElse(Collections.emptySet());

final Optional<String> libraryName = Optional.ofNullable(
commandLine.getOptionValue("library-name")
final Optional<String> pythonModuleName = Optional.ofNullable(
commandLine.getOptionValue("python-module-name")
);

final Optional<String> goModuleName = Optional.ofNullable(
commandLine.getOptionValue("go-module-name")
);

Optional<Path> outputDafnyDir = Optional
Expand Down Expand Up @@ -643,9 +681,11 @@ static Optional<CliArguments> parse(String[] args) throws ParseException {
libraryRoot,
modelPath,
dependentModelPaths,
dependencyNamespacesToLibraryNamesMap,
dependencyNamespacesToPythonModuleNamesMap,
dependencyNamespacesToGoModuleNamesMap,
namespaces,
libraryName,
pythonModuleName,
goModuleName,
outputDotnetDir,
outputJavaDir,
outputGoDir,
Expand Down
Loading
Loading