From c95ddcce2f81b4894a65764671cc2617146da49f Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 1 Dec 2023 16:01:22 +0100 Subject: [PATCH 1/4] fix: when fetching env from envelope, pass context --- packages/config/src/api/site_info.ts | 4 ++- .../src/env/{envelope.js => envelope.ts} | 16 +++++++++-- packages/config/src/env/{main.js => main.ts} | 28 +++++++++++++++---- packages/config/src/main.ts | 1 + 4 files changed, 41 insertions(+), 8 deletions(-) rename packages/config/src/env/{envelope.js => envelope.ts} (63%) rename packages/config/src/env/{main.js => main.ts} (93%) diff --git a/packages/config/src/api/site_info.ts b/packages/config/src/api/site_info.ts index c9ca4d76b8..93d08df1ee 100644 --- a/packages/config/src/api/site_info.ts +++ b/packages/config/src/api/site_info.ts @@ -13,6 +13,7 @@ type GetSiteInfoOpts = { siteFeatureFlagPrefix: string offline?: boolean api?: NetlifyAPI + context?: string featureFlags?: Record testOpts?: TestOptions } @@ -30,6 +31,7 @@ export const getSiteInfo = async function ({ siteId, mode, siteFeatureFlagPrefix, + context, offline = false, testOpts = {}, }: GetSiteInfoOpts) { @@ -53,7 +55,7 @@ export const getSiteInfo = async function ({ const [siteInfo, accounts, addons, integrations] = await Promise.all(promises) if (siteInfo.use_envelope) { - const envelope = await getEnvelope({ api, accountId: siteInfo.account_slug, siteId }) + const envelope = await getEnvelope({ api, accountId: siteInfo.account_slug, siteId, context }) siteInfo.build_settings.env = envelope } diff --git a/packages/config/src/env/envelope.js b/packages/config/src/env/envelope.ts similarity index 63% rename from packages/config/src/env/envelope.js rename to packages/config/src/env/envelope.ts index a55968597a..d75e0786ee 100644 --- a/packages/config/src/env/envelope.js +++ b/packages/config/src/env/envelope.ts @@ -1,9 +1,21 @@ -export const getEnvelope = async function ({ api, accountId, siteId }) { +import type { NetlifyAPI } from 'netlify' + +export const getEnvelope = async function ({ + api, + accountId, + siteId, + context, +}: { + api: NetlifyAPI + accountId: string + siteId?: string + context?: string +}) { if (accountId === undefined) { return {} } try { - const environmentVariables = await api.getEnvVars({ accountId, siteId }) + const environmentVariables = await (api as any).getEnvVars({ accountId, siteId, context_name: context }) const sortedEnvVarsFromDevContext = environmentVariables .sort((left, right) => (left.key.toLowerCase() < right.key.toLowerCase() ? -1 : 1)) diff --git a/packages/config/src/env/main.js b/packages/config/src/env/main.ts similarity index 93% rename from packages/config/src/env/main.js rename to packages/config/src/env/main.ts index 70858098b8..f08557f8dd 100644 --- a/packages/config/src/env/main.js +++ b/packages/config/src/env/main.ts @@ -1,3 +1,4 @@ +import type { NetlifyAPI } from 'netlify' import omit from 'omit.js' import { removeFalsy } from '../utils/remove_falsy.js' @@ -29,7 +30,14 @@ export const getEnv = async function ({ } const generalEnv = await getGeneralEnv({ siteInfo, buildDir, branch, deployId, buildId, context }) - const [accountEnv, addonsEnv, uiEnv, configFileEnv] = await getUserEnv({ api, config, siteInfo, accounts, addons }) + const [accountEnv, addonsEnv, uiEnv, configFileEnv] = await getUserEnv({ + api, + config, + siteInfo, + accounts, + addons, + context, + }) // Sources of environment variables, in descending order of precedence. const sources = [ @@ -129,8 +137,8 @@ const NETLIFY_DEFAULT_DOMAIN = '.netlify.app' const DEFAULT_SITE_NAME = 'site-name' // Environment variables specified by the user -const getUserEnv = async function ({ api, config, siteInfo, accounts, addons }) { - const accountEnv = await getAccountEnv({ api, siteInfo, accounts }) +const getUserEnv = async function ({ api, config, siteInfo, accounts, addons, context }) { + const accountEnv = await getAccountEnv({ api, siteInfo, accounts, context }) const addonsEnv = getAddonsEnv(addons) const uiEnv = getUiEnv({ siteInfo }) const configFileEnv = getConfigFileEnv({ config }) @@ -138,9 +146,19 @@ const getUserEnv = async function ({ api, config, siteInfo, accounts, addons }) } // Account-wide environment variables -const getAccountEnv = async function ({ api, siteInfo, accounts }) { +const getAccountEnv = async function ({ + api, + siteInfo, + accounts, + context, +}: { + api: NetlifyAPI + siteInfo: any + accounts: any + context?: string +}) { if (siteInfo.use_envelope) { - const envelope = await getEnvelope({ api, accountId: siteInfo.account_slug }) + const envelope = await getEnvelope({ api, accountId: siteInfo.account_slug, context }) return envelope } const { site_env: siteEnv = {} } = accounts.find(({ slug }) => slug === siteInfo.account_slug) || {} diff --git a/packages/config/src/main.ts b/packages/config/src/main.ts index acab7d7450..1971acb574 100644 --- a/packages/config/src/main.ts +++ b/packages/config/src/main.ts @@ -68,6 +68,7 @@ export const resolveConfig = async function (opts) { const { siteInfo, accounts, addons, integrations } = await getSiteInfo({ api, + context, siteId, mode, offline, From 0724fdf4b37144a5fb75797181f5128712918c20 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Wed, 6 Dec 2023 11:37:13 +0100 Subject: [PATCH 2/4] fix: build --- packages/config/src/env/main.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/config/src/env/main.ts b/packages/config/src/env/main.ts index f08557f8dd..e7d5ba885d 100644 --- a/packages/config/src/env/main.ts +++ b/packages/config/src/env/main.ts @@ -99,7 +99,7 @@ const getGeneralEnv = async function ({ context, }) { const gitEnv = await getGitEnv(buildDir, branch) - const deployUrls = getDeployUrls({ siteInfo, branch, deployId }) + const deployUrls = getDeployUrls({ siteInfo: siteInfo as any, branch, deployId }) return removeFalsy({ SITE_ID: id, SITE_NAME: name, @@ -120,7 +120,11 @@ const getGeneralEnv = async function ({ } const getDeployUrls = function ({ - siteInfo: { name = DEFAULT_SITE_NAME, ssl_url: sslUrl, build_settings: { repo_url: REPOSITORY_URL } = {} }, + siteInfo: { + name = DEFAULT_SITE_NAME, + ssl_url: sslUrl, + build_settings: { repo_url: REPOSITORY_URL = undefined } = {}, + }, branch, deployId, }) { From 2180f2064c956248e1ca6b1c8d41696b192c5018 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Wed, 6 Dec 2023 11:43:45 +0100 Subject: [PATCH 3/4] chore: update tests to show its working --- packages/config/tests/env/tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/config/tests/env/tests.js b/packages/config/tests/env/tests.js index 3427d602e7..0d82d7f9d9 100644 --- a/packages/config/tests/env/tests.js +++ b/packages/config/tests/env/tests.js @@ -5,8 +5,8 @@ import test from 'ava' const SITE_INFO_PATH = '/api/v1/sites/test' const LIST_ACCOUNTS_PATH = '/api/v1/accounts' const LIST_ADDONS_PATH = '/api/v1/sites/test/service-instances' -const TEAM_ENVELOPE_PATH = '/api/v1/accounts/team/env' -const SITE_ENVELOPE_PATH = '/api/v1/accounts/team/env?site_id=test' +const TEAM_ENVELOPE_PATH = '/api/v1/accounts/team/env?context_name=production' +const SITE_ENVELOPE_PATH = '/api/v1/accounts/team/env?context_name=production&site_id=test' // List of API mock URLs, responses and status codes const SITE_INFO_RESPONSE_URL = { From 972ca05f7401ec32bbe5eb56c9b68a1930c1a535 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Wed, 6 Dec 2023 17:39:37 +0100 Subject: [PATCH 4/4] chore: use TSFixme --- packages/config/src/env/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/config/src/env/main.ts b/packages/config/src/env/main.ts index e7d5ba885d..548f7b8970 100644 --- a/packages/config/src/env/main.ts +++ b/packages/config/src/env/main.ts @@ -99,7 +99,7 @@ const getGeneralEnv = async function ({ context, }) { const gitEnv = await getGitEnv(buildDir, branch) - const deployUrls = getDeployUrls({ siteInfo: siteInfo as any, branch, deployId }) + const deployUrls = getDeployUrls({ siteInfo: siteInfo as $TSFixMe, branch, deployId }) return removeFalsy({ SITE_ID: id, SITE_NAME: name,