* Add test case
* Fix tests
* Add test dependencies correctly
* Feed through error handling
* Include test output
* Get types to line up
* Add remaining test files
* Update changelog
* Correctly find type paths
* Handle transitive objects
* Handle required fields
* Add feature flag for go
* Add required+default test case
* Don't `<any>` cast known types.
* Add more flags.
I realize this should really wait for PR#8400 to merge.
* Add plain object to env-helper test
This test fails right now. My next problem is fixing it.
* Handle plain types
* Handle function inputs
* Fix the indentation
* Handle output types correctly
* Remove unnecessary `!`
* Add test case
* Fix tests
* Add test dependencies correctly
* Feed through error handling
* Include test output
* Get types to line up
* Add remaining test files
* Update changelog
* Correctly find type paths
* Handle transitive objects
* Handle required fields
* Add required+default test case
* Don't `<any>` cast known types.
* Add plain object to env-helper test
This test fails right now. My next problem is fixing it.
* Handle plain types
* Handle function inputs
* Fix the indentation
* Handle output types correctly
* Remove unnecessary `!`
* Start on `genPlainObjectDefaultFunc`
* Add missing change to fix test
* Run tests with merge
* Refactor out assign
* Merge in next _index.md diff
* Change method name to `Defaults`
* Handle enums correctly
* Another attempt at _index.md
* Make module generation deterministic
* Add checks for old values
* Insert defaults in resources
* Fix docs generation
Credit to @praneetloke
* Progress on adding defaults to Resource arguments
* Handle resource argument defaults
* Don't create defaults if disableObjectDefaults
* Rename test folder
* Add test for disable flag
* Fix disable test
* Update docs
* Abstract out nil comparisons
* Use reflection to test for empty values
* Simplify Ptr and pulumi.Any type handling
* Remove unused function
* Apply defaults to functions
* Update new test with master codegen
* Tests + nil check
These changes remove the `Ptr` variants of input/ouptut types for
resources. A `TPtr` input or output is normally generated for `T` if `T`
is present in an `optional(input(T))` or `optional(output(T))` and if
the Go representation for `T` is not nilable. The generation of `Ptr`
variants for resource types breaks the latter rule: the canonical
representation of a resource type named `Foo` is a pointer to a struct
type named `Foo` (i.e. `*Foo`). `Foo` itself is not a resource, as it
does not implement the Go `Resource` interface. Because this
representation already accommodates `nil` to indicate the lack of a
value, we need not generate `FooPtr{Input,Output}` types.
Besides being unnecessary, the implementation of `Ptr` types for
resources was incorrect. Rather than using `**Foo` as their element
type, these types use `*Foo`--identical to the element type used for
the normal input/output types. Furthermore, the generated code for
at least `FooOutput.ToFooPtrOutputWithContext` and `FooPtrOutput.Elem`
was incorrect, making these types virtually unusable in practice.
Finally, these `Ptr` types should never appear on input/output
properties in practice, as the logic we use to generate input and output
type references never generates them for `optional({input,output}(T)).
Instead, it generates references to the standard input/output types.
Though this is _technically_ a breaking change--it changes the set of
exported types for any package that defines resources--I believe that in
practice it will be invisible to users for the reasons stated above.
These types are not usable, and were never referenced.
This is preparatory work for #7943.
* Modify Go codegen for fn.Output overloads
* Fix go tests
* Fixed CHANGELOG conflict
* ACCEPT changes reverting Fargate example to master, file issue
* Link an issue
* Add test case
* Fix tests
* Add test dependencies correctly
* Feed through error handling
* Include test output
* Get types to line up
* Add remaining test files
* Update changelog
* Correctly find type paths
* Handle transitive objects
* Handle required fields
* Add required+default test case
* Don't `<any>` cast known types.
* Add plain object to env-helper test
This test fails right now. My next problem is fixing it.
* Handle plain types
* Handle function inputs
* Fix the indentation
* Handle output types correctly
* Remove unnecessary `!`
* Add missing change to fix test
* Run tests with merge
* Merge in next _index.md diff
* Another attempt at _index.md
* Make module generation deterministic
* Fix docs generation
Credit to @praneetloke
* Teach PCL about fnOutput forms
* Teach PCL about fnOutput forms
* Teach Node program gen to emit fnOutput forms
* TypeCheck fix
* AWS package bump
* Add tests
* CHANGELOG
* Temporarily skip non-Node affected tests
* Address PR feedback: restrict new form to Output args only
And update the metaschema to accommodate the `isOverlay` properties
added in #8338. Overlay enums, like other overlay members, are
implemented out-of-band by the declaring package. Code generators should
not generate declarations for overlay enums.
Add a new `IsOverlay` option to schema types and functions that allows providers to document overlays in the schema. This makes it easier to generate API docs consistently, even for code that is generated outside of the typical codegen process.
* Toward doc gen of fn.Output version signatures
* Fixup Python docgen, and reorder forms so the direct form comes firs
* Respect go opt-out flag
* Fix tempalte bug with unbalanced HTML tags
* Edit CHANGELOG_PENDING.md
* Merge codeblocks in the function template
* Accept docs changes
When importing a resource in Go, we change resource names with hyphens to snake_case. This happens because we introduced a change that converts the resource name to a valid Go identifier so it can be used as a local variable. But we were also using this converted name as the string resource name, which causes problems with import: the imported resource in the state file has the original resource name, but the generated program uses the converted name, causing Pulumi to delete and recreate the resource when adopting the generated import code.
This change fixes the issue by maintaining the original resource name, and only using the converted name for variables.
* Respect `plain` when generating default values.
* Add new test
* Simplify test case
* Add indirection to allow taking references
* Reflect indirection problem in tests
* Remove Plain fields. Base off of primitive type
* Reenable docs
* Update changelog
* Implement always default solution
* Fix test by pulling in master
* Add enum test and cleanup
* Fix const handling
* Clarify the changelog
* Rebase 5758 .NET work and make output-funcs pass
* Propagate changes to the other examples
* CHANGELOG
* Address PR feedback
* Add a test reproducing aws-native compilation failure
* Fix dangling type ref issue in the .NET backend for codegen
* Accept changes and unskip simple-methods-schema compile check
* Accept changes in node, python, go codegen
* SDK changes to enable a better implementation approach
* Switch approach to support functions like GetAmiIds; avoid name conflicts under tfbridge20
* Make all dotnet tests pass, mechanical fixes + accept test output
* Accept python changes
* Accept node output
* Accept docs changes
* Deepen the unit test to cover the interesting helper type
* Accept go changes and fixup tests
* Implement dep propagation through Invoke
* Fixup cyclic-types
* Accept codegen
* NOTE we now require .NET SDK 3.15 or higher
* Update generation templates
* Updated templates for codegen
* Rm api-doc-resource template
* Update templates to use layout:api and no alias
* Set no_edit_this_page to true in the header and index templates used by docs gen.
* Update docs generation baseline test files with template updates
* Remove the notion of menu from resource templates (#8200)
* Update the title lookup map entry for aws-api-gateway
* Updated CSS classes for icons in API docs template
* Updated tests:
* Additional test file updates
* Fixup package names
Co-authored-by: Devon Grove <devon@pulumi.com>
Co-authored-by: Christian Nunciato <c@nunciato.org>
Co-authored-by: stack72 <public@paulstack.co.uk>
Register an appropriate input type with the runtime for each object
type and composite thereof (e.g. pointer, array, etc.). This does not
cover registrations for enum and resource input types, which will be
added with future changes.
Co-authored-by: Pat Gavlin <pat@pulumi.com>
* Do not share maps so tests can run in parallel
* Fix comment
* Try not to break dependencies
* Address PR feedback
* Fix downstream compilation failure
* Fix lint
* Address PR feedback
* Add a test demonstrating the problem
* Fix the bug
* Accept changes over the example set
* Accept go changes
* Accept python codegen; avoid nil lang info panic
* Accept .NET changes, compile
* Accept docs changes
* Add changelog notes
* Fix lint
* Add parens sparingly
* Flatten unions
* PR feedback
* Move program tests into folders
* update package schema
* Enabled tests pass
* Fix lints and begin to update test cases
* Re-enable tests
* Update aws version to v4
* Refactor language specific parts
* Hook up dotnet and nodejs
* Update tests from master
* SSOT for schema/version
* Name blocking errors. Leave tests in valid state
* Give each language its own folder
* Remove SkipCompile for azure-sa (bug was fixed)
* Fix nits + changes asserts to require
* Remove unused import
* One last assert => require
When computing the type name for a field of an object type, we must
ensure that we do not generate invalid recursive struct types. A struct
type T contains invalid recursion if the closure of its fields and its
struct-typed fields' fields includes a field of type T. A few examples:
Directly invalid:
type T struct { Invalid T }
Indirectly invalid:
type T struct { Invalid S }
type S struct { Invalid T }
In order to avoid generating invalid struct types, we replace all
references to types involved in a cyclical definition with *T. The
examples above therefore become:
(1) type T struct { Valid *T }
(2) type T struct { Valid *S }
type S struct { Valid *T }
We do this using a rewriter that turns all fields involved in reference
cycles into optional fields.
These changes also include an enhancement to the SDK codegen test
driver in the interest of making iterating and debugging more convenient: if the -sdk.no-checks flag is passed, the driver will not run post-generation checks.
* Multi-pass, in-place checks for SDK codegen tests; toward working Python checks
* Remove temp debug output
* Upgrade Node
* Update dotnet; need to follow up on version.txt quirks
* WIP
* Sounds like we can use non-github package names to ensure things are local
* Fix simple-enum-schema
* Fix dash-named-schema
* Fix nested-module
* Start building a test-running pass
* Infer skipping tests from skipping compiles
* Move tree schma tests to a proper place
* Address lint issues on Go code
* Build against local Go SDK
* Update pkg/codegen/internal/test/sdk_driver.go
Co-authored-by: Ian Wahbe <ian@wahbe.com>
* Make go tests work by copying them into the tree from go-extras
* Fix lint
* Fix bad merge
* Manifest-based file discovery
* Remove version-related TODO from dotnet codegen
* Add doc comment
* Do not overwrite go.mod if found from mixins
* Accept python codegen change
* Accept node codegen
* Ignore lint issue
* Accept docs changes
Co-authored-by: Ian Wahbe <ian@wahbe.com>
The Pulumi Package metaschema is a JSON schema definition that describes
the format of a Pulumi Package schema. The metaschema can be used to
validate certain basic properties of a Pulumi Package schema, including
(but not limited to):
- data types (e.g. is this property a string?)
- data formats (e.g. is this string property a valid regex?)
- object shapes (e.g. is this object missing required properties?)
The schema binder has been updated to use the metaschema as its first
validation pass.
In addition to its use in the binder, the metaschema has its own page in
the developer documentation. This page is generated using a small tool,
jsonschema2md.go.
* Add pascal name case
* Add test to prevent regressions
* Update CHANGELOG_PENDING.md
* Give node/tsc more memory
* Use camelcase instead of snake case
* Add clearer comments
* Emit schema.Package.Version when possible
* Update CHANGELOG_PENDING.md
* Correctly interpret python versions (I hope)
* Update PLUGIN_VERSION to the package version
* Modify tests to conform with master merge
* Validate Name, Version and Enviroment
For the full path:
Package.Name
Package.Version
Package.Property.Default
* Update tests
* Update CHANGELOG_PENDING.md
* Add more versions to tests
* Add another "Version" field
* Even more "version" tags
* One more "version" tag added
* Update test results from codegen
* Fix py codegen tests
* Fix doc test
* Remove `version` validation
* Unformat json files
* Fail only on errors