Skip to content

Commit

Permalink
Merge #11371
Browse files Browse the repository at this point in the history
11371: Type check resource attributes r=iwahbe a=iwahbe

Type check resource attributes unless instructed otherwise.

This makes debugging programgen errors so much easier!

Co-authored-by: Ian Wahbe <ian@wahbe.com>
  • Loading branch information
bors[bot] and iwahbe committed Nov 16, 2022
2 parents b4cf661 + 0d3fca4 commit 96259af
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 48 deletions.
@@ -0,0 +1,4 @@
changes:
- type: fix
scope: programgen
description: Enable type checking for resource attributes
3 changes: 0 additions & 3 deletions pkg/codegen/pcl/binder.go
Expand Up @@ -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 {
Expand Down
6 changes: 6 additions & 0 deletions pkg/codegen/testing/test/program_driver.go
Expand Up @@ -57,6 +57,7 @@ var PulumiPulumiProgramTests = []ProgramTest{
{
Directory: "assets-archives",
Description: "Assets and archives",
SkipCompile: codegen.NewStringSet("go"),
},
{
Directory: "synthetic-resource-properties",
Expand Down Expand Up @@ -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"),
Expand All @@ -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"),
Expand Down Expand Up @@ -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"),
Expand Down
Expand Up @@ -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("<h1>File contents</h1>")
"remote.txt": remoteAsset("https://pulumi.test")
Expand Down
Expand Up @@ -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<string, AssetOrArchive>
Role = siteBucket.Arn,
Code = new AssetArchive(new Dictionary<string, AssetOrArchive>
{
["file.txt"] = new FileAsset("file.txt"),
["string.txt"] = new StringAsset("<h1>File contents</h1>"),
Expand Down
@@ -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"
)
Expand Down Expand Up @@ -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("<h1>File contents</h1>"),
"remote.txt": pulumi.NewRemoteAsset("https://pulumi.test"),
Expand Down
Expand Up @@ -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("<h1>File contents</h1>"),
"remote.txt": new pulumi.asset.RemoteAsset("https://pulumi.test"),
Expand Down
Expand Up @@ -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("<h1>File contents</h1>"),
"remote.txt": pulumi.remoteAsset("https://pulumi.test"),
Expand Down

0 comments on commit 96259af

Please sign in to comment.