From e021f93503894b5223c7ff77f31bbe6bf279fee7 Mon Sep 17 00:00:00 2001 From: Piotr Szeremeta Date: Wed, 21 Aug 2024 16:59:19 +0200 Subject: [PATCH] Evaluate dynamicProjectConfig with EnvVars --- packages/eas-cli/src/build/android/build.ts | 2 +- packages/eas-cli/src/build/build.ts | 2 +- packages/eas-cli/src/build/createContext.ts | 4 +- .../build/evaluateConfigWithEnvVarsAsync.ts | 80 ++++++++++++++ packages/eas-cli/src/build/ios/build.ts | 6 +- .../eas-cli/src/build/runBuildAndSubmit.ts | 100 ++++-------------- packages/eas-cli/src/build/validate.ts | 4 +- packages/eas-cli/src/commands/build/resign.ts | 22 +++- .../eas-cli/src/commands/build/version/get.ts | 16 ++- .../eas-cli/src/commands/build/version/set.ts | 12 ++- .../src/commands/build/version/sync.ts | 12 ++- packages/eas-cli/src/commands/config.ts | 19 +++- .../src/project/applicationIdentifier.ts | 7 +- 13 files changed, 180 insertions(+), 106 deletions(-) create mode 100644 packages/eas-cli/src/build/evaluateConfigWithEnvVarsAsync.ts diff --git a/packages/eas-cli/src/build/android/build.ts b/packages/eas-cli/src/build/android/build.ts index 805834ab6a..ee4fec6070 100644 --- a/packages/eas-cli/src/build/android/build.ts +++ b/packages/eas-cli/src/build/android/build.ts @@ -107,7 +107,7 @@ export async function prepareAndroidBuildAsync( ? false : ctx.buildProfile.autoIncrement, vcsClient: ctx.vcsClient, - env: ctx.buildProfile.env, + env: ctx.env, }); }, prepareJobAsync: async ( diff --git a/packages/eas-cli/src/build/build.ts b/packages/eas-cli/src/build/build.ts index 44faf86ded..a6960d7904 100644 --- a/packages/eas-cli/src/build/build.ts +++ b/packages/eas-cli/src/build/build.ts @@ -676,7 +676,7 @@ async function createAndMaybeUploadFingerprintAsync( platform: ctx.platform, workflow: ctx.workflow, projectDir: ctx.projectDir, - env: ctx.buildProfile.env, + env: ctx.env, cwd: ctx.projectDir, }); diff --git a/packages/eas-cli/src/build/createContext.ts b/packages/eas-cli/src/build/createContext.ts index e83a7a5591..43c15b4208 100644 --- a/packages/eas-cli/src/build/createContext.ts +++ b/packages/eas-cli/src/build/createContext.ts @@ -68,7 +68,7 @@ export async function createBuildContextAsync({ env: Record; }): Promise> { const { exp, projectId } = await getDynamicPrivateProjectConfigAsync({ - env: { ...env, ...buildProfile.env }, + env, }); const projectName = exp.slug; const account = await getOwnerAccountForProjectIdAsync(graphqlClient, projectId); @@ -91,7 +91,7 @@ export async function createBuildContextAsync({ user: actor, graphqlClient, analytics, - env: buildProfile.env, + env, easJsonCliConfig, vcsClient, freezeCredentials, diff --git a/packages/eas-cli/src/build/evaluateConfigWithEnvVarsAsync.ts b/packages/eas-cli/src/build/evaluateConfigWithEnvVarsAsync.ts new file mode 100644 index 0000000000..90844883b1 --- /dev/null +++ b/packages/eas-cli/src/build/evaluateConfigWithEnvVarsAsync.ts @@ -0,0 +1,80 @@ +import { Env } from '@expo/eas-build-job'; +import { BuildProfile } from '@expo/eas-json'; + +import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGraphqlClient'; +import { EnvironmentVariableEnvironment } from '../graphql/generated'; +import { EnvironmentVariablesQuery } from '../graphql/queries/EnvironmentVariablesQuery'; +import Log from '../log'; + +function isEnvironment(env: string): env is EnvironmentVariableEnvironment { + if ( + Object.values(EnvironmentVariableEnvironment).includes(env as EnvironmentVariableEnvironment) + ) { + return true; + } + return false; +} + +export async function evaluateConfigWithEnvVarsAsync({ + flags, + buildProfile, + graphqlClient, + getProjectConfig, + opts, +}: { + flags: { environment?: string }; + buildProfile: BuildProfile; + graphqlClient: ExpoGraphqlClient; + opts: Opts; + getProjectConfig(opts: Opts): Promise; +}): Promise { + const { projectId } = await getProjectConfig(opts); + const env = await resolveEnvVarsAsync({ flags, buildProfile, graphqlClient, projectId }); + const config = await getProjectConfig({ ...opts, env }); + + return { env, ...config }; +} + +async function resolveEnvVarsAsync({ + flags, + buildProfile, + graphqlClient, + projectId, +}: { + flags: { environment?: string }; + buildProfile: BuildProfile; + graphqlClient: ExpoGraphqlClient; + projectId: string; +}): Promise { + const environment = + flags.environment ?? buildProfile.environment ?? process.env.EAS_CURRENT_ENVIRONMENT; + + if (!environment || !isEnvironment(environment)) { + return { ...buildProfile.env }; + } + + try { + const environmentVariables = await EnvironmentVariablesQuery.byAppIdWithSensitiveAsync( + graphqlClient, + { + appId: projectId, + environment, + } + ); + const envVars = Object.fromEntries( + environmentVariables + .filter(({ name, value }) => name && value) + .map(({ name, value }) => [name, value]) + ) as Record; + + return { ...envVars, ...buildProfile.env }; + } catch (e) { + Log.error('Failed to pull env variables for environment ${environment} from EAS servers'); + Log.error(e); + Log.error( + 'This can possibly be a bug in EAS/EAS CLI. Report it here: https://github.com/expo/eas-cli/issues' + ); + } + + return { ...buildProfile.env }; +} diff --git a/packages/eas-cli/src/build/ios/build.ts b/packages/eas-cli/src/build/ios/build.ts index cb101e381c..5b4db9e64b 100644 --- a/packages/eas-cli/src/build/ios/build.ts +++ b/packages/eas-cli/src/build/ios/build.ts @@ -24,7 +24,7 @@ import { export async function createIosContextAsync( ctx: CommonContext ): Promise { - const { buildProfile } = ctx; + const { buildProfile, env } = ctx; if (ctx.workflow === Workflow.MANAGED) { await ensureBundleIdentifierIsDefinedForManagedProjectAsync(ctx); @@ -47,7 +47,7 @@ export async function createIosContextAsync( projectDir: ctx.projectDir, exp: ctx.exp, xcodeBuildContext, - env: buildProfile.env, + env, vcsClient: ctx.vcsClient, }); const applicationTarget = findApplicationTarget(targets); @@ -89,7 +89,7 @@ export async function prepareIosBuildAsync( ? false : ctx.buildProfile.autoIncrement, vcsClient: ctx.vcsClient, - env: ctx.buildProfile.env, + env: ctx.env, }); }, prepareJobAsync: async ( diff --git a/packages/eas-cli/src/build/runBuildAndSubmit.ts b/packages/eas-cli/src/build/runBuildAndSubmit.ts index 93c0246f6d..55e5e4ac42 100644 --- a/packages/eas-cli/src/build/runBuildAndSubmit.ts +++ b/packages/eas-cli/src/build/runBuildAndSubmit.ts @@ -2,7 +2,6 @@ import { ExpoConfig } from '@expo/config-types'; import { Env, Platform, Workflow } from '@expo/eas-build-job'; import { AppVersionSource, - BuildProfile, EasJson, EasJsonAccessor, EasJsonUtils, @@ -14,16 +13,6 @@ import assert from 'assert'; import chalk from 'chalk'; import nullthrows from 'nullthrows'; -import { prepareAndroidBuildAsync } from './android/build'; -import { BuildRequestSender, MaybeBuildFragment, waitForBuildEndAsync } from './build'; -import { ensureProjectConfiguredAsync } from './configure'; -import { BuildContext } from './context'; -import { createBuildContextAsync } from './createContext'; -import { prepareIosBuildAsync } from './ios/build'; -import { LocalBuildMode, LocalBuildOptions } from './local'; -import { ensureExpoDevClientInstalledForDevClientBuildsAsync } from './utils/devClient'; -import { printBuildResults, printLogsUrls } from './utils/printBuildInfo'; -import { ensureRepoIsCleanAsync } from './utils/repository'; import { Analytics } from '../analytics/AnalyticsManager'; import { createAndLinkChannelAsync, doesChannelExistAsync } from '../channel/queries'; import { DynamicConfigContextFn } from '../commandUtils/context/DynamicProjectConfigContextField'; @@ -37,7 +26,6 @@ import { SubmissionFragment, } from '../graphql/generated'; import { BuildQuery } from '../graphql/queries/BuildQuery'; -import { EnvironmentVariablesQuery } from '../graphql/queries/EnvironmentVariablesQuery'; import { toAppPlatform, toPlatform } from '../graphql/types/AppPlatform'; import Log, { learnMore } from '../log'; import { @@ -79,6 +67,17 @@ import { truthy } from '../utils/expodash/filter'; import { printJsonOnlyOutput } from '../utils/json'; import { ProfileData, getProfilesAsync } from '../utils/profiles'; import { Client } from '../vcs/vcs'; +import { prepareAndroidBuildAsync } from './android/build'; +import { BuildRequestSender, MaybeBuildFragment, waitForBuildEndAsync } from './build'; +import { ensureProjectConfiguredAsync } from './configure'; +import { BuildContext } from './context'; +import { createBuildContextAsync } from './createContext'; +import { prepareIosBuildAsync } from './ios/build'; +import { LocalBuildMode, LocalBuildOptions } from './local'; +import { evaluateConfigWithEnvVarsAsync } from './evaluateConfigWithEnvVarsAsync'; +import { ensureExpoDevClientInstalledForDevClientBuildsAsync } from './utils/devClient'; +import { printBuildResults, printLogsUrls } from './utils/printBuildInfo'; +import { ensureRepoIsCleanAsync } from './utils/repository'; let metroConfigValidated = false; let sdkVersionChecked = false; @@ -188,23 +187,18 @@ export async function runBuildAndSubmitAsync( for (const buildProfile of buildProfiles) { const platform = toAppPlatform(buildProfile.platform); - const { projectId } = await getDynamicPrivateProjectConfigAsync({ - env: buildProfile.profile.env, - }); - const env = await resolveEnvVarsAsync({ + + const { env } = await evaluateConfigWithEnvVarsAsync({ flags, - buildProfile, + buildProfile: buildProfile.profile, graphqlClient, - projectId, + getProjectConfig: getDynamicPrivateProjectConfigAsync, + opts: { env: buildProfile.profile.env }, }); - const buildVariables = { ...env, ...buildProfile.profile.env }; - Log.log( `Loaded "env" configuration for the "${buildProfile.profileName}" profile: ${ - buildVariables - ? Object.keys(buildVariables).join(', ') - : 'no environment variables specified' + env ? Object.keys(env).join(', ') : 'no environment variables specified' }. ${learnMore('https://docs.expo.dev/build-reference/variables/')}` ); @@ -268,7 +262,6 @@ export async function runBuildAndSubmitAsync( buildCtx: nullthrows(buildCtxByPlatform[startedBuild.build.platform]), moreBuilds: startedBuilds.length > 1, projectDir, - buildProfile: startedBuild.buildProfile.profile, submitProfile, nonInteractive: flags.nonInteractive, selectedSubmitProfileName: flags.submitProfile, @@ -370,7 +363,7 @@ async function prepareAndStartBuildAsync({ vcsClient: Client; getDynamicPrivateProjectConfigAsync: DynamicConfigContextFn; customBuildConfigMetadata?: CustomBuildConfigMetadata; - env: Record; + env: Env; }): Promise<{ build: BuildFragment | undefined; buildCtx: BuildContext }> { const buildCtx = await createBuildContextAsync({ buildProfileName: buildProfile.profileName, @@ -468,7 +461,6 @@ async function prepareAndStartSubmissionAsync({ buildCtx, moreBuilds, projectDir, - buildProfile, submitProfile, selectedSubmitProfileName, nonInteractive, @@ -477,7 +469,6 @@ async function prepareAndStartSubmissionAsync({ buildCtx: BuildContext; moreBuilds: boolean; projectDir: string; - buildProfile: BuildProfile; submitProfile: SubmitProfile; selectedSubmitProfileName?: string; nonInteractive: boolean; @@ -489,7 +480,7 @@ async function prepareAndStartSubmissionAsync({ profile: submitProfile, archiveFlags: { id: build.id }, nonInteractive, - env: buildProfile.env, + env: buildCtx.env, credentialsCtx: buildCtx.credentialsCtx, applicationIdentifier: buildCtx.android?.applicationId ?? buildCtx.ios?.bundleIdentifier, actor: buildCtx.user, @@ -607,56 +598,3 @@ async function validateExpoUpdatesInstalledAsProjectDependencyAsync({ } } } - -function isEnvironment(env: string): env is EnvironmentVariableEnvironment { - if ( - Object.values(EnvironmentVariableEnvironment).includes(env as EnvironmentVariableEnvironment) - ) { - return true; - } - return false; -} - -async function resolveEnvVarsAsync({ - flags, - buildProfile, - graphqlClient, - projectId, -}: { - flags: BuildFlags; - buildProfile: ProfileData<'build'>; - graphqlClient: ExpoGraphqlClient; - projectId: string; -}): Promise> { - const environment = - flags.environment ?? buildProfile.profile.environment ?? process.env.EAS_CURRENT_ENVIRONMENT; - - if (!environment || !isEnvironment(environment)) { - return {}; - } - - try { - const environmentVariables = await EnvironmentVariablesQuery.byAppIdWithSensitiveAsync( - graphqlClient, - { - appId: projectId, - environment, - } - ); - const envVars = Object.fromEntries( - environmentVariables - .filter(({ name, value }) => name && value) - .map(({ name, value }) => [name, value]) - ) as Record; - - return envVars; - } catch (e) { - Log.error('Failed to pull env variables for environment ${environment} from EAS servers'); - Log.error(e); - Log.error( - 'This can possibly be a bug in EAS/EAS CLI. Report it here: https://github.com/expo/eas-cli/issues' - ); - } - - return {}; -} diff --git a/packages/eas-cli/src/build/validate.ts b/packages/eas-cli/src/build/validate.ts index b76c7cb2c0..88078fe75e 100644 --- a/packages/eas-cli/src/build/validate.ts +++ b/packages/eas-cli/src/build/validate.ts @@ -9,9 +9,9 @@ import Log, { learnMore } from '../log'; import { isPNGAsync } from '../utils/image'; export function checkNodeEnvVariable(ctx: CommonContext): void { - if (ctx.buildProfile.env?.NODE_ENV === 'production') { + if (ctx.env?.NODE_ENV === 'production') { Log.warn( - 'You set NODE_ENV=production in the build profile. Remember that it will be available during the entire build process. In particular, it will make yarn/npm install only production packages.' + 'You set NODE_ENV=production in the build profile or environment variables. Remember that it will be available during the entire build process. In particular, it will make yarn/npm install only production packages.' ); Log.newLine(); } diff --git a/packages/eas-cli/src/commands/build/resign.ts b/packages/eas-cli/src/commands/build/resign.ts index bf403c4dbe..946cbf5a88 100644 --- a/packages/eas-cli/src/commands/build/resign.ts +++ b/packages/eas-cli/src/commands/build/resign.ts @@ -9,10 +9,11 @@ import { waitForBuildEndAsync } from '../../build/build'; import { ensureIosCredentialsForBuildResignAsync } from '../../build/ios/credentials'; import { prepareCredentialsToResign } from '../../build/ios/prepareJob'; import { listAndSelectBuildOnAppAsync } from '../../build/queries'; +import { evaluateConfigWithEnvVarsAsync } from '../../build/evaluateConfigWithEnvVarsAsync'; import { printBuildResults, printLogsUrls } from '../../build/utils/printBuildInfo'; import EasCommand from '../../commandUtils/EasCommand'; import { ExpoGraphqlClient } from '../../commandUtils/context/contextUtils/createGraphqlClient'; -import { EasNonInteractiveAndJsonFlags } from '../../commandUtils/flags'; +import { EASEnvironmentFlagHidden, EasNonInteractiveAndJsonFlags } from '../../commandUtils/flags'; import { EasPaginatedQueryFlags } from '../../commandUtils/pagination'; import { CredentialsContext } from '../../credentials/context'; import { @@ -21,6 +22,7 @@ import { BuildStatus, BuildWorkflow, DistributionType, + EnvironmentVariableEnvironment, IosJobOverridesInput, ProjectArchiveSourceType, StatuspageServiceName, @@ -46,6 +48,7 @@ interface BuildResignFlags { sourceProfile?: string; maybeBuildId?: string; wait: boolean; + environment?: EnvironmentVariableEnvironment; } interface RawBuildResignFlags { json: boolean; @@ -57,6 +60,7 @@ interface RawBuildResignFlags { 'source-profile': string | undefined; wait: boolean; id: string | undefined; + environment: EnvironmentVariableEnvironment | undefined; } export default class BuildResign extends EasCommand { @@ -89,6 +93,7 @@ export default class BuildResign extends EasCommand { }), ...EasPaginatedQueryFlags, ...EasNonInteractiveAndJsonFlags, + ...EASEnvironmentFlagHidden, }; static override contextDefinition = { @@ -140,7 +145,15 @@ export default class BuildResign extends EasCommand { platform, flags.targetProfile ?? 'production' ); - const { exp, projectId } = await getDynamicPrivateProjectConfigAsync({ env: buildProfile.env }); + + const { exp, projectId, env } = await evaluateConfigWithEnvVarsAsync({ + flags, + buildProfile, + graphqlClient, + getProjectConfig: getDynamicPrivateProjectConfigAsync, + opts: { env: buildProfile.env }, + }); + const account = await getOwnerAccountForProjectIdAsync(graphqlClient, projectId); const build = await this.ensureBuildSelectedAsync( { @@ -161,7 +174,7 @@ export default class BuildResign extends EasCommand { user: actor, graphqlClient, analytics, - env: buildProfile.env, + env, easJsonCliConfig, vcsClient, }); @@ -181,7 +194,7 @@ export default class BuildResign extends EasCommand { projectDir, exp, xcodeBuildContext, - env: buildProfile.env, + env, vcsClient, }); const credentialsResult = await ensureIosCredentialsForBuildResignAsync( @@ -248,6 +261,7 @@ export default class BuildResign extends EasCommand { targetProfile: flags['target-profile'], maybeBuildId: flags.id, wait: flags.wait, + environment: flags.environment, }; } diff --git a/packages/eas-cli/src/commands/build/version/get.ts b/packages/eas-cli/src/commands/build/version/get.ts index 28e29bb680..f6ac4091f4 100644 --- a/packages/eas-cli/src/commands/build/version/get.ts +++ b/packages/eas-cli/src/commands/build/version/get.ts @@ -3,8 +3,12 @@ import { EasJsonAccessor } from '@expo/eas-json'; import { Flags } from '@oclif/core'; import chalk from 'chalk'; +import { evaluateConfigWithEnvVarsAsync } from '../../../build/evaluateConfigWithEnvVarsAsync'; import EasCommand from '../../../commandUtils/EasCommand'; -import { EasNonInteractiveAndJsonFlags } from '../../../commandUtils/flags'; +import { + EASEnvironmentFlagHidden, + EasNonInteractiveAndJsonFlags, +} from '../../../commandUtils/flags'; import { AppVersionQuery } from '../../../graphql/queries/AppVersionQuery'; import { toAppPlatform } from '../../../graphql/types/AppPlatform'; import Log from '../../../log'; @@ -31,6 +35,7 @@ export default class BuildVersionGetView extends EasCommand { 'Name of the build profile from eas.json. Defaults to "production" if defined in eas.json.', helpValue: 'PROFILE_NAME', }), + ...EASEnvironmentFlagHidden, ...EasNonInteractiveAndJsonFlags, }; @@ -74,8 +79,12 @@ export default class BuildVersionGetView extends EasCommand { }); const results: { [key in Platform]?: string } = {}; for (const { profile, platform } of buildProfiles) { - const { exp, projectId } = await getDynamicPrivateProjectConfigAsync({ - env: profile.env, + const { exp, projectId, env } = await evaluateConfigWithEnvVarsAsync({ + flags, + buildProfile: profile, + graphqlClient, + getProjectConfig: getDynamicPrivateProjectConfigAsync, + opts: { env: profile.env }, }); validateAppConfigForRemoteVersionSource(exp, platform); @@ -89,6 +98,7 @@ export default class BuildVersionGetView extends EasCommand { platform, vcsClient, nonInteractive: flags['non-interactive'], + env, }); const remoteVersions = await AppVersionQuery.latestVersionAsync( graphqlClient, diff --git a/packages/eas-cli/src/commands/build/version/set.ts b/packages/eas-cli/src/commands/build/version/set.ts index ba2c02c102..2f0ec1ff3b 100644 --- a/packages/eas-cli/src/commands/build/version/set.ts +++ b/packages/eas-cli/src/commands/build/version/set.ts @@ -4,7 +4,9 @@ import { EasJsonAccessor, EasJsonUtils } from '@expo/eas-json'; import { Flags } from '@oclif/core'; import chalk from 'chalk'; +import { evaluateConfigWithEnvVarsAsync } from '../../../build/evaluateConfigWithEnvVarsAsync'; import EasCommand from '../../../commandUtils/EasCommand'; +import { EASEnvironmentFlagHidden } from '../../../commandUtils/flags'; import { AppVersionMutation } from '../../../graphql/mutations/AppVersionMutation'; import { AppVersionQuery } from '../../../graphql/queries/AppVersionQuery'; import { toAppPlatform } from '../../../graphql/types/AppPlatform'; @@ -35,6 +37,7 @@ export default class BuildVersionSetView extends EasCommand { 'Name of the build profile from eas.json. Defaults to "production" if defined in eas.json.', helpValue: 'PROFILE_NAME', }), + ...EASEnvironmentFlagHidden, }; static override contextDefinition = { @@ -64,7 +67,13 @@ export default class BuildVersionSetView extends EasCommand { flags.profile ?? undefined ); - const { exp, projectId } = await getDynamicPrivateProjectConfigAsync({ env: profile.env }); + const { exp, projectId, env } = await evaluateConfigWithEnvVarsAsync({ + flags, + buildProfile: profile, + graphqlClient, + getProjectConfig: getDynamicPrivateProjectConfigAsync, + opts: { env: profile.env }, + }); const displayName = await getDisplayNameForProjectIdAsync(graphqlClient, projectId); validateAppConfigForRemoteVersionSource(exp, platform); @@ -78,6 +87,7 @@ export default class BuildVersionSetView extends EasCommand { platform, vcsClient, nonInteractive: false, + env, }); const remoteVersions = await AppVersionQuery.latestVersionAsync( graphqlClient, diff --git a/packages/eas-cli/src/commands/build/version/sync.ts b/packages/eas-cli/src/commands/build/version/sync.ts index 4fb0404677..0a76187e24 100644 --- a/packages/eas-cli/src/commands/build/version/sync.ts +++ b/packages/eas-cli/src/commands/build/version/sync.ts @@ -6,7 +6,9 @@ import chalk from 'chalk'; import { updateNativeVersionsAsync as updateAndroidNativeVersionsAsync } from '../../../build/android/version'; import { updateNativeVersionsAsync as updateIosNativeVersionsAsync } from '../../../build/ios/version'; +import { evaluateConfigWithEnvVarsAsync } from '../../../build/evaluateConfigWithEnvVarsAsync'; import EasCommand from '../../../commandUtils/EasCommand'; +import { EASEnvironmentFlagHidden } from '../../../commandUtils/flags'; import { AppVersionQuery } from '../../../graphql/queries/AppVersionQuery'; import { toAppPlatform } from '../../../graphql/types/AppPlatform'; import Log from '../../../log'; @@ -54,6 +56,7 @@ export default class BuildVersionSyncView extends EasCommand { 'Name of the build profile from eas.json. Defaults to "production" if defined in eas.json.', helpValue: 'PROFILE_NAME', }), + ...EASEnvironmentFlagHidden, }; static override contextDefinition = { @@ -87,8 +90,12 @@ export default class BuildVersionSyncView extends EasCommand { projectDir, }); for (const profileInfo of buildProfiles) { - const { exp, projectId } = await getDynamicPrivateProjectConfigAsync({ - env: profileInfo.profile.env, + const { exp, projectId, env } = await evaluateConfigWithEnvVarsAsync({ + flags, + buildProfile: profileInfo.profile, + graphqlClient, + getProjectConfig: getDynamicPrivateProjectConfigAsync, + opts: { env: profileInfo.profile.env }, }); validateAppConfigForRemoteVersionSource(exp, profileInfo.platform); @@ -103,6 +110,7 @@ export default class BuildVersionSyncView extends EasCommand { platform: profileInfo.platform, vcsClient, nonInteractive: false, + env, }); const remoteVersions = await AppVersionQuery.latestVersionAsync( graphqlClient, diff --git a/packages/eas-cli/src/commands/config.ts b/packages/eas-cli/src/commands/config.ts index 7736e2c627..65e8689639 100644 --- a/packages/eas-cli/src/commands/config.ts +++ b/packages/eas-cli/src/commands/config.ts @@ -4,8 +4,9 @@ import { EasJsonAccessor, EasJsonUtils } from '@expo/eas-json'; import { Flags } from '@oclif/core'; import chalk from 'chalk'; +import { evaluateConfigWithEnvVarsAsync } from '../build/evaluateConfigWithEnvVarsAsync'; import EasCommand from '../commandUtils/EasCommand'; -import { EasNonInteractiveAndJsonFlags } from '../commandUtils/flags'; +import { EASEnvironmentFlagHidden, EasNonInteractiveAndJsonFlags } from '../commandUtils/flags'; import { toAppPlatform } from '../graphql/types/AppPlatform'; import Log from '../log'; import { appPlatformEmojis } from '../platform'; @@ -27,12 +28,14 @@ export default class Config extends EasCommand { 'eas-json-only': Flags.boolean({ hidden: true, }), + ...EASEnvironmentFlagHidden, ...EasNonInteractiveAndJsonFlags, }; static override contextDefinition = { ...this.ContextOptions.DynamicProjectConfig, ...this.ContextOptions.ProjectDir, + ...this.ContextOptions.LoggedIn, }; async runAsync(): Promise { @@ -41,7 +44,11 @@ export default class Config extends EasCommand { enableJsonOutput(); } const { platform: maybePlatform, profile: maybeProfile } = flags; - const { getDynamicPublicProjectConfigAsync, projectDir } = await this.getContextAsync(Config, { + const { + getDynamicPublicProjectConfigAsync, + projectDir, + loggedIn: { graphqlClient }, + } = await this.getContextAsync(Config, { nonInteractive: false, }); @@ -80,8 +87,12 @@ export default class Config extends EasCommand { Log.log(JSON.stringify(profile, null, 2)); } } else { - const { exp: appConfig } = await getDynamicPublicProjectConfigAsync({ - env: profile.env, + const { exp: appConfig } = await evaluateConfigWithEnvVarsAsync({ + flags, + buildProfile: profile, + graphqlClient, + getProjectConfig: getDynamicPublicProjectConfigAsync, + opts: { env: profile.env }, }); if (flags.json) { diff --git a/packages/eas-cli/src/project/applicationIdentifier.ts b/packages/eas-cli/src/project/applicationIdentifier.ts index 7a326cb345..288170fe11 100644 --- a/packages/eas-cli/src/project/applicationIdentifier.ts +++ b/packages/eas-cli/src/project/applicationIdentifier.ts @@ -1,5 +1,5 @@ import { ExpoConfig } from '@expo/config'; -import { Platform, Workflow } from '@expo/eas-build-job'; +import { Env, Platform, Workflow } from '@expo/eas-build-job'; import { BuildProfile } from '@expo/eas-json'; import { @@ -26,6 +26,7 @@ export async function getApplicationIdentifierAsync({ platform, vcsClient, nonInteractive, + env, }: { graphqlClient: ExpoGraphqlClient; projectDir: string; @@ -35,6 +36,7 @@ export async function getApplicationIdentifierAsync({ platform: Platform; vcsClient: Client; nonInteractive: boolean; + env: Env; }): Promise { if (platform === Platform.ANDROID) { const profile = buildProfile as BuildProfile; @@ -71,11 +73,12 @@ export async function getApplicationIdentifierAsync({ { exp, projectDir, nonInteractive: false, vcsClient }, profile ); + const targets = await resolveTargetsAsync({ projectDir, exp, xcodeBuildContext, - env: profile.env, + env, vcsClient, }); const applicationTarget = findApplicationTarget(targets);