winglang / wing

A programming language for the cloud ☁️ A unified programming model, combining infrastructure and runtime code into one language ⚡
https://winglang.io
Other
5.04k stars 196 forks source link

Cloud deployment fails if root directory contains spaces #6465

Open polamoros opened 6 months ago

polamoros commented 6 months ago

I tried this:

create an empty directory with a name that includes spaces my directory

mkdir "my directory"

Create a wing test file:

//my directory/main.test.w

bring cloud;

let bucket = new cloud.Bucket();

test "Bucket is empty" {
  assert(bucket.list().length == 0);
}

and run wing test -t tf-aws main.test.w

This happened:

✔ Compiling main.test.w to tf-aws...

✔ terraform init

✖ terraform apply

Command failed: terraform apply -auto-approve
╷
│ Error: opening S3 object source (assets/Test78LWzuS1GQ_env0_testBucketisempty_Handler_Asset_9A744A14/966A2F55D4BD8FD662E1A92D8BB84CD9/archive.zip): open assets/Test78LWzuS1GQ_env0_testBucketisempty_Handler_Asset_9A744A14/966A2F55D4BD8FD662E1A92D8BB84CD9/archive.zip: no such file or directory
│
│   with aws_s3_object.Test78LWzuS1GQ_env0_testBucketisempty_Handler_S3Object_9FB2AC36,
│   on main.tf.json line 145, in resource.aws_s3_object.Test78LWzuS1GQ_env0_testBucketisempty_Handler_S3Object_9FB2AC36:
│  145:       }
│
╵

✔ terraform destroy

Tests 1 failed (1)
Snapshots 1 skipped
Test Files 1 failed (1)
Duration 0m23.74s

I expected this:

The test to pass.

Is there a workaround?

no

Anything else?

The test passes on the simulator

>_ wing test main.test.w

pass ─ main.test.wsim » root/env0/test:Bucket is empty

Tests 1 passed (1)
Snapshots 1 skipped
Test Files 1 passed (1)
Duration 0m0.30s

Wing Version

0.73.41

Node.js Version

v20.11.1

Platform(s)

MacOS

Community Notes

skyrpex commented 6 months ago

It worked to me, same version (0.73.41):

wing test -t tf-aws main.test.w

✔ Compiling main.test.w to tf-aws...

✔ terraform init

✔ terraform apply

✔ Setting up test runner...

✔ Running tests...

pass ─ main.test.tfaws.454176 » root/Test.OoU3q9EuIO/env0/test:Bucket is empty
✔ terraform destroy

✔ Snapshot main.test.w.tf-aws.snap.md...

Tests 1 passed (1)
Snapshots 1 new
Test Files 1 passed (1)
Duration 0m51.02s
polamoros commented 6 months ago

it looks like it's happening if the root directory contains a space

skyrpex commented 6 months ago

Maybe we should file an issue anyway?

Chriscbr commented 6 months ago

I'm able to repro this. Running wing test "dir with spaces/main.w" is fine but wing test -t tf-aws "dir with spaces/main.w" fails with the aforementioned error.

revitalbarletz commented 5 months ago

@srinumadhavv it is all yours :)

skyrpex commented 5 months ago

wing compile fails for @thoroc, too, if there's spaces in the cwd.

thoroc commented 5 months ago

Yes unfortunately MacOS has those spaces in certain situations where node tries to use a path on /Users/<USER>/Library/Application Support/ during compile time. In my case, this is due to be using github.com/Schniz/fnm. I have tried to have a peruse at the code for the compile subcommand, but I think it is calling code outside this part of the source code.

Of course the path could be put between quotes or the space escaped to solve this issue, from what I understand.

Chriscbr commented 4 months ago

Another user ran into this while compiling on Windows (the parent directory of their project had spaces, causing either compilation to fail or deployment to AWS to fail). Link to the discussion on discord: https://discord.com/channels/1096077994994442281/1258078911749820436