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 90% rename from packages/config/src/env/main.js rename to packages/config/src/env/main.ts index 70858098b8..548f7b8970 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 = [ @@ -91,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 $TSFixMe, branch, deployId }) return removeFalsy({ SITE_ID: id, SITE_NAME: name, @@ -112,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, }) { @@ -129,8 +141,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 +150,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, 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 = {