-
Notifications
You must be signed in to change notification settings - Fork 84
fix: Handle uncaught exception in create-amplify #2828
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
base: main
Are you sure you want to change the base?
Conversation
🦋 Changeset detectedLatest commit: b0f4a33 The changes in this PR will be included in the next version bump. This PR includes changesets to release 3 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
'create-amplify': patch | ||
'@aws-amplify/cli-core': patch | ||
'@aws-amplify/backend-cli': patch |
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.
some of these are incorrect if we're touching public API.
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.
Would this be more accurate?
'create-amplify': patch
'@aws-amplify/cli-core': minor
'@aws-amplify/backend-cli': minor
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.
'create-amplify': patch
'@aws-amplify/cli-core': minor
'@aws-amplify/backend-cli': patch
is the right mix.
if (err instanceof Error) { | ||
await errorHandler(format.error(err), err); | ||
} |
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.
With this implementation we'll be blind to non-Error
s.
We should handle them some way.
Can you please check how this is handled in other places?
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.
Forgive my ignorance as I'm new to the code base, but isn't that handled by the attachUnhandledExceptionListeners
?
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.
No. once err
is caught (by catch block) it's considered handled unless re-thrown.
You can assert this by adding throw 'foo'
somewhere in try
block and see what happens.
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.
Gotcha, I see that now thanks! I took a look around and it looks like largely, the downstream instances will wrap the non-Error
s into an AmplifyError
or some sort and then shoot it upstream. Meanwhile, in ampx
, it only catches instances of Error
s only.
So I could keep the original code that was here alongisde the handling of Error like so:
} catch (err) {
if (err instanceof Error) {
await errorHandler(format.error(err), err);
} else {
printer.log(format.error(err), LogLevel.ERROR);
process.exitCode = 1;
}
}
which shows up like so:
❯ npx create-amplify
2:51:22 PM [ERROR] foo
Thoughts?
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.
I do wonder if we can just remove the try-catch from here and just let it bubble up to "UnhandledExceptionListener" that we also introduce in this PR. It's implementation seems to be dealing with non-Errors.
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.
@Amplifiyer might have some ideas here as well.
Problem
Issue number, if available: #825
Changes
This change is similar to #2364 but the original change didn't fully fix the issue. Whilt it adds the error handler, it didn't change the try/catch loop and the error was being thrown by the
getProjectRoot()
. So modify the try block to surround all of the code that needs to close gracefully.Corresponding docs PR, if applicable: N/A
Validation
CLI output:
I triggered a SIGINT and the command stopped gracefully.
Checklist
run-e2e
label set.By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.