pulumi/sdk
Abhinav Gupta a244de9092
fix(host/go): Download external plugins even if they're not imported
We previously changed how the Go language host retrieves information
about a Go module:

    before: go list -m -json -mod=mod all
    after:  go list -m -json $importPath1 $importPath1

This change made it possible for us to supprot running in vendored mode
which allowed for use of private plugins that are not go-get-able.

This uncovered a corner case in the `go` command's behavior
when running in module mode:

If a package is listed in the go.mod
but it's not imported by the current module,
`go list -m -json $importPath` will not list its Dir in the output
even if it's present in the module cache.
For example, given a go.mod file that declares a dependency
but code that doesn't import it, as of Go 1.20.5,

    export GOMODCACHE=$(mktemp -d)
    go mod download -json
    go list -m -json $importPath

The output of `go mod download` will include information
about the dependency and the `Dir` where it was downloaded,
but `go list -m` will not.

Unfortunately, we can't just use `go mod download`
because that breaks vendoring:
vendored dependencies cannot always be redownloaded.

To resolve this issue,
we switch to a two-pass variant to gather this information:

- Run `go list -m` to get whatever information we can locally.
  This will be sufficient for the majority of use cases.
- For the handful of cases where the dependency isn't imported,
  we'll use `go mod download -json` to download them on-demand
  and get their location from that instead.

The `go mod download` step will take place only if we're in module mode.
In vendor mode, we'll work with what we have.

Resolves #13301
2023-07-11 16:22:15 -07:00
..
go fix(host/go): Download external plugins even if they're not imported 2023-07-11 16:22:15 -07:00
nodejs Merge #13437 2023-07-11 20:49:08 +00:00
proto/go [engine] Add support for source positions 2023-07-10 14:35:40 -07:00
python [engine] Add support for source positions 2023-07-10 14:35:40 -07:00
README.md Cleanup sdk/README.md 2023-01-03 17:12:12 -05:00
go.mod deps(go): Upgrade to grpc 1.56.1 2023-07-06 09:04:16 -07:00
go.sum deps(go): Upgrade to grpc 1.56.1 2023-07-06 09:04:16 -07:00

README.md

Pulumi Language SDKs

This directory contains Pulumi SDKs for the following languages:

See the respective READMEs for information about installing and using these libraries.

The language providers work by implementing gRPC interfaces defined in the top level directory proto.