fix: environment variable build context filtering fix #5887
+5
−5
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🎉 Thanks for submitting a pull request! 🎉
Summary
The pull request addresses the issue below.
The
getEnv
function within the filepackages/config/src/env/envelope.ts
was filtering out env variables that did not belong to theall
ordev
contexts.More information on how to replicate and how we isolated the issue is below.
Understanding and Isolating the Problem
In order to replicate the issue, we did the following steps.
npm install
to install everything needednetlify sites:create
to create a new site and link the repo to itVITE_All_Context
This env variable has the same value in all contexts.VITE_Hello
thisenv
variable has different values depending on the contextenv
variables within the main react component and ran the following commandsenv
variables have to start withVITE
in order for vite to recognize themNext, we ran a series of
deploy
commands to see the resultNext we created second environment variable declared for
all
contexts to understand how varaibles declared withinall
contexts were being handled across different values passed to the--context
flag.command
netlify deploy --build --prod --context
Next we examined the handling of environment variables in
netlify dev
netlity dev
We dug further to isolate the problem by running
netlify build
netlify build context --dev
As we can see below the value of the
env
variable when using thedev
context is the correct value.The
VITE_All_Context
variable is the correct valuenetlify build context --production
As we can see below, the value of the
VITE_Hello
when using the production context isvoid
, howeverAll_Context
env
variable is showing the correct valuethe context of
--branch-deploy
anddeploy-preview
are the same as above. This led us to believe the issue is in thenetlify build
commandNote this is only an issue when deploying from the terminal with the above commands. When deploying from the website, the environment variables were injected correctly.
Solution
The
netlify build
command gathers environment variables by runninggetEnv()
.When running this function, if
siteInfo.use_envelope
is a truthy value, it will invokegetEnvelope
. We isolated this function as the source of env variable loss. Environment variables not belonging to thedev
orall
contexts were filtered out.We updated the
getEnvelope
to filter byall
andcontext
(the argument passed by user associated with the —context flag) and reran our isolated tests with the vite project above.Results:
netlify deploy --build --prod
Also
---siteId
was not passed in the functiongetEnvelope()
, so we adjusted the function to make sure it was passed in.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)