-
Notifications
You must be signed in to change notification settings - Fork 230
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
report nice error message when dotnet is not installed #5477
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -7,6 +7,7 @@ import { | |||||
getDirectoryPath, | ||||||
joinPaths, | ||||||
logDiagnostics, | ||||||
NoTarget, | ||||||
Program, | ||||||
resolvePath, | ||||||
} from "@typespec/compiler"; | ||||||
|
@@ -18,6 +19,7 @@ import { dirname } from "path"; | |||||
import { fileURLToPath } from "url"; | ||||||
import { configurationFileName, tspOutputFileName } from "./constants.js"; | ||||||
import { createModel } from "./lib/client-model-builder.js"; | ||||||
import { reportDiagnostic } from "./lib/lib.js"; | ||||||
import { LoggerLevel } from "./lib/log-level.js"; | ||||||
import { Logger } from "./lib/logger.js"; | ||||||
import { NetEmitterOptions, resolveOptions, resolveOutputFolder } from "./options.js"; | ||||||
|
@@ -150,25 +152,40 @@ export async function $onEmit(context: EmitContext<NetEmitterOptions>) { | |||||
const command = `dotnet --roll-forward Major ${generatorPath} ${outputFolder} -p ${options["plugin-name"]}${constructCommandArg(newProjectOption)}${constructCommandArg(existingProjectOption)}${constructCommandArg(debugFlag)}`; | ||||||
Logger.getInstance().info(command); | ||||||
|
||||||
const result = await execAsync( | ||||||
"dotnet", | ||||||
[ | ||||||
"--roll-forward", | ||||||
"Major", | ||||||
generatorPath, | ||||||
outputFolder, | ||||||
"-p", | ||||||
options["plugin-name"], | ||||||
newProjectOption, | ||||||
existingProjectOption, | ||||||
debugFlag, | ||||||
], | ||||||
{ stdio: "inherit" }, | ||||||
); | ||||||
if (result.exitCode !== 0) { | ||||||
if (result.stderr) Logger.getInstance().error(result.stderr); | ||||||
if (result.stdout) Logger.getInstance().verbose(result.stdout); | ||||||
throw new Error(`Failed to generate SDK. Exit code: ${result.exitCode}`); | ||||||
try { | ||||||
const result = await execAsync( | ||||||
"dotnet", | ||||||
[ | ||||||
"--roll-forward", | ||||||
"Major", | ||||||
generatorPath, | ||||||
outputFolder, | ||||||
"-p", | ||||||
options["plugin-name"], | ||||||
newProjectOption, | ||||||
existingProjectOption, | ||||||
debugFlag, | ||||||
], | ||||||
{ stdio: "inherit" }, | ||||||
); | ||||||
if (result.exitCode !== 0) { | ||||||
if (result.stderr) Logger.getInstance().error(result.stderr); | ||||||
if (result.stdout) Logger.getInstance().verbose(result.stdout); | ||||||
throw new Error(`Failed to generate SDK. Exit code: ${result.exitCode}`); | ||||||
} | ||||||
} catch (error: any) { | ||||||
if (error && "code" in (error as {}) && error["code"] === "ENOENT") { | ||||||
reportDiagnostic(sdkContext.program, { | ||||||
code: "runtime-dependency-missing", | ||||||
format: { | ||||||
dotnetMajorVersion: "8", | ||||||
downloadUrl: "https://dotnet.microsoft.com/en-us/download", | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Need to confirm with .NET folks that latest patch from major version is fine (as opposed to matching the version we use in global.json exactly). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hello @JoshLove-msft We just need user to install .NET 8 or above, (consistent with the requirement written in readme.md), so we provide a url to download .NET , not a dotnet 8 specific. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. After discussion, we decide to suggest user to use the exact version in global.json, and provide the dotnet 8 download uri. Thanks. |
||||||
}, | ||||||
target: NoTarget, | ||||||
}); | ||||||
} else { | ||||||
throw new Error(error); | ||||||
} | ||||||
} | ||||||
if (!options["save-inputs"]) { | ||||||
// delete | ||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this too general of a condition? Is there a way to make it specific to dotnet being missing?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, don't we need to ensure that .NET 8 is installed? What would happen with the current approach if .NET 6 is installed.
dotnet --list-sdks
will output the list of installed SDKs. We should check that they have greater than or equal to the version we use in the global.json.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hello @JoshLove-msft as discussed before, we will not do runtime time check every time when we generate sdk, we just check the error if it is failed because of missing .NET and give out a nice error message.
And we ask .NET 8 in the message to consistent with the requirement we write in the Readme.md of the library.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Discussed in the meeting, we will do runtime check when generation fail, and identify if is because of dotnet missing. I will update it. Thanks