pulumi/pkg/codegen
Will Jones 17b66dfc56
Add a `call` intrinsic to PCL
In order for PCL to serve as an authoritative intermediate language for
Pulumi programs, it needs to be able to express all the concepts
available to a Pulumi program written in a high-level programming
language. Put another way, it must be capable of expressing all the
functionality exposed by the `ResourceMonitor` interface. Presently, the
ability to `Call` methods on component resources is not available in
PCL. This change adds a new `call` intrinsic to fix that.

`call` has three required arguments: the receiver (that will become the
`__self__` argument under the hood), the method name (that must exist in
the resource's `Methods` map in schema), and an object of arguments
(whose specifications must appear in the corresponding `Function` in the
schema). An example use of `call` might thus look as follows:

```hcl
resource "c" "pkg:index:Callable" {
  ...
}

output "o" {
  value = call(c, "method", { x = 1, y = 2 })
}
```

In order to type check and applications of `call` when binding PCL
programs, we use the recently powered-up annotations feature to look up
the resource node of the receiver from its expression. With this, we are
able to grab the schema and validate the method name and arguments.
While we add unit tests for binding programs that use `call`, this
change does not extend program generation or the conformance test suite.
This will be done in a subsequent set of changes.

Part of fixing pulumi/pulumi-java#262
2025-01-10 16:58:48 +00:00
..
cgstrings Enable goheader rule and add missing license headers (#15473) 2024-09-09 12:05:45 +00:00
convert Bump gRPC dependencies and migrate `grpc.Dial` (#17701) 2024-11-06 18:36:10 +00:00
dotnet Clean up and test PCL object type annotations 2025-01-10 16:58:48 +00:00
gen_program_test Don't publish test code in `pkg/codegen` (#17517) 2024-10-09 11:09:54 +00:00
go Clean up and test PCL object type annotations 2025-01-10 16:58:48 +00:00
hcl2 Clean up and test PCL object type annotations 2025-01-10 16:58:48 +00:00
nodejs Update minimum SDK versions for Node.js and Python (#17997) 2024-12-10 18:14:38 +00:00
pcl Add a `call` intrinsic to PCL 2025-01-10 16:58:48 +00:00
python Switch to pyproject.toml + uv (#18081) 2024-12-27 13:53:42 +00:00
report Check language plugins in about tests (#18007) 2024-12-11 17:45:19 +00:00
schema Use LoadPackageV2 in loader server (#18021) 2024-12-19 01:24:01 +00:00
testing Add a `call` intrinsic to PCL 2025-01-10 16:58:48 +00:00
README.md Document code generation concepts (#17162) 2024-09-05 13:12:59 +00:00
docs.go Support "lifting" single-valued method returns to their return type (#8111) 2021-10-01 11:33:02 -07:00
docs_test.go ci: radical idea - what if slow tests & no stdout makes GH consider runner dead? 2022-03-06 14:52:13 -08:00
programs.md Document code generation concepts (#17162) 2024-09-05 13:12:59 +00:00
sdks.md Document code generation concepts (#17162) 2024-09-05 13:12:59 +00:00
utilities.go Use slice.Prealloc instead of make([]T, 0, ...) 2023-06-29 11:27:50 +01:00
utilities_test.go [sdkgen/dotnet] Compute restore sources from local dependencies and referenced packages (#18042) 2024-12-13 15:11:51 +00:00
utilities_types.go [sdkgen/dotnet] Compute restore sources from local dependencies and referenced packages (#18042) 2024-12-13 15:11:51 +00:00

README.md

(codegen)= (crosscode)=

Code generation

Code generation is essential to Pulumi's ability to support both a variety of programming languages and a variety of cloud providers. This package defines the core components of Pulumi's code generation functionality (known as Pulumi CrossCode). At a high level, code generation is used to manage three categories of output: SDKs, programs, and documentation. At a lower level, these all make use of a number of shared concepts such as schema and Pulumi Configuration Language (PCL).

:::{toctree} :maxdepth: 1 :titlesonly:

/pkg/codegen/sdks.md /pkg/codegen/programs.md /pkg/codegen/docs/README /pkg/codegen/schema/README /pkg/codegen/pcl/README :::