-
Notifications
You must be signed in to change notification settings - Fork 68
feat: allow to scan secrets without buffering whole lines #6318
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
This pull request adds or modifies JavaScript ( |
9b3e60a
to
fc32c24
Compare
This pull request adds or modifies JavaScript ( |
This pull request adds or modifies JavaScript ( |
This pull request adds or modifies JavaScript ( |
This pull request adds or modifies JavaScript ( |
@@ -37,8 +38,9 @@ const coreStep: CoreStepFunction = async function ({ | |||
|
|||
const passedSecretKeys = (explicitSecretKeys || '').split(',') | |||
const envVars = netlifyConfig.build.environment as Record<string, unknown> | |||
const useReadLine = !featureFlags?.secret_scanning_no_readline |
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.
nit - could we potentially rename this variable/flag so that we don't have a double negative on this line?
/** | ||
* Search stream implementation using just read stream that allows to buffer less content | ||
*/ | ||
const searchStreamNoReadline = ( |
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.
It would be very lovely to have searchStreamNoReadline
marked up with guiding comments similar to what we had in the original implementation
🎉 Thanks for submitting a pull request! 🎉
Summary
Possible fix for https://linear.app/netlify/issue/FRB-1778/oom-during-ef-bundling (it's not really confirmed, other than logs pointing to secret scanning being a problem and buffering whole very large lines seems like only thing that I managed to reproduce OOM problems with)
For review, I suggest checking commits 1 by 1 as well as toggling "Ignore whitespace changes" in diff viewer.
Description
This adds a new scanning method that is not relying on buffering whole lines in scanned files (through
node:readline
) and instead allow to operate on smaller chunks of stream ( max length of secrets to scan +whatever size stream.on('data')
would result in)Because this is new method I want to be careful and introduce feature flag that opt into new search algorithm (feature flag not yet created in devcycle, because I don't really like
secret_scanning_no_readline
name (inverted boolean making it confusing) but didn't come up with better name yet. Assuming no problems are discovered as feature flag is rolled out, this should be cleaned up from the code.I did run some benchmarks against
netlify-react-ui
build dir (48459
files to scan there) using https://gist.github.com/pieh/a3eccd67cd0c27017acbbf18a87a1c55 and the results are comparable so it should not result in performance regression:Goal of the change was not to improve performance, but rather allow secret scanning to work with less available memory and allow Node's garbage collection to function without causing perf regression.
Tests
For us to review and ship your PR efficiently, please perform the following steps:
we can discuss the changes and get feedback from everyone that should be involved. If you`re fixing a typo or
something that`s on fire 🔥 (e.g. incident related), you can skip this step.
your code follows our style guide and passes our tests.
A picture of a cute animal (not mandatory, but encouraged)