autorest icon indicating copy to clipboard operation
autorest copied to clipboard

EXEC : error | error : spawn EINVAL

Open archerzz opened this issue 1 year ago • 10 comments

Before filling a bug

  • [x] have you checked the faq for known issues.
  • [x] have you checked existing issues

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

archerzz avatar May 21 '24 01:05 archerzz

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.

hallipr avatar May 21 '24 20:05 hallipr

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

ryanrivest avatar May 22 '24 01:05 ryanrivest

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.

keremaytac avatar Jun 05 '24 08:06 keremaytac

I think it should be easy to review our usage of spawn(), and add { shell: true } where needed.

mikeharder avatar Dec 05 '24 19:12 mikeharder

This might be a minimal repro? Linux also fails, but with a different error.

Windows

> npx autorest --input-file="foo.json" --azure-validator

AutoRest code generation utility [cli version: 3.7.1; node: v20.18.0]
(C) 2018 Microsoft Corporation.
https://aka.ms/autorest
info    | AutoRest core version selected from configuration: ~2.0.4413.
   Loading AutoRest core      'C:\Users\mharder\.autorest\@[email protected]\nodemodules\@microsoft.azure\autorest-core\dist' (2.0.4429)
   Loading AutoRest extension '@microsoft.azure/classic-openapi-validator' (~1.0.9->1.0.14)
   Loading AutoRest extension '@microsoft.azure/openapi-validator' (~1.0.2->1.0.4)
Process() cancelled due to exception : spawn EINVAL
  Error: spawn EINVAL

Linux

$ npx autorest --input-file="foo.json" --azure-validator
AutoRest code generation utility [cli version: 3.7.1; node: v22.13.1]
(C) 2018 Microsoft Corporation.
https://aka.ms/autorest
info    | AutoRest core version selected from configuration: ~2.0.4413.
(node:253096) [DEP0060] DeprecationWarning: The `util._extend` API is deprecated. Please use Object.assign() instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
installing core... [========================================] 100% | 2/2
   Loading AutoRest core      '/home/mharder/.autorest/@[email protected]/nodemodules/@microsoft.azure/autorest-core/dist' (2.0.4429)
(node:253127) [DEP0060] DeprecationWarning: The `util._extend` API is deprecated. Please use Object.assign() instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
   Installing AutoRest extension '@microsoft.azure/classic-openapi-validator' (~1.0.9)
   Installing AutoRest extension '@microsoft.azure/openapi-validator' (~1.0.2)
FailFast: Couldn't find a valid ICU package installed on the system. Set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support.

mikeharder avatar Feb 11 '25 19:02 mikeharder

Also facing the same error message with Ubuntu 24.04.02 LTS and Fedora Linux 41.

FailFast: Couldn't find a valid ICU package installed on the system. Set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support.

ChrisRichner avatar Feb 27 '25 15:02 ChrisRichner

Facing the same issue, any resolution mentioned it didn't work for me.

shivamverma-ms20 avatar Apr 07 '25 08:04 shivamverma-ms20