Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Type check resource attributes #11371

Merged
merged 1 commit into from Nov 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -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