Azure / autorest

OpenAPI (f.k.a Swagger) Specification code generator. Supports C#, PowerShell, Go, Java, Node.js, TypeScript, Python
MIT License
4.6k stars 733 forks source link

EXEC : error | error : spawn EINVAL #4968

Open archerzz opened 4 months ago

archerzz commented 4 months ago

Before filling a bug

Describe the bug

Starting from May 17, there were autorest errors in one of our pipeline: https://dev.azure.com/azure-sdk/internal/_build?definitionId=5990&_a=summary

fatal | Process() cancelled due to failure
EXEC : error | error : spawn EINVAL [D:\a\_work\1\s\azure-sdk\sdk\resourcehealth\Azure.ResourceManager.ResourceHealth\src\Azure.ResourceManager.ResourceHealth.csproj]
error | Autorest completed with an error. If you think the error message is unclear, or is a bug, please declare an issues at https://github.com/Azure/autorest/issues with the error message you are seeing.
C:\Users\cloudtest\.nuget\packages\microsoft.azure.autorest.csharp\3.0.0-alpha.20240519.1\buildMultiTargeting\Microsoft.Azure.AutoRest.CSharp.targets(57,5): error MSB3073: The command "npx autorest@ --max-memory-size=8192 --skip-csproj --skip-upgrade-check --version=3.9.7 D:\a\_work\1\s\azure-sdk\sdk\resourcehealth\Azure.ResourceManager.ResourceHealth\src/autorest.md --use=C:\Users\cloudtest\.nuget\packages\microsoft.azure.autorest.csharp\3.0.0-alpha.20240519.1\buildMultiTargeting\../tools/net7.0/any/ --clear-output-folder=true --shared-source-folders="D:\a\_work\1\s\azure-sdk\eng\/../sdk/core/Azure.Core/src/Shared/;C:\Users\cloudtest\.nuget\packages\microsoft.azure.autorest.csharp\3.0.0-alpha.20240519.1\buildMultiTargeting\../content/Generator.Shared/" --output-folder=D:\a\_work\1\s\azure-sdk\sdk\resourcehealth\Azure.ResourceManager.ResourceHealth\src/Generated --namespace=Azure.ResourceManager.ResourceHealth" exited with code 1. [D:\a\_work\1\s\azure-sdk\sdk\resourcehealth\Azure.ResourceManager.ResourceHealth\src\Azure.ResourceManager.ResourceHealth.csproj]

After analysis, we thought it's due to a security enhancement introduced in node v18.20.2: https://github.com/nodejs/node/issues/52554 The fix is to pass { shell: true } when invoking spawn(). I searched the codes of autorest, and I found there are several invocation of spawn(). I guess they are for invoking generators. Can we have an alpha build so that we can try on our pipeline to verify the fix?

Expected behavior autorest should run without error on Windows server 2022 + node v18.20.2

Additional context

hallipr commented 4 months ago

A minimal readme.md to repro the EINVAL is:

use-extension:
  "@microsoft.azure/classic-openapi-validator": "~1.1.5"
input-file: sample.yaml

ResourceHealth's config is getting this through:

azure-validator: true

This imports classic-openapi-validator if we don't also set v3: true

A workaround is to add v3: true to the affected autorest config.

ryanrivest commented 4 months ago

We are running into this error as well. We are using the legacy C# generator, so the v3: true flag does not work in our case. Any suggestions for a different workaround?

Here is another repro:

input-file: https://github.com/Azure/azure-rest-api-specs/blob/d374d03801e97737ddb32e01f20513e7b2bbd9c3/arm-storage/2015-06-15/swagger/storage.json
csharp: true
legacy: true
keremaytac commented 3 months ago

Well, if legacy one is still needed, and if your problem persists in your build pipelines, the only workaround could be changing your build agent to a linux one (i.e. ubuntu-latest) from windows (windows-latest).

That worked for my case.