diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0a69fb4a8316..20a538037032 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -145,6 +145,8 @@ jobs: --version-set current \ --partition-module pkg "$PKG_UNIT_TEST_PARTITIONS" \ --partition-module sdk 1 \ + --partition-module sdk/go/pulumi-language-go 1 \ + --partition-module sdk/nodejs/cmd/pulumi-language-nodejs 1 \ --partition-module tests 2 ) diff --git a/.github/workflows/periodic-coverage.yml b/.github/workflows/periodic-coverage.yml new file mode 100644 index 000000000000..518c39609c3a --- /dev/null +++ b/.github/workflows/periodic-coverage.yml @@ -0,0 +1,48 @@ +# Periodically runs the tests on master and posts coverage results to codecov. + +name: Test with coverage +on: + workflow_dispatch: {} + schedule: + # Run every 12 hours. + - cron: '0 */12 * * *' + +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: true + +defaults: + run: + shell: bash + +jobs: + + info: + name: info + uses: ./.github/workflows/ci-info.yml + permissions: + contents: read + with: + ref: master + is-snapshot: true + secrets: inherit + + ci: + name: CI + needs: [info] + uses: ./.github/workflows/ci.yml + permissions: + contents: read + # To sign artifacts. + id-token: write + with: + ref: master + version: ${{ needs.info.outputs.version }} + lint: true + build-all-targets: true + test-codegen: true + test-version-sets: current + integration-test-platforms: ubuntu-latest + acceptance-test-platforms: macos-latest windows-latest + enable-coverage: true + secrets: inherit diff --git a/changelog/pending/20230624--sdkgen-nodejs--fix-isinstance-methods-for-generated-provider-types.yaml b/changelog/pending/20230624--sdkgen-nodejs--fix-isinstance-methods-for-generated-provider-types.yaml new file mode 100644 index 000000000000..3efc426604a7 --- /dev/null +++ b/changelog/pending/20230624--sdkgen-nodejs--fix-isinstance-methods-for-generated-provider-types.yaml @@ -0,0 +1,4 @@ +changes: +- type: fix + scope: sdkgen/nodejs + description: Fix isInstance methods for generated provider types. diff --git a/pkg/codegen/nodejs/gen.go b/pkg/codegen/nodejs/gen.go index 48d79bd3f8a3..a0558f767e35 100644 --- a/pkg/codegen/nodejs/gen.go +++ b/pkg/codegen/nodejs/gen.go @@ -692,7 +692,17 @@ func (mod *modContext) genResource(w io.Writer, r *schema.Resource) (resourceFil fmt.Fprintf(w, " if (obj === undefined || obj === null) {\n") fmt.Fprintf(w, " return false;\n") fmt.Fprintf(w, " }\n") - fmt.Fprintf(w, " return obj['__pulumiType'] === %s.__pulumiType;\n", name) + + typeExpression := fmt.Sprintf("%s.__pulumiType", name) + if r.IsProvider { + // We pass __pulumiType to the ProviderResource constructor as the "type" for this provider, the + // ProviderResource constructor in the SDK then prefixes "pulumi:providers:" to that token and passes that + // down to the CustomResource constructor, which then assigns that type token to the newly constructed + // objects __pulumiType field. As such we also need to prefix "pulumi:providers:" when doing the equality + // check here. + typeExpression = "\"pulumi:providers:\" + " + typeExpression + } + fmt.Fprintf(w, " return obj['__pulumiType'] === %s;\n", typeExpression) fmt.Fprintf(w, " }\n") fmt.Fprintf(w, "\n") diff --git a/pkg/codegen/testing/test/testdata/azure-native-nested-types/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/azure-native-nested-types/nodejs/provider.ts index 1476a6b1ef01..de9c4a486953 100644 --- a/pkg/codegen/testing/test/testdata/azure-native-nested-types/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/azure-native-nested-types/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/cyclic-types/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/cyclic-types/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/cyclic-types/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/cyclic-types/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/dash-named-schema/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/dash-named-schema/nodejs/provider.ts index 770dccc8089d..df893f6e8652 100644 --- a/pkg/codegen/testing/test/testdata/dash-named-schema/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/dash-named-schema/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/dashed-import-schema/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/dashed-import-schema/nodejs/provider.ts index 01d2d48bf684..7795433b1257 100644 --- a/pkg/codegen/testing/test/testdata/dashed-import-schema/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/dashed-import-schema/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/different-enum/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/different-enum/nodejs/provider.ts index 01d2d48bf684..7795433b1257 100644 --- a/pkg/codegen/testing/test/testdata/different-enum/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/different-enum/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/embedded-crd-types/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/embedded-crd-types/nodejs/provider.ts index aa46ed5a9a1c..5eb4603d5dc5 100644 --- a/pkg/codegen/testing/test/testdata/embedded-crd-types/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/embedded-crd-types/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/enum-reference/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/enum-reference/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/enum-reference/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/enum-reference/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/external-enum/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/external-enum/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/external-enum/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/external-enum/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/external-node-compatibility/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/external-node-compatibility/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/external-node-compatibility/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/external-node-compatibility/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/external-resource-schema/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/external-resource-schema/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/external-resource-schema/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/external-resource-schema/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/functions-secrets/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/functions-secrets/nodejs/provider.ts index 709fb835c072..2a6f3ee30e4b 100644 --- a/pkg/codegen/testing/test/testdata/functions-secrets/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/functions-secrets/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/hyphen-url/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/hyphen-url/nodejs/provider.ts index 5b63f1468734..f5625f121bdb 100644 --- a/pkg/codegen/testing/test/testdata/hyphen-url/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/hyphen-url/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/naming-collisions/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/naming-collisions/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/naming-collisions/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/naming-collisions/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/nested-module-thirdparty/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/nested-module-thirdparty/nodejs/provider.ts index 770dccc8089d..df893f6e8652 100644 --- a/pkg/codegen/testing/test/testdata/nested-module-thirdparty/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/nested-module-thirdparty/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/nested-module/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/nested-module/nodejs/provider.ts index aa46ed5a9a1c..5eb4603d5dc5 100644 --- a/pkg/codegen/testing/test/testdata/nested-module/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/nested-module/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/output-funcs-edgeorder/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/output-funcs-edgeorder/nodejs/provider.ts index b7e4e7660d73..6477d50f37ab 100644 --- a/pkg/codegen/testing/test/testdata/output-funcs-edgeorder/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/output-funcs-edgeorder/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/output-funcs-tfbridge20/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/output-funcs-tfbridge20/nodejs/provider.ts index 709fb835c072..2a6f3ee30e4b 100644 --- a/pkg/codegen/testing/test/testdata/output-funcs-tfbridge20/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/output-funcs-tfbridge20/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/output-funcs/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/output-funcs/nodejs/provider.ts index 709fb835c072..2a6f3ee30e4b 100644 --- a/pkg/codegen/testing/test/testdata/output-funcs/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/output-funcs/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/plain-and-default/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/plain-and-default/nodejs/provider.ts index 9f983393745a..99177cd9cbd4 100644 --- a/pkg/codegen/testing/test/testdata/plain-and-default/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/plain-and-default/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/plain-object-defaults/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/plain-object-defaults/nodejs/provider.ts index 98a6795f813d..cf70d87cfabe 100644 --- a/pkg/codegen/testing/test/testdata/plain-object-defaults/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/plain-object-defaults/nodejs/provider.ts @@ -21,7 +21,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/plain-object-disable-defaults/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/plain-object-disable-defaults/nodejs/provider.ts index 98a6795f813d..cf70d87cfabe 100644 --- a/pkg/codegen/testing/test/testdata/plain-object-disable-defaults/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/plain-object-disable-defaults/nodejs/provider.ts @@ -21,7 +21,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/plain-schema-gh6957/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/plain-schema-gh6957/nodejs/provider.ts index 4b33458275f5..0137d2a13faf 100644 --- a/pkg/codegen/testing/test/testdata/plain-schema-gh6957/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/plain-schema-gh6957/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/provider-config-schema/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/provider-config-schema/nodejs/provider.ts index 3f09cc7bd995..1f7e3d6503a5 100644 --- a/pkg/codegen/testing/test/testdata/provider-config-schema/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/provider-config-schema/nodejs/provider.ts @@ -19,7 +19,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/provider-type-schema/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/provider-type-schema/nodejs/provider.ts index c49e2769e77b..3e212038e472 100644 --- a/pkg/codegen/testing/test/testdata/provider-type-schema/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/provider-type-schema/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/regress-8403/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/regress-8403/nodejs/provider.ts index ca90b39f6064..5b2498212135 100644 --- a/pkg/codegen/testing/test/testdata/regress-8403/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/regress-8403/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/regress-node-8110/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/regress-node-8110/nodejs/provider.ts index 1c6f7150494b..4af02c6960ca 100644 --- a/pkg/codegen/testing/test/testdata/regress-node-8110/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/regress-node-8110/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/replace-on-change/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/replace-on-change/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/replace-on-change/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/replace-on-change/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/resource-args-python-case-insensitive/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/resource-args-python-case-insensitive/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/resource-args-python-case-insensitive/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/resource-args-python-case-insensitive/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/resource-args-python/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/resource-args-python/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/resource-args-python/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/resource-args-python/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/resource-property-overlap/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/resource-property-overlap/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/resource-property-overlap/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/resource-property-overlap/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/secrets/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/secrets/nodejs/provider.ts index 709fb835c072..2a6f3ee30e4b 100644 --- a/pkg/codegen/testing/test/testdata/secrets/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/secrets/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/simple-enum-schema/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/simple-enum-schema/nodejs/provider.ts index 01d2d48bf684..7795433b1257 100644 --- a/pkg/codegen/testing/test/testdata/simple-enum-schema/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/simple-enum-schema/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/simple-methods-schema-single-value-returns/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/simple-methods-schema-single-value-returns/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/simple-methods-schema-single-value-returns/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/simple-methods-schema-single-value-returns/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/simple-methods-schema/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/simple-methods-schema/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/simple-methods-schema/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/simple-methods-schema/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/simple-plain-schema-with-root-package/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/simple-plain-schema-with-root-package/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/simple-plain-schema-with-root-package/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/simple-plain-schema-with-root-package/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/simple-plain-schema/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/simple-plain-schema/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/simple-plain-schema/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/simple-plain-schema/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs-extras/tests/codegen.spec.ts b/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs-extras/tests/codegen.spec.ts new file mode 100644 index 000000000000..453b5521a682 --- /dev/null +++ b/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs-extras/tests/codegen.spec.ts @@ -0,0 +1,46 @@ +// Copyright 2016-2021, Pulumi Corporation. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import * as pulumi from "@pulumi/pulumi"; +import * as assert from "assert"; +import "mocha"; +import * as sut from ".."; + +pulumi.runtime.setMocks({ + newResource: function(_: pulumi.runtime.MockResourceArgs): {id: string, state: any} { + return {id: "", state: {}}; + }, + call: function(args: pulumi.runtime.MockCallArgs) { + throw new Error("call not implemented"); + }, +}); + + +describe("simple-resource-schema", () => { + const p = new sut.Provider("my-p"); + const r = new sut.Resource("my-r", {}); + const c = new sut.FooResource("my-c", {}) + + assert.deepStrictEqual(sut.Provider.isInstance(p), true); + assert.deepStrictEqual(sut.Provider.isInstance(r), false); + assert.deepStrictEqual(sut.Provider.isInstance(c), false); + + assert.deepStrictEqual(sut.Resource.isInstance(p), false); + assert.deepStrictEqual(sut.Resource.isInstance(r), true); + assert.deepStrictEqual(sut.Resource.isInstance(c), false); + + assert.deepStrictEqual(sut.FooResource.isInstance(p), false); + assert.deepStrictEqual(sut.FooResource.isInstance(r), false); + assert.deepStrictEqual(sut.FooResource.isInstance(c), true); + }); diff --git a/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs/package.json b/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs/package.json index a3358e004bd2..ef53584e3142 100644 --- a/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs/package.json +++ b/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs/package.json @@ -6,11 +6,14 @@ "install": "node scripts/install-pulumi-plugin.js resource example 3.2.1" }, "dependencies": { - "@pulumi/pulumi": "^3.12" + "@pulumi/pulumi": "^3.42.0" }, "devDependencies": { - "@types/node": "^14", - "typescript": "^3.7.0" + "@types/mocha": "latest", + "@types/node": "ts4.3", + "mocha": "latest", + "ts-node": "latest", + "typescript": "^4.3.5" }, "pulumi": { "resource": true, diff --git a/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs/tsconfig.json b/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs/tsconfig.json index 9e7bc6288035..82e1b94b508e 100644 --- a/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs/tsconfig.json +++ b/pkg/codegen/testing/test/testdata/simple-resource-schema/nodejs/tsconfig.json @@ -20,6 +20,7 @@ "otherResource.ts", "provider.ts", "resource.ts", + "tests/codegen.spec.ts", "typeUses.ts", "types/index.ts", "types/input.ts", diff --git a/pkg/codegen/testing/test/testdata/simple-resource-schema/schema.json b/pkg/codegen/testing/test/testdata/simple-resource-schema/schema.json index 0293e13f7523..a2599e15eb9d 100644 --- a/pkg/codegen/testing/test/testdata/simple-resource-schema/schema.json +++ b/pkg/codegen/testing/test/testdata/simple-resource-schema/schema.json @@ -260,12 +260,15 @@ "respectSchemaVersion": true }, "nodejs": { - "dependencies": { - "@pulumi/pulumi": "^3.12" - }, "devDependencies": { - "typescript": "^3.7.0" + "@types/mocha": "latest", + "@types/node": "ts4.3", + "mocha": "latest", + "ts-node": "latest" }, + "extraTypeScriptFiles": [ + "tests/codegen.spec.ts" + ], "respectSchemaVersion": true, "pluginVersion": "3.2.1" }, diff --git a/pkg/codegen/testing/test/testdata/simple-yaml-schema/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/simple-yaml-schema/nodejs/provider.ts index 1c3d1a21cf69..835c97a5a88f 100644 --- a/pkg/codegen/testing/test/testdata/simple-yaml-schema/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/simple-yaml-schema/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/pkg/codegen/testing/test/testdata/simplified-invokes/nodejs/provider.ts b/pkg/codegen/testing/test/testdata/simplified-invokes/nodejs/provider.ts index 65d5ece37d11..1996afeb5fdd 100644 --- a/pkg/codegen/testing/test/testdata/simplified-invokes/nodejs/provider.ts +++ b/pkg/codegen/testing/test/testdata/simplified-invokes/nodejs/provider.ts @@ -16,7 +16,7 @@ export class Provider extends pulumi.ProviderResource { if (obj === undefined || obj === null) { return false; } - return obj['__pulumiType'] === Provider.__pulumiType; + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; } diff --git a/scripts/go-wrapper.sh b/scripts/go-wrapper.sh index f9967d7f1128..ba6e771a7524 100755 --- a/scripts/go-wrapper.sh +++ b/scripts/go-wrapper.sh @@ -23,17 +23,6 @@ COVER_PACKAGES=( \ # Join COVER_PACKAGES with commas. COVERPKG=$(IFS=,; echo "${COVER_PACKAGES[*]}") -# If it's a production or local build - building for macOS on macOS - use CGO for DNS resolver functionality. -# -# See: https://github.com/golang/go/issues/12524 -if [ "$(go env GOOS)" = "darwin" ] && [ "$(uname)" = "Darwin" ]; then - # `go env GOOS` returns "darwin" when cross-compiling to macOS - # `uname` returns "Darwin" on macOS - export CGO_ENABLED=1 -else - export CGO_ENABLED=0 -fi - case "$1" in build) MODE="$PULUMI_BUILD_MODE" diff --git a/sdk/nodejs/resource.ts b/sdk/nodejs/resource.ts index 66db6fbda103..8fdbce9d854c 100644 --- a/sdk/nodejs/resource.ts +++ b/sdk/nodejs/resource.ts @@ -13,13 +13,13 @@ // limitations under the License. import { ResourceError } from "./errors"; +import * as log from "./log"; import { Input, Inputs, interpolate, Output, output } from "./output"; import { getResource, readResource, registerResource, registerResourceOutputs } from "./runtime/resource"; +import { unknownValue } from "./runtime/rpc"; import { getProject, getStack } from "./runtime/settings"; import { getStackResource } from "./runtime/state"; -import { unknownValue } from "./runtime/rpc"; import * as utils from "./utils"; -import * as log from "./log"; export type ID = string; // a provider-assigned ID. export type URN = string; // an automatically generated logical URN, used to stably identify resources. @@ -265,6 +265,14 @@ export abstract class Resource { // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match readonly __pluginDownloadURL?: string; + /** + * Private field containing the type ID for this object. Useful for implementing `isInstance` on + * classes that inherit from `Resource`. + * @internal + */ + // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match + public readonly __pulumiType: string; + public static isInstance(obj: any): obj is Resource { return utils.isInstance(obj, "__pulumiResource"); } @@ -303,6 +311,8 @@ export abstract class Resource { remote: boolean = false, dependency: boolean = false, ) { + this.__pulumiType = t; + if (dependency) { this.__protect = false; this.__providers = {}; @@ -763,14 +773,6 @@ export abstract class CustomResource extends Resource { // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match public readonly __pulumiCustomResource: boolean; - /** - * Private field containing the type ID for this object. Useful for implementing `isInstance` on - * classes that inherit from `CustomResource`. - * @internal - */ - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match - public readonly __pulumiType: string; - /** * id is the provider-assigned unique ID for this managed resource. It is set during * deployments and may be missing (undefined) during planning phases. @@ -809,7 +811,6 @@ export abstract class CustomResource extends Resource { super(t, name, true, props, opts, false, dependency); this.__pulumiCustomResource = true; - this.__pulumiType = t; } } diff --git a/sdk/python/lib/pulumi/resource.py b/sdk/python/lib/pulumi/resource.py index bd533bc6c121..97e942de0e10 100644 --- a/sdk/python/lib/pulumi/resource.py +++ b/sdk/python/lib/pulumi/resource.py @@ -139,7 +139,7 @@ class Alias: parent of the resource is used (`opts.parent` if provided, else the implicit stack resource parent). - To specify no original parent, use `Alias(parent=pulumi.rootStackResource)`. + To specify no original parent, use `Alias(parent=pulumi.ROOT_STACK_RESOURCE)`. """ stack: Optional["Input[str]"] diff --git a/tests/integration/integration_python_test.go b/tests/integration/integration_python_test.go index 34d4ef2cd495..335073a51fb5 100644 --- a/tests/integration/integration_python_test.go +++ b/tests/integration/integration_python_test.go @@ -1061,3 +1061,18 @@ func TestConstructProviderPropagationPython(t *testing.T) { filepath.Join("..", "..", "sdk", "python", "env", "src"), }) } + +// Regression test for https://github.com/pulumi/pulumi/issues/9411 +func TestDuplicateOutputPython(t *testing.T) { + integration.ProgramTest(t, &integration.ProgramTestOptions{ + Dir: filepath.Join("python", "duplicate-output"), + Dependencies: []string{ + filepath.Join("..", "..", "sdk", "python", "env", "src"), + }, + ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { + expected := []interface{}{float64(1), float64(2)} + assert.Equal(t, expected, stack.Outputs["export1"]) + assert.Equal(t, expected, stack.Outputs["export2"]) + }, + }) +} diff --git a/tests/integration/python/duplicate-output/.gitignore b/tests/integration/python/duplicate-output/.gitignore new file mode 100644 index 000000000000..28a6abfd4dd0 --- /dev/null +++ b/tests/integration/python/duplicate-output/.gitignore @@ -0,0 +1,6 @@ +*.pyc +/.pulumi/ +/dist/ +/*.egg-info +venv/ +lib/ diff --git a/tests/integration/python/duplicate-output/Pulumi.yaml b/tests/integration/python/duplicate-output/Pulumi.yaml new file mode 100644 index 000000000000..70a611b95613 --- /dev/null +++ b/tests/integration/python/duplicate-output/Pulumi.yaml @@ -0,0 +1,3 @@ +name: pulumi-python-duplicate-output +description: A Python program that tests returning the same output twice. +runtime: python diff --git a/tests/integration/python/duplicate-output/__main__.py b/tests/integration/python/duplicate-output/__main__.py new file mode 100644 index 000000000000..bb9c7d299268 --- /dev/null +++ b/tests/integration/python/duplicate-output/__main__.py @@ -0,0 +1,8 @@ +# Copyright 2016-2023, Pulumi Corporation. All rights reserved. + +import pulumi + +a = pulumi.Output.from_input([1, 2]) + +pulumi.export("export1", a) +pulumi.export("export2", a) \ No newline at end of file diff --git a/tests/integration/python/duplicate-output/requirements.txt b/tests/integration/python/duplicate-output/requirements.txt new file mode 100644 index 000000000000..b1dc38733acb --- /dev/null +++ b/tests/integration/python/duplicate-output/requirements.txt @@ -0,0 +1 @@ +pulumi