diff --git a/changelog/pending/20221116--programgen--enable-type-checking-for-resource-attributes.yaml b/changelog/pending/20221116--programgen--enable-type-checking-for-resource-attributes.yaml new file mode 100644 index 000000000000..3f75dacee383 --- /dev/null +++ b/changelog/pending/20221116--programgen--enable-type-checking-for-resource-attributes.yaml @@ -0,0 +1,4 @@ +changes: +- type: fix + scope: programgen + description: Enable type checking for resource attributes diff --git a/pkg/codegen/pcl/binder.go b/pkg/codegen/pcl/binder.go index 305857e480a3..7e573103f890 100644 --- a/pkg/codegen/pcl/binder.go +++ b/pkg/codegen/pcl/binder.go @@ -96,9 +96,6 @@ func BindProgram(files []*syntax.File, opts ...BindOption) (*Program, hcl.Diagno o(&options) } - // TODO: remove this once the latest pulumi-terraform-bridge has been rolled out - options.skipResourceTypecheck = true - if options.loader == nil { cwd, err := os.Getwd() if err != nil { diff --git a/pkg/codegen/testing/test/program_driver.go b/pkg/codegen/testing/test/program_driver.go index d2f3b7298807..8146ca51c363 100644 --- a/pkg/codegen/testing/test/program_driver.go +++ b/pkg/codegen/testing/test/program_driver.go @@ -57,6 +57,7 @@ var PulumiPulumiProgramTests = []ProgramTest{ { Directory: "assets-archives", Description: "Assets and archives", + SkipCompile: codegen.NewStringSet("go"), }, { Directory: "synthetic-resource-properties", @@ -227,6 +228,7 @@ var PulumiPulumiYAMLProgramTests = []ProgramTest{ Directory: transpiled("aws-static-website"), Description: "AWS static website", Skip: codegen.NewStringSet("go", "nodejs", "dotnet"), + BindOptions: []pcl.BindOption{pcl.SkipResourceTypechecking}, }, { Directory: transpiled("awsx-fargate"), @@ -237,6 +239,7 @@ var PulumiPulumiYAMLProgramTests = []ProgramTest{ Directory: transpiled("azure-app-service"), Description: "Azure App Service", Skip: codegen.NewStringSet("go", "dotnet"), + BindOptions: []pcl.BindOption{pcl.SkipResourceTypechecking}, }, { Directory: transpiled("azure-container-apps"), @@ -269,6 +272,9 @@ var PulumiPulumiYAMLProgramTests = []ProgramTest{ Directory: transpiled("kubernetes"), Description: "Kubernetes", Skip: codegen.NewStringSet("go"), + // PCL resource attribute type checking doesn't handle missing `const` attributes. + // + BindOptions: []pcl.BindOption{pcl.SkipResourceTypechecking}, }, { Directory: transpiled("pulumi-variable"), diff --git a/pkg/codegen/testing/test/testdata/assets-archives-pp/assets-archives.pp b/pkg/codegen/testing/test/testdata/assets-archives-pp/assets-archives.pp index 742b601f94ae..d9d6a427213c 100644 --- a/pkg/codegen/testing/test/testdata/assets-archives-pp/assets-archives.pp +++ b/pkg/codegen/testing/test/testdata/assets-archives-pp/assets-archives.pp @@ -15,19 +15,19 @@ source = remoteAsset("https://pulumi.test") } -resource testFileArchive "aws:s3:BucketObject" { - bucket = siteBucket.id // Reference the s3.Bucket object - source = fileArchive("file.tar.gz") +resource testFileArchive "aws:lambda:Function" { + role = siteBucket.arn // Reference the s3.Bucket object + code = fileArchive("file.tar.gz") } -resource testRemoteArchive "aws:s3:BucketObject" { - bucket = siteBucket.id // Reference the s3.Bucket object - source = remoteArchive("https://pulumi.test/foo.tar.gz") +resource testRemoteArchive "aws:lambda:Function" { + role = siteBucket.arn // Reference the s3.Bucket object + code = remoteArchive("https://pulumi.test/foo.tar.gz") } -resource testAssetArchive "aws:s3:BucketObject" { - bucket = siteBucket.id // Reference the s3.Bucket object - source = assetArchive({ +resource testAssetArchive "aws:lambda:Function" { + role = siteBucket.arn // Reference the s3.Bucket object + code = assetArchive({ "file.txt": fileAsset("file.txt") "string.txt": stringAsset("

File contents

") "remote.txt": remoteAsset("https://pulumi.test") diff --git a/pkg/codegen/testing/test/testdata/assets-archives-pp/dotnet/assets-archives.cs b/pkg/codegen/testing/test/testdata/assets-archives-pp/dotnet/assets-archives.cs index 91b4198b26e6..e4a950e704dc 100644 --- a/pkg/codegen/testing/test/testdata/assets-archives-pp/dotnet/assets-archives.cs +++ b/pkg/codegen/testing/test/testdata/assets-archives-pp/dotnet/assets-archives.cs @@ -24,22 +24,22 @@ Source = new RemoteAsset("https://pulumi.test"), }); - var testFileArchive = new Aws.S3.BucketObject("testFileArchive", new() + var testFileArchive = new Aws.Lambda.Function("testFileArchive", new() { - Bucket = siteBucket.Id, - Source = new FileArchive("file.tar.gz"), + Role = siteBucket.Arn, + Code = new FileArchive("file.tar.gz"), }); - var testRemoteArchive = new Aws.S3.BucketObject("testRemoteArchive", new() + var testRemoteArchive = new Aws.Lambda.Function("testRemoteArchive", new() { - Bucket = siteBucket.Id, - Source = new RemoteArchive("https://pulumi.test/foo.tar.gz"), + Role = siteBucket.Arn, + Code = new RemoteArchive("https://pulumi.test/foo.tar.gz"), }); - var testAssetArchive = new Aws.S3.BucketObject("testAssetArchive", new() + var testAssetArchive = new Aws.Lambda.Function("testAssetArchive", new() { - Bucket = siteBucket.Id, - Source = new AssetArchive(new Dictionary + Role = siteBucket.Arn, + Code = new AssetArchive(new Dictionary { ["file.txt"] = new FileAsset("file.txt"), ["string.txt"] = new StringAsset("

File contents

"), diff --git a/pkg/codegen/testing/test/testdata/assets-archives-pp/go/assets-archives.go b/pkg/codegen/testing/test/testdata/assets-archives-pp/go/assets-archives.go index 6b2a0c7e656a..20ff72edd51d 100644 --- a/pkg/codegen/testing/test/testdata/assets-archives-pp/go/assets-archives.go +++ b/pkg/codegen/testing/test/testdata/assets-archives-pp/go/assets-archives.go @@ -1,6 +1,8 @@ package main import ( + "github.com/pulumi/pulumi-aws/sdk/v5/go/aws" + "github.com/pulumi/pulumi-aws/sdk/v5/go/aws/lambda" "github.com/pulumi/pulumi-aws/sdk/v5/go/aws/s3" "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) @@ -32,23 +34,23 @@ func main() { if err != nil { return err } - _, err = s3.NewBucketObject(ctx, "testFileArchive", &s3.BucketObjectArgs{ - Bucket: siteBucket.ID(), - Source: pulumi.NewFileArchive("file.tar.gz"), + _, err = lambda.NewFunction(ctx, "testFileArchive", &lambda.FunctionArgs{ + Role: siteBucket.Arn, + Code: pulumi.NewFileArchive("file.tar.gz"), }) if err != nil { return err } - _, err = s3.NewBucketObject(ctx, "testRemoteArchive", &s3.BucketObjectArgs{ - Bucket: siteBucket.ID(), - Source: pulumi.NewRemoteArchive("https://pulumi.test/foo.tar.gz"), + _, err = lambda.NewFunction(ctx, "testRemoteArchive", &lambda.FunctionArgs{ + Role: siteBucket.Arn, + Code: pulumi.NewRemoteArchive("https://pulumi.test/foo.tar.gz"), }) if err != nil { return err } - _, err = s3.NewBucketObject(ctx, "testAssetArchive", &s3.BucketObjectArgs{ - Bucket: siteBucket.ID(), - Source: pulumi.NewAssetArchive(map[string]interface{}{ + _, err = lambda.NewFunction(ctx, "testAssetArchive", &lambda.FunctionArgs{ + Role: siteBucket.Arn, + Code: pulumi.NewAssetArchive(map[string]interface{}{ "file.txt": pulumi.NewFileAsset("file.txt"), "string.txt": pulumi.NewStringAsset("

File contents

"), "remote.txt": pulumi.NewRemoteAsset("https://pulumi.test"), diff --git a/pkg/codegen/testing/test/testdata/assets-archives-pp/nodejs/assets-archives.ts b/pkg/codegen/testing/test/testdata/assets-archives-pp/nodejs/assets-archives.ts index 55ceb6bc31ea..e33a3ae69d81 100644 --- a/pkg/codegen/testing/test/testdata/assets-archives-pp/nodejs/assets-archives.ts +++ b/pkg/codegen/testing/test/testdata/assets-archives-pp/nodejs/assets-archives.ts @@ -14,17 +14,17 @@ const testRemoteAsset = new aws.s3.BucketObject("testRemoteAsset", { bucket: siteBucket.id, source: new pulumi.asset.RemoteAsset("https://pulumi.test"), }); -const testFileArchive = new aws.s3.BucketObject("testFileArchive", { - bucket: siteBucket.id, - source: new pulumi.asset.FileArchive("file.tar.gz"), +const testFileArchive = new aws.lambda.Function("testFileArchive", { + role: siteBucket.arn, + code: new pulumi.asset.FileArchive("file.tar.gz"), }); -const testRemoteArchive = new aws.s3.BucketObject("testRemoteArchive", { - bucket: siteBucket.id, - source: new pulumi.asset.RemoteArchive("https://pulumi.test/foo.tar.gz"), +const testRemoteArchive = new aws.lambda.Function("testRemoteArchive", { + role: siteBucket.arn, + code: new pulumi.asset.RemoteArchive("https://pulumi.test/foo.tar.gz"), }); -const testAssetArchive = new aws.s3.BucketObject("testAssetArchive", { - bucket: siteBucket.id, - source: new pulumi.asset.AssetArchive({ +const testAssetArchive = new aws.lambda.Function("testAssetArchive", { + role: siteBucket.arn, + code: new pulumi.asset.AssetArchive({ "file.txt": new pulumi.asset.FileAsset("file.txt"), "string.txt": new pulumi.asset.StringAsset("

File contents

"), "remote.txt": new pulumi.asset.RemoteAsset("https://pulumi.test"), diff --git a/pkg/codegen/testing/test/testdata/assets-archives-pp/python/assets-archives.py b/pkg/codegen/testing/test/testdata/assets-archives-pp/python/assets-archives.py index bef6f941dd24..1c0d8f016751 100644 --- a/pkg/codegen/testing/test/testdata/assets-archives-pp/python/assets-archives.py +++ b/pkg/codegen/testing/test/testdata/assets-archives-pp/python/assets-archives.py @@ -11,15 +11,15 @@ test_remote_asset = aws.s3.BucketObject("testRemoteAsset", bucket=site_bucket.id, source=pulumi.remoteAsset("https://pulumi.test")) -test_file_archive = aws.s3.BucketObject("testFileArchive", - bucket=site_bucket.id, - source=pulumi.FileArchive("file.tar.gz")) -test_remote_archive = aws.s3.BucketObject("testRemoteArchive", - bucket=site_bucket.id, - source=pulumi.RemoteArchive("https://pulumi.test/foo.tar.gz")) -test_asset_archive = aws.s3.BucketObject("testAssetArchive", - bucket=site_bucket.id, - source=pulumi.AssetArchive({ +test_file_archive = aws.lambda_.Function("testFileArchive", + role=site_bucket.arn, + code=pulumi.FileArchive("file.tar.gz")) +test_remote_archive = aws.lambda_.Function("testRemoteArchive", + role=site_bucket.arn, + code=pulumi.RemoteArchive("https://pulumi.test/foo.tar.gz")) +test_asset_archive = aws.lambda_.Function("testAssetArchive", + role=site_bucket.arn, + code=pulumi.AssetArchive({ "file.txt": pulumi.FileAsset("file.txt"), "string.txt": pulumi.StringAsset("

File contents

"), "remote.txt": pulumi.remoteAsset("https://pulumi.test"),