@expo/build-tools 1.0.206 → 1.0.208-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,7 +31,7 @@ function createInstallMaestroBuildFunction() {
31
31
  ],
32
32
  fn: async ({ logger, global }, { inputs, env, outputs }) => {
33
33
  const requestedMaestroVersion = inputs.maestro_version.value;
34
- const currentMaestroVersion = await getMaestroVersion({ env });
34
+ const { value: currentMaestroVersion } = await (0, results_1.asyncResult)(getMaestroVersion({ env }));
35
35
  // When not running in EAS Build VM, do not modify local environment.
36
36
  if (env.EAS_BUILD_RUNNER !== 'eas-build') {
37
37
  const currentIsJavaInstalled = await isJavaInstalled({ env });
@@ -1 +1 @@
1
- {"version":3,"file":"installMaestro.js","sourceRoot":"","sources":["../../../src/steps/functions/installMaestro.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport {\n BuildFunction,\n BuildRuntimePlatform,\n BuildStepEnv,\n BuildStepGlobalContext,\n BuildStepInput,\n BuildStepInputValueTypeName,\n BuildStepOutput,\n} from '@expo/steps';\nimport spawn from '@expo/turtle-spawn';\nimport { bunyan } from '@expo/logger';\nimport { asyncResult } from '@expo/results';\n\nexport function createInstallMaestroBuildFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'install_maestro',\n name: 'Install Maestro',\n inputProviders: [\n BuildStepInput.createProvider({\n id: 'maestro_version',\n required: false,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n }),\n ],\n outputProviders: [\n BuildStepOutput.createProvider({\n id: 'maestro_version',\n required: false,\n }),\n ],\n fn: async ({ logger, global }, { inputs, env, outputs }) => {\n const requestedMaestroVersion = inputs.maestro_version.value as string | undefined;\n const currentMaestroVersion = await getMaestroVersion({ env });\n\n // When not running in EAS Build VM, do not modify local environment.\n if (env.EAS_BUILD_RUNNER !== 'eas-build') {\n const currentIsJavaInstalled = await isJavaInstalled({ env });\n const currentIsIdbInstalled = await isIdbInstalled({ env });\n\n if (!currentIsJavaInstalled) {\n logger.warn(\n 'It seems Java is not installed. It is required to run Maestro. If the job fails, this may be the reason.'\n );\n logger.info('');\n }\n\n if (!currentIsIdbInstalled) {\n logger.warn(\n 'It seems IDB is not installed. Maestro requires it to run flows on iOS Simulator. If the job fails, this may be the reason.'\n );\n logger.info('');\n }\n\n if (!currentMaestroVersion) {\n logger.warn(\n 'It seems Maestro is not installed. Please install Maestro manually and rerun the job.'\n );\n logger.info('');\n }\n\n // Guide is helpful in these two cases, it doesn't mention Java.\n if (!currentIsIdbInstalled || !currentMaestroVersion) {\n logger.warn(\n 'For more info, check out Maestro installation guide: https://maestro.mobile.dev/getting-started/installing-maestro'\n );\n }\n\n if (currentMaestroVersion) {\n outputs.maestro_version.set(currentMaestroVersion);\n logger.info(`Maestro ${currentMaestroVersion} is ready.`);\n }\n\n return;\n }\n\n if (!(await isJavaInstalled({ env }))) {\n if (global.runtimePlatform === BuildRuntimePlatform.DARWIN) {\n logger.info('Installing Java');\n await installJavaFromGcs({ logger, env });\n } else {\n // We expect Java to be pre-installed on Linux images,\n // so this should only happen when running this step locally.\n // We don't need to support installing Java on local computers.\n throw new Error('Please install Java manually and rerun the job.');\n }\n }\n\n // IDB is only a requirement on macOS.\n if (\n global.runtimePlatform === BuildRuntimePlatform.DARWIN &&\n !(await isIdbInstalled({ env }))\n ) {\n logger.info('Installing IDB');\n await installIdbFromBrew({ logger, env });\n }\n\n // Skip installing if the input sets a specific Maestro version to install\n // and it is already installed which happens when developing on a local computer.\n if (\n !currentMaestroVersion ||\n (requestedMaestroVersion && requestedMaestroVersion !== currentMaestroVersion)\n ) {\n await installMaestro({\n version: requestedMaestroVersion,\n global,\n logger,\n env,\n });\n }\n\n const maestroVersionResult = await asyncResult(getMaestroVersion({ env }));\n if (!maestroVersionResult.ok) {\n logger.error(maestroVersionResult.reason, 'Failed to get Maestro version.');\n\n throw new Error('Failed to ensure Maestro is installed.');\n }\n\n logger.info(`Maestro ${maestroVersionResult.value} is ready.`);\n outputs.maestro_version.set(maestroVersionResult.value);\n },\n });\n}\n\nasync function getMaestroVersion({ env }: { env: BuildStepEnv }): Promise<string> {\n const maestroVersion = await spawn('maestro', ['--version'], { stdio: 'pipe', env });\n return maestroVersion.stdout.trim();\n}\n\nasync function installMaestro({\n global,\n version,\n logger,\n env,\n}: {\n version?: string;\n logger: bunyan;\n global: BuildStepGlobalContext;\n env: BuildStepEnv;\n}): Promise<void> {\n logger.info('Fetching install script');\n const tempDirectory = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'install_maestro'));\n try {\n const installMaestroScriptResponse = await fetch('https://get.maestro.mobile.dev');\n const installMaestroScript = await installMaestroScriptResponse.text();\n const installMaestroScriptFilePath = path.join(tempDirectory, 'install_maestro.sh');\n await fs.promises.writeFile(installMaestroScriptFilePath, installMaestroScript, {\n mode: 0o777,\n });\n logger.info('Installing Maestro');\n assert(\n env.HOME,\n 'Failed to infer directory to install Maestro in: $HOME environment variable is empty.'\n );\n const maestroDir = path.join(env.HOME, '.maestro');\n await spawn(installMaestroScriptFilePath, [], {\n logger,\n env: {\n ...env,\n MAESTRO_DIR: maestroDir,\n // _Not_ providing MAESTRO_VERSION installs latest.\n // MAESTRO_VERSION is used to interpolate the download URL like github.com/releases/cli-$MAESTRO_VERSION...\n MAESTRO_VERSION: version === 'latest' ? undefined : version,\n },\n });\n // That's where Maestro installs binary as of February 2024\n // I suspect/hope they don't change the location.\n const maestroBinDir = path.join(maestroDir, 'bin');\n global.updateEnv({\n ...global.env,\n PATH: `${global.env.PATH}:${maestroBinDir}`,\n });\n env.PATH = `${env.PATH}:${maestroBinDir}`;\n process.env.PATH = `${process.env.PATH}:${maestroBinDir}`;\n } finally {\n await fs.promises.rm(tempDirectory, { force: true, recursive: true });\n }\n}\n\nasync function isIdbInstalled({ env }: { env: BuildStepEnv }): Promise<boolean> {\n try {\n await spawn('idb', ['-h'], { ignoreStdio: true, env });\n return true;\n } catch {\n return false;\n }\n}\n\nasync function installIdbFromBrew({\n logger,\n env,\n}: {\n logger: bunyan;\n env: BuildStepEnv;\n}): Promise<void> {\n // Unfortunately our Mac images sometimes have two Homebrew\n // installations. We should use the ARM64 one, located in /opt/homebrew.\n const brewPath = '/opt/homebrew/bin/brew';\n const localEnv = {\n ...env,\n HOMEBREW_NO_AUTO_UPDATE: '1',\n HOMEBREW_NO_INSTALL_CLEANUP: '1',\n };\n\n await spawn(brewPath, ['tap', 'facebook/fb'], {\n env: localEnv,\n logger,\n });\n await spawn(brewPath, ['install', 'idb-companion'], {\n env: localEnv,\n logger,\n });\n}\n\nasync function isJavaInstalled({ env }: { env: BuildStepEnv }): Promise<boolean> {\n try {\n await spawn('java', ['-version'], { ignoreStdio: true, env });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Installs Java 17 from a file uploaded manually to GCS as cache.\n * Should not be run outside of EAS Build VMs not to break users' environments.\n */\nasync function installJavaFromGcs({\n logger,\n env,\n}: {\n logger: bunyan;\n env: BuildStepEnv;\n}): Promise<void> {\n const downloadUrl =\n 'https://storage.googleapis.com/turtle-v2/zulu17.60.17-ca-jdk17.0.16-macosx_aarch64.dmg';\n const filename = path.basename(downloadUrl);\n const tempDirectory = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'install_java'));\n const installerPath = path.join(tempDirectory, filename);\n const installerMountDirectory = path.join(tempDirectory, 'mountpoint');\n try {\n logger.info('Downloading Java installer');\n // This is simpler than piping body into a write stream with node-fetch.\n await spawn('curl', ['--output', installerPath, downloadUrl], { env });\n\n await fs.promises.mkdir(installerMountDirectory);\n logger.info('Mounting Java installer');\n await spawn(\n 'hdiutil',\n ['attach', installerPath, '-noverify', '-mountpoint', installerMountDirectory],\n { env }\n );\n\n logger.info('Installing Java');\n await spawn(\n 'sudo',\n [\n 'installer',\n '-pkg',\n path.join(installerMountDirectory, 'Double-Click to Install Azul Zulu JDK 17.pkg'),\n '-target',\n '/',\n ],\n { env }\n );\n } finally {\n try {\n // We need to unmount to remove, otherwise we get \"resource busy\"\n await spawn('hdiutil', ['detach', installerMountDirectory], { env });\n } catch {}\n\n await fs.promises.rm(tempDirectory, { force: true, recursive: true });\n }\n}\n"]}
1
+ {"version":3,"file":"installMaestro.js","sourceRoot":"","sources":["../../../src/steps/functions/installMaestro.ts"],"names":[],"mappings":";;;;;AAkBA,8EA6GC;AA/HD,oDAA4B;AAC5B,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AAExB,uCAQqB;AACrB,sEAAuC;AAEvC,2CAA4C;AAE5C,SAAgB,iCAAiC;IAC/C,OAAO,IAAI,qBAAa,CAAC;QACvB,SAAS,EAAE,KAAK;QAChB,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,iBAAiB;QACvB,cAAc,EAAE;YACd,sBAAc,CAAC,cAAc,CAAC;gBAC5B,EAAE,EAAE,iBAAiB;gBACrB,QAAQ,EAAE,KAAK;gBACf,oBAAoB,EAAE,mCAA2B,CAAC,MAAM;aACzD,CAAC;SACH;QACD,eAAe,EAAE;YACf,uBAAe,CAAC,cAAc,CAAC;gBAC7B,EAAE,EAAE,iBAAiB;gBACrB,QAAQ,EAAE,KAAK;aAChB,CAAC;SACH;QACD,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;YACzD,MAAM,uBAAuB,GAAG,MAAM,CAAC,eAAe,CAAC,KAA2B,CAAC;YACnF,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,MAAM,IAAA,qBAAW,EAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAEvF,qEAAqE;YACrE,IAAI,GAAG,CAAC,gBAAgB,KAAK,WAAW,EAAE,CAAC;gBACzC,MAAM,sBAAsB,GAAG,MAAM,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC9D,MAAM,qBAAqB,GAAG,MAAM,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBAE5D,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CACT,0GAA0G,CAC3G,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClB,CAAC;gBAED,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CACT,6HAA6H,CAC9H,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClB,CAAC;gBAED,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CACT,uFAAuF,CACxF,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClB,CAAC;gBAED,gEAAgE;gBAChE,IAAI,CAAC,qBAAqB,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBACrD,MAAM,CAAC,IAAI,CACT,oHAAoH,CACrH,CAAC;gBACJ,CAAC;gBAED,IAAI,qBAAqB,EAAE,CAAC;oBAC1B,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBACnD,MAAM,CAAC,IAAI,CAAC,WAAW,qBAAqB,YAAY,CAAC,CAAC;gBAC5D,CAAC;gBAED,OAAO;YACT,CAAC;YAED,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;gBACtC,IAAI,MAAM,CAAC,eAAe,KAAK,4BAAoB,CAAC,MAAM,EAAE,CAAC;oBAC3D,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBAC/B,MAAM,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC5C,CAAC;qBAAM,CAAC;oBACN,sDAAsD;oBACtD,6DAA6D;oBAC7D,+DAA+D;oBAC/D,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;YAED,sCAAsC;YACtC,IACE,MAAM,CAAC,eAAe,KAAK,4BAAoB,CAAC,MAAM;gBACtD,CAAC,CAAC,MAAM,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAChC,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC9B,MAAM,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC5C,CAAC;YAED,0EAA0E;YAC1E,iFAAiF;YACjF,IACE,CAAC,qBAAqB;gBACtB,CAAC,uBAAuB,IAAI,uBAAuB,KAAK,qBAAqB,CAAC,EAC9E,CAAC;gBACD,MAAM,cAAc,CAAC;oBACnB,OAAO,EAAE,uBAAuB;oBAChC,MAAM;oBACN,MAAM;oBACN,GAAG;iBACJ,CAAC,CAAC;YACL,CAAC;YAED,MAAM,oBAAoB,GAAG,MAAM,IAAA,qBAAW,EAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC3E,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;gBAE5E,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,WAAW,oBAAoB,CAAC,KAAK,YAAY,CAAC,CAAC;YAC/D,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,EAAE,GAAG,EAAyB;IAC7D,MAAM,cAAc,GAAG,MAAM,IAAA,sBAAK,EAAC,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACrF,OAAO,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,EAC5B,MAAM,EACN,OAAO,EACP,MAAM,EACN,GAAG,GAMJ;IACC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC3F,IAAI,CAAC;QACH,MAAM,4BAA4B,GAAG,MAAM,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACnF,MAAM,oBAAoB,GAAG,MAAM,4BAA4B,CAAC,IAAI,EAAE,CAAC;QACvE,MAAM,4BAA4B,GAAG,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;QACpF,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,4BAA4B,EAAE,oBAAoB,EAAE;YAC9E,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClC,IAAA,gBAAM,EACJ,GAAG,CAAC,IAAI,EACR,uFAAuF,CACxF,CAAC;QACF,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,IAAA,sBAAK,EAAC,4BAA4B,EAAE,EAAE,EAAE;YAC5C,MAAM;YACN,GAAG,EAAE;gBACH,GAAG,GAAG;gBACN,WAAW,EAAE,UAAU;gBACvB,mDAAmD;gBACnD,2GAA2G;gBAC3G,eAAe,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;aAC5D;SACF,CAAC,CAAC;QACH,2DAA2D;QAC3D,iDAAiD;QACjD,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,SAAS,CAAC;YACf,GAAG,MAAM,CAAC,GAAG;YACb,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,aAAa,EAAE;SAC5C,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;IAC5D,CAAC;YAAS,CAAC;QACT,MAAM,YAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,EAAE,GAAG,EAAyB;IAC1D,IAAI,CAAC;QACH,MAAM,IAAA,sBAAK,EAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,EAChC,MAAM,EACN,GAAG,GAIJ;IACC,2DAA2D;IAC3D,wEAAwE;IACxE,MAAM,QAAQ,GAAG,wBAAwB,CAAC;IAC1C,MAAM,QAAQ,GAAG;QACf,GAAG,GAAG;QACN,uBAAuB,EAAE,GAAG;QAC5B,2BAA2B,EAAE,GAAG;KACjC,CAAC;IAEF,MAAM,IAAA,sBAAK,EAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE;QAC5C,GAAG,EAAE,QAAQ;QACb,MAAM;KACP,CAAC,CAAC;IACH,MAAM,IAAA,sBAAK,EAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE;QAClD,GAAG,EAAE,QAAQ;QACb,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,EAAE,GAAG,EAAyB;IAC3D,IAAI,CAAC;QACH,MAAM,IAAA,sBAAK,EAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAAC,EAChC,MAAM,EACN,GAAG,GAIJ;IACC,MAAM,WAAW,GACf,wFAAwF,CAAC;IAC3F,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACxF,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,uBAAuB,GAAG,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACvE,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1C,wEAAwE;QACxE,MAAM,IAAA,sBAAK,EAAC,MAAM,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAEvE,MAAM,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACvC,MAAM,IAAA,sBAAK,EACT,SAAS,EACT,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,uBAAuB,CAAC,EAC9E,EAAE,GAAG,EAAE,CACR,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/B,MAAM,IAAA,sBAAK,EACT,MAAM,EACN;YACE,WAAW;YACX,MAAM;YACN,cAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,8CAA8C,CAAC;YAClF,SAAS;YACT,GAAG;SACJ,EACD,EAAE,GAAG,EAAE,CACR,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,iEAAiE;YACjE,MAAM,IAAA,sBAAK,EAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,uBAAuB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,MAAM,YAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC","sourcesContent":["import assert from 'assert';\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport {\n BuildFunction,\n BuildRuntimePlatform,\n BuildStepEnv,\n BuildStepGlobalContext,\n BuildStepInput,\n BuildStepInputValueTypeName,\n BuildStepOutput,\n} from '@expo/steps';\nimport spawn from '@expo/turtle-spawn';\nimport { bunyan } from '@expo/logger';\nimport { asyncResult } from '@expo/results';\n\nexport function createInstallMaestroBuildFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'install_maestro',\n name: 'Install Maestro',\n inputProviders: [\n BuildStepInput.createProvider({\n id: 'maestro_version',\n required: false,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n }),\n ],\n outputProviders: [\n BuildStepOutput.createProvider({\n id: 'maestro_version',\n required: false,\n }),\n ],\n fn: async ({ logger, global }, { inputs, env, outputs }) => {\n const requestedMaestroVersion = inputs.maestro_version.value as string | undefined;\n const { value: currentMaestroVersion } = await asyncResult(getMaestroVersion({ env }));\n\n // When not running in EAS Build VM, do not modify local environment.\n if (env.EAS_BUILD_RUNNER !== 'eas-build') {\n const currentIsJavaInstalled = await isJavaInstalled({ env });\n const currentIsIdbInstalled = await isIdbInstalled({ env });\n\n if (!currentIsJavaInstalled) {\n logger.warn(\n 'It seems Java is not installed. It is required to run Maestro. If the job fails, this may be the reason.'\n );\n logger.info('');\n }\n\n if (!currentIsIdbInstalled) {\n logger.warn(\n 'It seems IDB is not installed. Maestro requires it to run flows on iOS Simulator. If the job fails, this may be the reason.'\n );\n logger.info('');\n }\n\n if (!currentMaestroVersion) {\n logger.warn(\n 'It seems Maestro is not installed. Please install Maestro manually and rerun the job.'\n );\n logger.info('');\n }\n\n // Guide is helpful in these two cases, it doesn't mention Java.\n if (!currentIsIdbInstalled || !currentMaestroVersion) {\n logger.warn(\n 'For more info, check out Maestro installation guide: https://maestro.mobile.dev/getting-started/installing-maestro'\n );\n }\n\n if (currentMaestroVersion) {\n outputs.maestro_version.set(currentMaestroVersion);\n logger.info(`Maestro ${currentMaestroVersion} is ready.`);\n }\n\n return;\n }\n\n if (!(await isJavaInstalled({ env }))) {\n if (global.runtimePlatform === BuildRuntimePlatform.DARWIN) {\n logger.info('Installing Java');\n await installJavaFromGcs({ logger, env });\n } else {\n // We expect Java to be pre-installed on Linux images,\n // so this should only happen when running this step locally.\n // We don't need to support installing Java on local computers.\n throw new Error('Please install Java manually and rerun the job.');\n }\n }\n\n // IDB is only a requirement on macOS.\n if (\n global.runtimePlatform === BuildRuntimePlatform.DARWIN &&\n !(await isIdbInstalled({ env }))\n ) {\n logger.info('Installing IDB');\n await installIdbFromBrew({ logger, env });\n }\n\n // Skip installing if the input sets a specific Maestro version to install\n // and it is already installed which happens when developing on a local computer.\n if (\n !currentMaestroVersion ||\n (requestedMaestroVersion && requestedMaestroVersion !== currentMaestroVersion)\n ) {\n await installMaestro({\n version: requestedMaestroVersion,\n global,\n logger,\n env,\n });\n }\n\n const maestroVersionResult = await asyncResult(getMaestroVersion({ env }));\n if (!maestroVersionResult.ok) {\n logger.error(maestroVersionResult.reason, 'Failed to get Maestro version.');\n\n throw new Error('Failed to ensure Maestro is installed.');\n }\n\n logger.info(`Maestro ${maestroVersionResult.value} is ready.`);\n outputs.maestro_version.set(maestroVersionResult.value);\n },\n });\n}\n\nasync function getMaestroVersion({ env }: { env: BuildStepEnv }): Promise<string> {\n const maestroVersion = await spawn('maestro', ['--version'], { stdio: 'pipe', env });\n return maestroVersion.stdout.trim();\n}\n\nasync function installMaestro({\n global,\n version,\n logger,\n env,\n}: {\n version?: string;\n logger: bunyan;\n global: BuildStepGlobalContext;\n env: BuildStepEnv;\n}): Promise<void> {\n logger.info('Fetching install script');\n const tempDirectory = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'install_maestro'));\n try {\n const installMaestroScriptResponse = await fetch('https://get.maestro.mobile.dev');\n const installMaestroScript = await installMaestroScriptResponse.text();\n const installMaestroScriptFilePath = path.join(tempDirectory, 'install_maestro.sh');\n await fs.promises.writeFile(installMaestroScriptFilePath, installMaestroScript, {\n mode: 0o777,\n });\n logger.info('Installing Maestro');\n assert(\n env.HOME,\n 'Failed to infer directory to install Maestro in: $HOME environment variable is empty.'\n );\n const maestroDir = path.join(env.HOME, '.maestro');\n await spawn(installMaestroScriptFilePath, [], {\n logger,\n env: {\n ...env,\n MAESTRO_DIR: maestroDir,\n // _Not_ providing MAESTRO_VERSION installs latest.\n // MAESTRO_VERSION is used to interpolate the download URL like github.com/releases/cli-$MAESTRO_VERSION...\n MAESTRO_VERSION: version === 'latest' ? undefined : version,\n },\n });\n // That's where Maestro installs binary as of February 2024\n // I suspect/hope they don't change the location.\n const maestroBinDir = path.join(maestroDir, 'bin');\n global.updateEnv({\n ...global.env,\n PATH: `${global.env.PATH}:${maestroBinDir}`,\n });\n env.PATH = `${env.PATH}:${maestroBinDir}`;\n process.env.PATH = `${process.env.PATH}:${maestroBinDir}`;\n } finally {\n await fs.promises.rm(tempDirectory, { force: true, recursive: true });\n }\n}\n\nasync function isIdbInstalled({ env }: { env: BuildStepEnv }): Promise<boolean> {\n try {\n await spawn('idb', ['-h'], { ignoreStdio: true, env });\n return true;\n } catch {\n return false;\n }\n}\n\nasync function installIdbFromBrew({\n logger,\n env,\n}: {\n logger: bunyan;\n env: BuildStepEnv;\n}): Promise<void> {\n // Unfortunately our Mac images sometimes have two Homebrew\n // installations. We should use the ARM64 one, located in /opt/homebrew.\n const brewPath = '/opt/homebrew/bin/brew';\n const localEnv = {\n ...env,\n HOMEBREW_NO_AUTO_UPDATE: '1',\n HOMEBREW_NO_INSTALL_CLEANUP: '1',\n };\n\n await spawn(brewPath, ['tap', 'facebook/fb'], {\n env: localEnv,\n logger,\n });\n await spawn(brewPath, ['install', 'idb-companion'], {\n env: localEnv,\n logger,\n });\n}\n\nasync function isJavaInstalled({ env }: { env: BuildStepEnv }): Promise<boolean> {\n try {\n await spawn('java', ['-version'], { ignoreStdio: true, env });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Installs Java 17 from a file uploaded manually to GCS as cache.\n * Should not be run outside of EAS Build VMs not to break users' environments.\n */\nasync function installJavaFromGcs({\n logger,\n env,\n}: {\n logger: bunyan;\n env: BuildStepEnv;\n}): Promise<void> {\n const downloadUrl =\n 'https://storage.googleapis.com/turtle-v2/zulu17.60.17-ca-jdk17.0.16-macosx_aarch64.dmg';\n const filename = path.basename(downloadUrl);\n const tempDirectory = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'install_java'));\n const installerPath = path.join(tempDirectory, filename);\n const installerMountDirectory = path.join(tempDirectory, 'mountpoint');\n try {\n logger.info('Downloading Java installer');\n // This is simpler than piping body into a write stream with node-fetch.\n await spawn('curl', ['--output', installerPath, downloadUrl], { env });\n\n await fs.promises.mkdir(installerMountDirectory);\n logger.info('Mounting Java installer');\n await spawn(\n 'hdiutil',\n ['attach', installerPath, '-noverify', '-mountpoint', installerMountDirectory],\n { env }\n );\n\n logger.info('Installing Java');\n await spawn(\n 'sudo',\n [\n 'installer',\n '-pkg',\n path.join(installerMountDirectory, 'Double-Click to Install Azul Zulu JDK 17.pkg'),\n '-target',\n '/',\n ],\n { env }\n );\n } finally {\n try {\n // We need to unmount to remove, otherwise we get \"resource busy\"\n await spawn('hdiutil', ['detach', installerMountDirectory], { env });\n } catch {}\n\n await fs.promises.rm(tempDirectory, { force: true, recursive: true });\n }\n}\n"]}
@@ -39,7 +39,7 @@ const FlowConfigSchema = zod_1.z.object({
39
39
  });
40
40
  const WorkspaceConfigSchema = zod_1.z.object({
41
41
  flows: zod_1.z.array(zod_1.z.string()).optional(),
42
- executionOrder: zod_1.z.record(zod_1.z.unknown()).optional(),
42
+ executionOrder: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
43
43
  includeTags: zod_1.z.array(zod_1.z.string()).optional(),
44
44
  excludeTags: zod_1.z.array(zod_1.z.string()).optional(),
45
45
  });
@@ -1 +1 @@
1
- {"version":3,"file":"findMaestroPathsFlowsToExecuteAsync.js","sourceRoot":"","sources":["../../src/utils/findMaestroPathsFlowsToExecuteAsync.ts"],"names":[],"mappings":"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","sourcesContent":["import { promises as fs } from 'node:fs';\nimport * as path from 'node:path';\n\nimport { bunyan } from '@expo/logger';\nimport * as yaml from 'yaml';\nimport { z } from 'zod';\nimport { asyncResult } from '@expo/results';\nimport fg from 'fast-glob';\n\nconst FlowConfigSchema = z.object({\n name: z.string().optional(),\n tags: z.array(z.string()).optional(),\n});\n\nconst WorkspaceConfigSchema = z.object({\n flows: z.array(z.string()).optional(),\n executionOrder: z.record(z.unknown()).optional(),\n includeTags: z.array(z.string()).optional(),\n excludeTags: z.array(z.string()).optional(),\n});\n\ntype FlowConfig = z.infer<typeof FlowConfigSchema>;\ntype WorkspaceConfig = z.infer<typeof WorkspaceConfigSchema>;\n\nexport async function findMaestroPathsFlowsToExecuteAsync({\n workingDirectory,\n flowPath,\n includeTags: _includeTags,\n excludeTags: _excludeTags,\n logger,\n}: {\n workingDirectory: string;\n flowPath: string;\n includeTags: string[] | undefined;\n excludeTags: string[] | undefined;\n logger: bunyan;\n}): Promise<string[]> {\n const absoluteFlowPath = path.resolve(workingDirectory, flowPath);\n // If it's a file, just return it (no validation needed)\n const stat = await fs.stat(absoluteFlowPath);\n\n if (stat.isFile()) {\n logger.info(`Found a file: ${path.relative(workingDirectory, absoluteFlowPath)}`);\n return [absoluteFlowPath];\n }\n\n // It's a directory - discover flow files\n logger.info(`Found a directory: ${path.relative(workingDirectory, absoluteFlowPath)}`);\n\n // Check for workspace config\n logger.info(`Searching for workspace config...`);\n const workspaceConfig = await findAndParseWorkspaceConfigAsync({\n dirPath: absoluteFlowPath,\n workingDirectory,\n logger,\n });\n logger.info(`Using workspace config: ${JSON.stringify(workspaceConfig)}`);\n\n if (workspaceConfig?.executionOrder) {\n logger.warn(`Execution order is not supported yet. Ignoring.`);\n }\n\n logger.info(`Searching for flow files...`);\n const { flows } = await findAndParseFlowFilesAsync({\n dirPath: absoluteFlowPath,\n workingDirectory,\n workspaceConfig,\n logger,\n });\n\n if (flows.length === 0) {\n logger.info(\n `No valid flow files found in: ${path.relative(workingDirectory, absoluteFlowPath)}`\n );\n return [];\n }\n\n const includeTags = [...(_includeTags ?? []), ...(workspaceConfig?.includeTags ?? [])];\n const excludeTags = [...(_excludeTags ?? []), ...(workspaceConfig?.excludeTags ?? [])];\n\n if (includeTags.length === 0 && excludeTags.length === 0) {\n logger.info(`No tags provided, returning all flows.`);\n return flows.map(({ path }) => path);\n }\n\n logger.info(\n `Filtering flows by tags. Tags to include: ${JSON.stringify(includeTags)}. Tags to exclude: ${JSON.stringify(excludeTags) ?? 'none'}.`\n );\n return flows\n .filter(({ config, path: flowPath }) => {\n const shouldInclude = matchesTags({\n flowTags: config?.tags ?? [],\n includeTags,\n excludeTags,\n });\n\n logger.info(\n shouldInclude\n ? `- ${path.relative(workingDirectory, flowPath)} matches tags, including.`\n : `- ${path.relative(workingDirectory, flowPath)} does not match tags, excluding.`\n );\n\n return shouldInclude;\n })\n .map(({ path }) => path);\n}\n\nasync function findAndParseWorkspaceConfigAsync({\n dirPath,\n workingDirectory,\n logger,\n}: {\n dirPath: string;\n workingDirectory: string;\n logger: bunyan;\n}): Promise<WorkspaceConfig | null> {\n const configPaths = await fg(['config.yaml', 'config.yml'], {\n cwd: dirPath,\n absolute: true,\n });\n\n if (configPaths.length === 0) {\n logger.info(`No workspace config found in: ${path.relative(workingDirectory, dirPath)}`);\n return null;\n }\n\n for (const configPath of configPaths) {\n try {\n const content = await fs.readFile(configPath, 'utf-8');\n const configDoc = yaml.parse(content);\n if (!configDoc) {\n logger.warn(\n `No content found in workspace config: ${path.relative(workingDirectory, configPath)}`\n );\n continue;\n }\n logger.info(`Using workspace config from: ${path.relative(workingDirectory, configPath)}`);\n return WorkspaceConfigSchema.parse(configDoc);\n } catch (err) {\n logger.warn(\n { err },\n `Failed to parse workspace config: ${path.relative(workingDirectory, configPath)}`\n );\n continue;\n }\n }\n\n logger.info(`No valid workspace config found in: ${path.relative(workingDirectory, dirPath)}`);\n return null;\n}\n\nasync function findAndParseFlowFilesAsync({\n workingDirectory,\n dirPath,\n workspaceConfig,\n logger,\n}: {\n workingDirectory: string;\n dirPath: string;\n workspaceConfig: WorkspaceConfig | null;\n logger: bunyan;\n}): Promise<{ flows: { config: FlowConfig; path: string }[] }> {\n const flows: { config: FlowConfig; path: string }[] = [];\n\n // Determine flow patterns from config or use default\n const flowPatterns = workspaceConfig?.flows ?? ['*'];\n logger.info(`Using flow patterns: ${JSON.stringify(flowPatterns)}`);\n\n // Use fast-glob to find matching files\n const matchedFiles = await fg(flowPatterns, {\n cwd: dirPath,\n absolute: true,\n onlyFiles: true,\n ignore: ['*/config.yaml', '*/config.yml'], // Skip workspace config files\n });\n\n logger.info(`Found ${matchedFiles.length} potential flow files`);\n\n // Parse each matched file\n for (const filePath of matchedFiles) {\n // Skip non-YAML files\n const ext = path.extname(filePath);\n if (ext !== '.yaml' && ext !== '.yml') {\n logger.info(`Skipping non-YAML file: ${path.relative(workingDirectory, filePath)}`);\n continue;\n }\n\n const result = await asyncResult(parseFlowFile(filePath));\n if (result.ok) {\n logger.info(`Found flow file: ${path.relative(workingDirectory, filePath)}`);\n flows.push({ config: result.value, path: filePath });\n } else {\n logger.info(\n { err: result.reason },\n `Skipping flow file: ${path.relative(workingDirectory, filePath)}`\n );\n }\n }\n\n return { flows };\n}\n\nasync function parseFlowFile(filePath: string): Promise<FlowConfig> {\n const content = await fs.readFile(filePath, 'utf-8');\n const documents = yaml.parseAllDocuments(content);\n const configDoc = documents[0];\n if (!configDoc) {\n throw new Error(`No config section found in ${filePath}`);\n }\n return FlowConfigSchema.parse(configDoc.toJS());\n}\n\nfunction matchesTags({\n flowTags,\n includeTags,\n excludeTags,\n}: {\n flowTags: string[];\n includeTags: string[];\n excludeTags: string[];\n}): boolean {\n // Include logic: if includeTags is empty OR flow has any of the include tags\n const includeMatch =\n includeTags.length === 0 || includeTags.some((tag) => flowTags.includes(tag));\n\n // Exclude logic: if excludeTags is empty OR flow has none of the exclude tags\n const excludeMatch =\n excludeTags.length === 0 || !excludeTags.some((tag) => flowTags.includes(tag));\n\n return includeMatch && excludeMatch;\n}\n"]}
1
+ {"version":3,"file":"findMaestroPathsFlowsToExecuteAsync.js","sourceRoot":"","sources":["../../src/utils/findMaestroPathsFlowsToExecuteAsync.ts"],"names":[],"mappings":"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","sourcesContent":["import { promises as fs } from 'node:fs';\nimport * as path from 'node:path';\n\nimport { bunyan } from '@expo/logger';\nimport * as yaml from 'yaml';\nimport { z } from 'zod';\nimport { asyncResult } from '@expo/results';\nimport fg from 'fast-glob';\n\nconst FlowConfigSchema = z.object({\n name: z.string().optional(),\n tags: z.array(z.string()).optional(),\n});\n\nconst WorkspaceConfigSchema = z.object({\n flows: z.array(z.string()).optional(),\n executionOrder: z.record(z.string(), z.unknown()).optional(),\n includeTags: z.array(z.string()).optional(),\n excludeTags: z.array(z.string()).optional(),\n});\n\ntype FlowConfig = z.infer<typeof FlowConfigSchema>;\ntype WorkspaceConfig = z.infer<typeof WorkspaceConfigSchema>;\n\nexport async function findMaestroPathsFlowsToExecuteAsync({\n workingDirectory,\n flowPath,\n includeTags: _includeTags,\n excludeTags: _excludeTags,\n logger,\n}: {\n workingDirectory: string;\n flowPath: string;\n includeTags: string[] | undefined;\n excludeTags: string[] | undefined;\n logger: bunyan;\n}): Promise<string[]> {\n const absoluteFlowPath = path.resolve(workingDirectory, flowPath);\n // If it's a file, just return it (no validation needed)\n const stat = await fs.stat(absoluteFlowPath);\n\n if (stat.isFile()) {\n logger.info(`Found a file: ${path.relative(workingDirectory, absoluteFlowPath)}`);\n return [absoluteFlowPath];\n }\n\n // It's a directory - discover flow files\n logger.info(`Found a directory: ${path.relative(workingDirectory, absoluteFlowPath)}`);\n\n // Check for workspace config\n logger.info(`Searching for workspace config...`);\n const workspaceConfig = await findAndParseWorkspaceConfigAsync({\n dirPath: absoluteFlowPath,\n workingDirectory,\n logger,\n });\n logger.info(`Using workspace config: ${JSON.stringify(workspaceConfig)}`);\n\n if (workspaceConfig?.executionOrder) {\n logger.warn(`Execution order is not supported yet. Ignoring.`);\n }\n\n logger.info(`Searching for flow files...`);\n const { flows } = await findAndParseFlowFilesAsync({\n dirPath: absoluteFlowPath,\n workingDirectory,\n workspaceConfig,\n logger,\n });\n\n if (flows.length === 0) {\n logger.info(\n `No valid flow files found in: ${path.relative(workingDirectory, absoluteFlowPath)}`\n );\n return [];\n }\n\n const includeTags = [...(_includeTags ?? []), ...(workspaceConfig?.includeTags ?? [])];\n const excludeTags = [...(_excludeTags ?? []), ...(workspaceConfig?.excludeTags ?? [])];\n\n if (includeTags.length === 0 && excludeTags.length === 0) {\n logger.info(`No tags provided, returning all flows.`);\n return flows.map(({ path }) => path);\n }\n\n logger.info(\n `Filtering flows by tags. Tags to include: ${JSON.stringify(includeTags)}. Tags to exclude: ${JSON.stringify(excludeTags) ?? 'none'}.`\n );\n return flows\n .filter(({ config, path: flowPath }) => {\n const shouldInclude = matchesTags({\n flowTags: config?.tags ?? [],\n includeTags,\n excludeTags,\n });\n\n logger.info(\n shouldInclude\n ? `- ${path.relative(workingDirectory, flowPath)} matches tags, including.`\n : `- ${path.relative(workingDirectory, flowPath)} does not match tags, excluding.`\n );\n\n return shouldInclude;\n })\n .map(({ path }) => path);\n}\n\nasync function findAndParseWorkspaceConfigAsync({\n dirPath,\n workingDirectory,\n logger,\n}: {\n dirPath: string;\n workingDirectory: string;\n logger: bunyan;\n}): Promise<WorkspaceConfig | null> {\n const configPaths = await fg(['config.yaml', 'config.yml'], {\n cwd: dirPath,\n absolute: true,\n });\n\n if (configPaths.length === 0) {\n logger.info(`No workspace config found in: ${path.relative(workingDirectory, dirPath)}`);\n return null;\n }\n\n for (const configPath of configPaths) {\n try {\n const content = await fs.readFile(configPath, 'utf-8');\n const configDoc = yaml.parse(content);\n if (!configDoc) {\n logger.warn(\n `No content found in workspace config: ${path.relative(workingDirectory, configPath)}`\n );\n continue;\n }\n logger.info(`Using workspace config from: ${path.relative(workingDirectory, configPath)}`);\n return WorkspaceConfigSchema.parse(configDoc);\n } catch (err) {\n logger.warn(\n { err },\n `Failed to parse workspace config: ${path.relative(workingDirectory, configPath)}`\n );\n continue;\n }\n }\n\n logger.info(`No valid workspace config found in: ${path.relative(workingDirectory, dirPath)}`);\n return null;\n}\n\nasync function findAndParseFlowFilesAsync({\n workingDirectory,\n dirPath,\n workspaceConfig,\n logger,\n}: {\n workingDirectory: string;\n dirPath: string;\n workspaceConfig: WorkspaceConfig | null;\n logger: bunyan;\n}): Promise<{ flows: { config: FlowConfig; path: string }[] }> {\n const flows: { config: FlowConfig; path: string }[] = [];\n\n // Determine flow patterns from config or use default\n const flowPatterns = workspaceConfig?.flows ?? ['*'];\n logger.info(`Using flow patterns: ${JSON.stringify(flowPatterns)}`);\n\n // Use fast-glob to find matching files\n const matchedFiles = await fg(flowPatterns, {\n cwd: dirPath,\n absolute: true,\n onlyFiles: true,\n ignore: ['*/config.yaml', '*/config.yml'], // Skip workspace config files\n });\n\n logger.info(`Found ${matchedFiles.length} potential flow files`);\n\n // Parse each matched file\n for (const filePath of matchedFiles) {\n // Skip non-YAML files\n const ext = path.extname(filePath);\n if (ext !== '.yaml' && ext !== '.yml') {\n logger.info(`Skipping non-YAML file: ${path.relative(workingDirectory, filePath)}`);\n continue;\n }\n\n const result = await asyncResult(parseFlowFile(filePath));\n if (result.ok) {\n logger.info(`Found flow file: ${path.relative(workingDirectory, filePath)}`);\n flows.push({ config: result.value, path: filePath });\n } else {\n logger.info(\n { err: result.reason },\n `Skipping flow file: ${path.relative(workingDirectory, filePath)}`\n );\n }\n }\n\n return { flows };\n}\n\nasync function parseFlowFile(filePath: string): Promise<FlowConfig> {\n const content = await fs.readFile(filePath, 'utf-8');\n const documents = yaml.parseAllDocuments(content);\n const configDoc = documents[0];\n if (!configDoc) {\n throw new Error(`No config section found in ${filePath}`);\n }\n return FlowConfigSchema.parse(configDoc.toJS());\n}\n\nfunction matchesTags({\n flowTags,\n includeTags,\n excludeTags,\n}: {\n flowTags: string[];\n includeTags: string[];\n excludeTags: string[];\n}): boolean {\n // Include logic: if includeTags is empty OR flow has any of the include tags\n const includeMatch =\n includeTags.length === 0 || includeTags.some((tag) => flowTags.includes(tag));\n\n // Exclude logic: if excludeTags is empty OR flow has none of the exclude tags\n const excludeMatch =\n excludeTags.length === 0 || !excludeTags.some((tag) => flowTags.includes(tag));\n\n return includeMatch && excludeMatch;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/build-tools",
3
- "version": "1.0.206",
3
+ "version": "1.0.208-alpha.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
@@ -27,13 +27,13 @@
27
27
  "@expo/config": "10.0.6",
28
28
  "@expo/config-plugins": "9.0.12",
29
29
  "@expo/downloader": "1.0.206",
30
- "@expo/eas-build-job": "1.0.206",
30
+ "@expo/eas-build-job": "1.0.208-alpha.0",
31
31
  "@expo/env": "^0.4.0",
32
32
  "@expo/logger": "1.0.206",
33
33
  "@expo/package-manager": "1.7.0",
34
34
  "@expo/plist": "^0.2.0",
35
35
  "@expo/results": "^1.0.0",
36
- "@expo/steps": "1.0.206",
36
+ "@expo/steps": "1.0.208-alpha.0",
37
37
  "@expo/template-file": "1.0.206",
38
38
  "@expo/turtle-spawn": "1.0.206",
39
39
  "@expo/xcpretty": "^4.3.1",
@@ -79,5 +79,5 @@
79
79
  "node": "20.14.0",
80
80
  "yarn": "1.22.21"
81
81
  },
82
- "gitHead": "4dd2cddde4f35396bc645cae821d11b8111d0b13"
82
+ "gitHead": "b421ff4a84ee2a8552d81aa728a3a2938dd1faf9"
83
83
  }