Compare commits

...
3 Commits
Author SHA1 Message Date
Expo CI 14e9f1af44 v27.9.0 2026-11-12 12:16:18 +00:00
Szymon Dziedzic 291ec6f2c8 [eas-cli] Warn about EAS Simulator outages in simulator:start (#4873)
* [eas-cli] warn about EAS Simulator outages in simulator:start

* [eas-cli] name the simulator status page service Expo Simulators
2026-11-12 13:13:42 +01:00
Expo CI a4edee8178 bump STAGING and PRODUCTION to 27.8.0 in cli-versions.json 2026-11-12 11:11:46 +00:00
41 changed files with 452 additions and 232 deletions

No files matched your search

+6
View File
@@ -2,6 +2,12 @@
This is the log of notable changes to EAS CLI and related packages.
## [27.9.0](https://github.com/expo/eas-cli/releases/tag/v27.9.0) - 2026-11-12
### 🎉 New features
- [eas-cli] Warn about Expo Simulators and EAS Workflows outages from status.expo.dev before `eas simulator:start` creates a session, and describe degraded performance and maintenance correctly in all outage warnings. ([#4873](https://github.com/expo/eas-cli/pull/4873) by [@szdziedzic](https://github.com/szdziedzic))
## [27.8.0](https://github.com/expo/eas-cli/releases/tag/v27.8.0) - 2026-11-12
### 🎉 New features
+2 -2
View File
@@ -1,4 +1,4 @@
{
"STAGING": "27.7.2",
"PRODUCTION": "27.7.2"
"STAGING": "27.8.0",
"PRODUCTION": "27.8.0"
}
+1 -1
View File
@@ -1,5 +1,5 @@
{
"npmClient": "yarn",
"version": "27.8.0",
"version": "27.9.0",
"$schema": "node_modules/lerna/schemas/lerna-schema.json"
}
+4
View File
@@ -1,5 +1,9 @@
# @expo/build-tools
## 27.9.0
No changes in this release.
## 27.8.0
### Patch Changes
+7 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@expo/build-tools",
"version": "27.8.0",
"version": "27.9.0",
"bugs": "https://github.com/expo/eas-cli/issues",
"license": "BUSL-1.1",
"author": "Expo <[email protected]>",
@@ -42,17 +42,17 @@
"dependencies": {
"@expo/config": "55.0.10",
"@expo/config-plugins": "55.0.7",
"@expo/downloader": "27.8.0",
"@expo/eas-build-job": "27.8.0",
"@expo/downloader": "27.9.0",
"@expo/eas-build-job": "27.9.0",
"@expo/env": "^0.4.0",
"@expo/logger": "27.8.0",
"@expo/logger": "27.9.0",
"@expo/package-manager": "1.9.10",
"@expo/plist": "^0.3.5",
"@expo/results": "^1.0.0",
"@expo/spawn-async": "1.7.2",
"@expo/steps": "27.8.0",
"@expo/template-file": "27.8.0",
"@expo/turtle-spawn": "27.8.0",
"@expo/steps": "27.9.0",
"@expo/template-file": "27.9.0",
"@expo/turtle-spawn": "27.9.0",
"@expo/xcpretty": "^4.4.7",
"@ngrok/ngrok": "1.7.0",
"@sentry/node": "7.77.0",
@@ -1,5 +1,9 @@
# create-eas-build-function
## 27.9.0
No changes in this release.
## 27.8.0
No changes in this release.
@@ -1,6 +1,6 @@
{
"name": "create-eas-build-function",
"version": "27.8.0",
"version": "27.9.0",
"description": "Create functions for use in EAS Build custom builds.",
"keywords": [
"expo",
@@ -35,7 +35,7 @@
"clean": "rimraf ./build/ \"*.tsbuildinfo\""
},
"dependencies": {
"@expo/steps": "27.8.0"
"@expo/steps": "27.9.0"
},
"devDependencies": {
"@expo/package-manager": "1.9.10",
+4
View File
@@ -1,5 +1,9 @@
# @expo/downloader
## 27.9.0
No changes in this release.
## 27.8.0
No changes in this release.
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@expo/downloader",
"version": "27.8.0",
"version": "27.9.0",
"bugs": "https://github.com/expo/eas-cli/issues",
"license": "BUSL-1.1",
"author": "Expo <[email protected]>",
@@ -1,5 +1,9 @@
# eas-build-cache-provider
## 27.9.0
No changes in this release.
## 27.8.0
No changes in this release.
@@ -1,6 +1,6 @@
{
"name": "eas-build-cache-provider",
"version": "27.8.0",
"version": "27.9.0",
"description": "A build cache provider plugin for the Expo CLI",
"homepage": "https://github.com/expo/eas-cli",
"bugs": "https://github.com/expo/eas-cli/issues",
+4
View File
@@ -1,5 +1,9 @@
# @expo/eas-build-job
## 27.9.0
No changes in this release.
## 27.8.0
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@expo/eas-build-job",
"version": "27.8.0",
"version": "27.9.0",
"bugs": "https://github.com/expo/eas-cli/issues",
"license": "MIT",
"author": "Expo <[email protected]>",
@@ -25,9 +25,9 @@
"clean": "rimraf node_modules dist coverage \"*.tsbuildinfo\""
},
"dependencies": {
"@expo/logger": "27.8.0",
"@expo/logger": "27.9.0",
"@expo/results": "1.0.0",
"@expo/turtle-spawn": "27.8.0",
"@expo/turtle-spawn": "27.9.0",
"joi": "^17.13.9",
"semver": "^7.6.2",
"zod": "^4.6.7"
+6
View File
@@ -1,5 +1,11 @@
# eas-cli
## 27.9.0
### Minor Changes
- Warn about Expo Simulators and EAS Workflows outages from status.expo.dev before `eas simulator:start` creates a session, and describe degraded performance and maintenance correctly in all outage warnings. ([#4873](https://github.com/expo/eas-cli/pull/4873) by [@szdziedzic](https://github.com/szdziedzic))
## 27.8.0
### Minor Changes
+148 -148
View File
File diff suppressed because it is too large. Load diff
+6
View File
@@ -78787,6 +78787,12 @@
"isDeprecated": false,
"deprecationReason": null
},
{
"name": "EAS_SIMULATOR",
"description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
"name": "EAS_SUBMIT",
"description": null,
+5 -5
View File
@@ -1,6 +1,6 @@
{
"name": "eas-cli",
"version": "27.8.0",
"version": "27.9.0",
"description": "EAS command line tool",
"keywords": [
"cli",
@@ -48,12 +48,12 @@
"@expo/code-signing-certificates": "0.0.5",
"@expo/config": "55.0.10",
"@expo/config-plugins": "55.0.7",
"@expo/eas-build-job": "27.8.0",
"@expo/eas-json": "27.8.0",
"@expo/eas-build-job": "27.9.0",
"@expo/eas-json": "27.9.0",
"@expo/env": "^1.0.0",
"@expo/experimentation": "0.0.5",
"@expo/json-file": "8.3.3",
"@expo/logger": "27.8.0",
"@expo/logger": "27.9.0",
"@expo/multipart-body-parser": "2.0.0",
"@expo/osascript": "2.1.4",
"@expo/package-manager": "1.9.10",
@@ -65,7 +65,7 @@
"@expo/results": "1.0.0",
"@expo/rudder-sdk-node": "1.1.1",
"@expo/spawn-async": "1.7.2",
"@expo/steps": "27.8.0",
"@expo/steps": "27.9.0",
"@expo/timeago.js": "1.0.0",
"@oclif/core": "^4.8.3",
"@oclif/plugin-autocomplete": "^3.2.40",
@@ -17,6 +17,7 @@ import {
DeviceRunSessionStatus,
DeviceRunSessionType,
JobRunStatus,
StatuspageServiceName,
} from '../../../graphql/generated';
import { DeviceRunSessionMutation } from '../../../graphql/mutations/DeviceRunSessionMutation';
import { DeviceRunSessionAvailabilityQuery } from '../../../graphql/queries/DeviceRunSessionAvailabilityQuery';
@@ -37,6 +38,7 @@ import { applyStartConfigAsync } from '../../../simulator/startSetup';
import { ControlConfigExecutionError } from '../../../simulator/controlConfig';
import * as promiseUtils from '../../../utils/promise';
import { enableJsonOutput, printJsonOnlyOutput } from '../../../utils/json';
import { maybeWarnAboutEasOutagesAsync } from '../../../utils/statuspageService';
import Simulator from '../index';
jest.mock('fs-extra');
@@ -71,6 +73,7 @@ jest.mock('../../../simulator/env', () => ({
}));
jest.mock('../../../simulator/expoGo');
jest.mock('../../../utils/json');
jest.mock('../../../utils/statuspageService');
jest.mock('../../../utils/promise', () => ({
...jest.requireActual('../../../utils/promise'),
sleepAsync: jest.fn().mockResolvedValue(undefined),
@@ -1053,6 +1056,22 @@ describe(Simulator, () => {
expect(mockAvailabilityByAppIdAsync).toHaveBeenCalledWith(graphqlClient, 'project-123');
expect(mockCreateDeviceRunSessionAsync).not.toHaveBeenCalled();
expect(mockPromptAsync).not.toHaveBeenCalled();
expect(maybeWarnAboutEasOutagesAsync).not.toHaveBeenCalled();
});
it('warns about EAS Simulator and EAS Workflows outages before creating the session', async () => {
mockCreateDeviceRunSessionAsync.mockImplementationOnce(async () => {
expect(maybeWarnAboutEasOutagesAsync).toHaveBeenCalledWith(graphqlClient, [
StatuspageServiceName.EasSimulator,
StatuspageServiceName.EasWorkflows,
]);
return makeCreatedDeviceRunSession();
});
const { command } = createCommand(['--platform', 'ios', '--non-interactive']);
await command.runAsync();
expect(mockCreateDeviceRunSessionAsync).toHaveBeenCalledTimes(1);
});
it('skips the gate check for Expo admins on a gated account', async () => {
@@ -23,6 +23,7 @@ import {
DeviceRunSessionStatus,
DeviceRunSessionType,
JobRunStatus,
StatuspageServiceName,
} from '../../graphql/generated';
import { DeviceRunSessionMutation } from '../../graphql/mutations/DeviceRunSessionMutation';
import { DeviceRunSessionAvailabilityQuery } from '../../graphql/queries/DeviceRunSessionAvailabilityQuery';
@@ -77,6 +78,7 @@ import {
} from '../../simulator/utils';
import { enableJsonOutput, printJsonOnlyOutput } from '../../utils/json';
import { sleepAsync } from '../../utils/promise';
import { maybeWarnAboutEasOutagesAsync } from '../../utils/statuspageService';
// Allow the cold-cache client download (up to 60s) and a further minute to connect.
const EGRESS_SETUP_TIMEOUT_MS = 120_000;
@@ -410,6 +412,12 @@ With local egress, actions wait for the connection and require interactive mode.
Log.newLine();
}
// Same services as the outage banner on the simulator pages of the website.
await maybeWarnAboutEasOutagesAsync(graphqlClient, [
StatuspageServiceName.EasSimulator,
StatuspageServiceName.EasWorkflows,
]);
const createSpinner = ora('🚀 Creating simulator session').start();
let deviceRunSessionId: string;
let deviceRunSessionUrl: string;
+1
View File
@@ -11214,6 +11214,7 @@ export type StatuspageService = {
/** Name of a service monitored by Expo status page. */
export enum StatuspageServiceName {
EasBuild = 'EAS_BUILD',
EasSimulator = 'EAS_SIMULATOR',
EasSubmit = 'EAS_SUBMIT',
EasUpdate = 'EAS_UPDATE',
EasWorkflows = 'EAS_WORKFLOWS',
@@ -0,0 +1,110 @@
import { ExpoGraphqlClient } from '../../commandUtils/context/contextUtils/createGraphqlClient';
import {
StatuspageIncidentImpact,
StatuspageIncidentStatus,
StatuspageServiceFragment,
StatuspageServiceName,
StatuspageServiceStatus,
} from '../../graphql/generated';
import { StatuspageServiceQuery } from '../../graphql/queries/StatuspageServiceQuery';
import Log from '../../log';
import { maybeWarnAboutEasOutagesAsync } from '../statuspageService';
jest.mock('../../graphql/queries/StatuspageServiceQuery');
jest.mock('../../log');
const graphqlClient = {} as ExpoGraphqlClient;
function makeService(
name: StatuspageServiceName,
status: StatuspageServiceStatus,
incidentName?: string
): StatuspageServiceFragment {
return {
id: `${name}-id`,
name,
status,
incidents: incidentName
? [
{
id: 'incident-id',
name: incidentName,
status: StatuspageIncidentStatus.Investigating,
impact: StatuspageIncidentImpact.Major,
shortlink: 'https://stspg.io/incident',
},
]
: [],
};
}
function getWarnings(): string[] {
return jest.mocked(Log.warn).mock.calls.map(([message]) => String(message));
}
describe(maybeWarnAboutEasOutagesAsync, () => {
beforeEach(() => {
jest.mocked(Log.warn).mockClear();
});
it('warns about an Expo Simulators outage with the incident name', async () => {
jest
.mocked(StatuspageServiceQuery.statuspageServicesAsync)
.mockResolvedValue([
makeService(
StatuspageServiceName.EasSimulator,
StatuspageServiceStatus.PartialOutage,
'iOS simulator sessions fail to start'
),
]);
await maybeWarnAboutEasOutagesAsync(graphqlClient, [StatuspageServiceName.EasSimulator]);
expect(StatuspageServiceQuery.statuspageServicesAsync).toHaveBeenCalledWith(graphqlClient, [
StatuspageServiceName.EasSimulator,
]);
const warnings = getWarnings();
expect(warnings[0]).toContain('Expo Simulators is experiencing a partial outage.');
expect(warnings[1]).toBe('Reason: iOS simulator sessions fail to start.');
});
it.each([
[StatuspageServiceStatus.MajorOutage, 'EAS Workflows is experiencing a major outage.'],
[
StatuspageServiceStatus.DegradedPerformance,
'EAS Workflows is experiencing degraded performance.',
],
[StatuspageServiceStatus.UnderMaintenance, 'EAS Workflows is under maintenance.'],
])('describes the %s status', async (status, expectedWarning) => {
jest
.mocked(StatuspageServiceQuery.statuspageServicesAsync)
.mockResolvedValue([makeService(StatuspageServiceName.EasWorkflows, status)]);
await maybeWarnAboutEasOutagesAsync(graphqlClient, [StatuspageServiceName.EasWorkflows]);
expect(getWarnings()[0]).toContain(expectedWarning);
});
it('does not warn about an operational service', async () => {
jest
.mocked(StatuspageServiceQuery.statuspageServicesAsync)
.mockResolvedValue([
makeService(StatuspageServiceName.EasSimulator, StatuspageServiceStatus.Operational),
]);
await maybeWarnAboutEasOutagesAsync(graphqlClient, [StatuspageServiceName.EasSimulator]);
expect(Log.warn).not.toHaveBeenCalled();
});
it('does not fail the command when the status query fails', async () => {
jest
.mocked(StatuspageServiceQuery.statuspageServicesAsync)
.mockRejectedValue(new Error('Variable "$serviceNames" got invalid value'));
await expect(
maybeWarnAboutEasOutagesAsync(graphqlClient, [StatuspageServiceName.EasSimulator])
).resolves.toBeUndefined();
expect(Log.warn).not.toHaveBeenCalled();
});
});
@@ -27,6 +27,15 @@ const humanReadableServiceName: Record<StatuspageServiceName, string> = {
[StatuspageServiceName.GithubApiRequests]: 'GitHub API Requests',
[StatuspageServiceName.GithubWebhooks]: 'Github Webhooks',
[StatuspageServiceName.EasWorkflows]: 'EAS Workflows',
[StatuspageServiceName.EasSimulator]: 'Expo Simulators',
};
const statusDescription: Record<StatuspageServiceStatus, string> = {
[StatuspageServiceStatus.MajorOutage]: 'is experiencing a major outage',
[StatuspageServiceStatus.PartialOutage]: 'is experiencing a partial outage',
[StatuspageServiceStatus.DegradedPerformance]: 'is experiencing degraded performance',
[StatuspageServiceStatus.UnderMaintenance]: 'is under maintenance',
[StatuspageServiceStatus.Operational]: 'is operational',
};
function warnAboutServiceOutage(service: StatuspageServiceFragment): void {
@@ -34,12 +43,11 @@ function warnAboutServiceOutage(service: StatuspageServiceFragment): void {
return;
}
const outageType = service.status === StatuspageServiceStatus.MajorOutage ? 'major' : 'partial';
// An older CLI can receive a status that was added to the API later.
const description = statusDescription[service.status] ?? 'is experiencing issues';
Log.addNewLineIfNone();
Log.warn(
chalk.bold(`${humanReadableServiceName[service.name]} is experiencing a ${outageType} outage.`)
);
Log.warn(chalk.bold(`${humanReadableServiceName[service.name]} ${description}.`));
if (service.incidents.length > 0) {
const [currentIncident] = service.incidents;
+4
View File
@@ -1,5 +1,9 @@
# @expo/eas-json
## 27.9.0
No changes in this release.
## 27.8.0
No changes in this release.
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@expo/eas-json",
"version": "27.8.0",
"version": "27.9.0",
"description": "A library for interacting with eas.json",
"homepage": "https://github.com/expo/eas-cli",
"bugs": "https://github.com/expo/eas-cli/issues",
@@ -32,7 +32,7 @@
},
"dependencies": {
"@babel/code-frame": "7.23.5",
"@expo/eas-build-job": "27.8.0",
"@expo/eas-build-job": "27.9.0",
"chalk": "4.1.2",
"env-string": "1.0.1",
"fs-extra": "11.2.0",
+4
View File
@@ -1,5 +1,9 @@
# eas-cli-local-build-plugin
## 27.9.0
No changes in this release.
## 27.8.0
No changes in this release.
+5 -5
View File
@@ -1,6 +1,6 @@
{
"name": "eas-cli-local-build-plugin",
"version": "27.8.0",
"version": "27.9.0",
"description": "Tool for running EAS compatible builds on a local machine.",
"bugs": "https://github.com/expo/eas-cli/issues",
"license": "BUSL-1.1",
@@ -26,12 +26,12 @@
"clean": "rimraf node_modules dist coverage \"*.tsbuildinfo\""
},
"dependencies": {
"@expo/build-tools": "27.8.0",
"@expo/build-tools": "27.9.0",
"@expo/bunyan": "^4.0.1",
"@expo/eas-build-job": "27.8.0",
"@expo/logger": "27.8.0",
"@expo/eas-build-job": "27.9.0",
"@expo/logger": "27.9.0",
"@expo/spawn-async": "^1.7.2",
"@expo/turtle-spawn": "27.8.0",
"@expo/turtle-spawn": "27.9.0",
"chalk": "4.1.2",
"env-paths": "^2.2.1",
"fs-extra": "^11.2.0",
+4
View File
@@ -1,5 +1,9 @@
# @expo/logger
## 27.9.0
No changes in this release.
## 27.8.0
No changes in this release.
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@expo/logger",
"version": "27.8.0",
"version": "27.9.0",
"bugs": "https://github.com/expo/eas-cli/issues",
"license": "BUSL-1.1",
"author": "Expo <[email protected]>",
+4
View File
@@ -1,5 +1,9 @@
# @expo/simulator-launcher
## 27.9.0
No changes in this release.
## 27.8.0
No changes in this release.
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@expo/simulator-launcher",
"version": "27.8.0",
"version": "27.9.0",
"description": "Launch and claim Simulator sessions on EAS workers",
"bugs": "https://github.com/expo/eas-cli/issues",
"license": "BUSL-1.1",
+4
View File
@@ -1,5 +1,9 @@
# @expo/steps
## 27.9.0
No changes in this release.
## 27.8.0
No changes in this release.
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@expo/steps",
"version": "27.8.0",
"version": "27.9.0",
"bugs": "https://github.com/expo/eas-cli/issues",
"license": "BUSL-1.1",
"author": "Expo <[email protected]>",
@@ -27,8 +27,8 @@
"clean": "rimraf node_modules dist coverage \"*.tsbuildinfo\""
},
"dependencies": {
"@expo/eas-build-job": "27.8.0",
"@expo/logger": "27.8.0",
"@expo/eas-build-job": "27.9.0",
"@expo/logger": "27.9.0",
"@expo/spawn-async": "^1.7.2",
"arg": "^5.0.2",
"fast-glob": "^3.3.2",
+4
View File
@@ -1,5 +1,9 @@
# @expo/template-file
## 27.9.0
No changes in this release.
## 27.8.0
No changes in this release.
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@expo/template-file",
"version": "27.8.0",
"version": "27.9.0",
"bugs": "https://github.com/expo/eas-cli/issues",
"license": "BUSL-1.1",
"author": "Expo <[email protected]>",
+4
View File
@@ -1,5 +1,9 @@
# @expo/turtle-spawn
## 27.9.0
No changes in this release.
## 27.8.0
No changes in this release.
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@expo/turtle-spawn",
"version": "27.8.0",
"version": "27.9.0",
"bugs": "https://github.com/expo/eas-cli/issues",
"license": "BUSL-1.1",
"author": "Expo <[email protected]>",
@@ -25,7 +25,7 @@
"clean": "rimraf node_modules dist coverage \"*.tsbuildinfo\""
},
"dependencies": {
"@expo/logger": "27.8.0",
"@expo/logger": "27.9.0",
"@expo/spawn-async": "^1.7.2"
},
"devDependencies": {
+4
View File
@@ -1,5 +1,9 @@
# @expo/vm-tools
## 27.9.0
No changes in this release.
## 27.8.0
No changes in this release.
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@expo/vm-tools",
"version": "27.8.0",
"version": "27.9.0",
"description": "VM startup script loader",
"bugs": "https://github.com/expo/eas-cli/issues",
"license": "BUSL-1.1",
+4
View File
@@ -1,5 +1,9 @@
# @expo/worker
## 27.9.0
No changes in this release.
## 27.8.0
No changes in this release.
+7 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@expo/worker",
"version": "27.8.0",
"version": "27.9.0",
"private": true,
"scripts": {
"start": "yarn watch",
@@ -19,17 +19,17 @@
},
"dependencies": {
"@babel/core": "7.24.7",
"@expo/build-tools": "27.8.0",
"@expo/build-tools": "27.9.0",
"@expo/config-plugins": "55.0.7",
"@expo/config-types": "55.0.5",
"@expo/eas-build-job": "27.8.0",
"@expo/logger": "27.8.0",
"@expo/eas-build-job": "27.9.0",
"@expo/logger": "27.9.0",
"@expo/results": "1.0.0",
"@expo/rudder-sdk-node": "1.1.1",
"@expo/spawn-async": "1.7.2",
"@expo/steps": "27.8.0",
"@expo/template-file": "27.8.0",
"@expo/turtle-spawn": "27.8.0",
"@expo/steps": "27.9.0",
"@expo/template-file": "27.9.0",
"@expo/turtle-spawn": "27.9.0",
"@hapi/boom": "10.0.1",
"check-disk-space": "3.4.0",
"fast-glob": "3.3.2",
Generated
+35 -35
View File
@@ -2515,24 +2515,24 @@ __metadata:
languageName: node
linkType: hard
"@expo/build-tools@npm:27.8.0, @expo/build-tools@workspace:packages/build-tools":
"@expo/build-tools@npm:27.9.0, @expo/build-tools@workspace:packages/build-tools":
version: 0.0.0-use.local
resolution: "@expo/build-tools@workspace:packages/build-tools"
dependencies:
"@expo/config": "npm:55.0.10"
"@expo/config-plugins": "npm:55.0.7"
"@expo/downloader": "npm:27.8.0"
"@expo/eas-build-job": "npm:27.8.0"
"@expo/downloader": "npm:27.9.0"
"@expo/eas-build-job": "npm:27.9.0"
"@expo/env": "npm:^0.4.0"
"@expo/logger": "npm:27.8.0"
"@expo/logger": "npm:27.9.0"
"@expo/package-manager": "npm:1.9.10"
"@expo/plist": "npm:^0.3.5"
"@expo/repack-app": "npm:~0.9.0"
"@expo/results": "npm:^1.0.0"
"@expo/spawn-async": "npm:1.7.2"
"@expo/steps": "npm:27.8.0"
"@expo/template-file": "npm:27.8.0"
"@expo/turtle-spawn": "npm:27.8.0"
"@expo/steps": "npm:27.9.0"
"@expo/template-file": "npm:27.9.0"
"@expo/turtle-spawn": "npm:27.9.0"
"@expo/xcpretty": "npm:^4.4.7"
"@ngrok/ngrok": "npm:1.7.0"
"@sentry/node": "npm:7.77.0"
@@ -2768,7 +2768,7 @@ __metadata:
languageName: node
linkType: hard
"@expo/downloader@npm:27.8.0, @expo/downloader@workspace:packages/downloader":
"@expo/downloader@npm:27.9.0, @expo/downloader@workspace:packages/downloader":
version: 0.0.0-use.local
resolution: "@expo/downloader@workspace:packages/downloader"
dependencies:
@@ -2784,13 +2784,13 @@ __metadata:
languageName: unknown
linkType: soft
"@expo/eas-build-job@npm:27.8.0, @expo/eas-build-job@workspace:packages/eas-build-job":
"@expo/eas-build-job@npm:27.9.0, @expo/eas-build-job@workspace:packages/eas-build-job":
version: 0.0.0-use.local
resolution: "@expo/eas-build-job@workspace:packages/eas-build-job"
dependencies:
"@expo/logger": "npm:27.8.0"
"@expo/logger": "npm:27.9.0"
"@expo/results": "npm:1.0.0"
"@expo/turtle-spawn": "npm:27.8.0"
"@expo/turtle-spawn": "npm:27.9.0"
"@types/jest": "npm:^29.5.12"
"@types/node": "npm:22.20.5"
jest: "npm:^29.7.0"
@@ -2803,12 +2803,12 @@ __metadata:
languageName: unknown
linkType: soft
"@expo/eas-json@npm:27.8.0, @expo/eas-json@workspace:packages/eas-json":
"@expo/eas-json@npm:27.9.0, @expo/eas-json@workspace:packages/eas-json":
version: 0.0.0-use.local
resolution: "@expo/eas-json@workspace:packages/eas-json"
dependencies:
"@babel/code-frame": "npm:7.23.5"
"@expo/eas-build-job": "npm:27.8.0"
"@expo/eas-build-job": "npm:27.9.0"
"@tsconfig/node22": "npm:22.0.6"
"@types/babel__code-frame": "npm:7.0.3"
"@types/fs-extra": "npm:11.0.4"
@@ -2931,7 +2931,7 @@ __metadata:
languageName: node
linkType: hard
"@expo/logger@npm:27.8.0, @expo/logger@workspace:packages/logger":
"@expo/logger@npm:27.9.0, @expo/logger@workspace:packages/logger":
version: 0.0.0-use.local
resolution: "@expo/logger@workspace:packages/logger"
dependencies:
@@ -3149,12 +3149,12 @@ __metadata:
languageName: node
linkType: hard
"@expo/steps@npm:27.8.0, @expo/steps@workspace:packages/steps":
"@expo/steps@npm:27.9.0, @expo/steps@workspace:packages/steps":
version: 0.0.0-use.local
resolution: "@expo/steps@workspace:packages/steps"
dependencies:
"@expo/eas-build-job": "npm:27.8.0"
"@expo/logger": "npm:27.8.0"
"@expo/eas-build-job": "npm:27.9.0"
"@expo/logger": "npm:27.9.0"
"@expo/spawn-async": "npm:^1.7.2"
"@jest/globals": "npm:^29.7.0"
"@types/jest": "npm:^29.5.12"
@@ -3180,7 +3180,7 @@ __metadata:
languageName: unknown
linkType: soft
"@expo/template-file@npm:27.8.0, @expo/template-file@workspace:packages/template-file":
"@expo/template-file@npm:27.9.0, @expo/template-file@workspace:packages/template-file":
version: 0.0.0-use.local
resolution: "@expo/template-file@workspace:packages/template-file"
dependencies:
@@ -3203,11 +3203,11 @@ __metadata:
languageName: node
linkType: hard
"@expo/turtle-spawn@npm:27.8.0, @expo/turtle-spawn@workspace:packages/turtle-spawn":
"@expo/turtle-spawn@npm:27.9.0, @expo/turtle-spawn@workspace:packages/turtle-spawn":
version: 0.0.0-use.local
resolution: "@expo/turtle-spawn@workspace:packages/turtle-spawn"
dependencies:
"@expo/logger": "npm:27.8.0"
"@expo/logger": "npm:27.9.0"
"@expo/spawn-async": "npm:^1.7.2"
"@types/jest": "npm:^29.5.12"
"@types/node": "npm:22.20.5"
@@ -3238,17 +3238,17 @@ __metadata:
resolution: "@expo/worker@workspace:packages/worker"
dependencies:
"@babel/core": "npm:7.24.7"
"@expo/build-tools": "npm:27.8.0"
"@expo/build-tools": "npm:27.9.0"
"@expo/config-plugins": "npm:55.0.7"
"@expo/config-types": "npm:55.0.5"
"@expo/eas-build-job": "npm:27.8.0"
"@expo/logger": "npm:27.8.0"
"@expo/eas-build-job": "npm:27.9.0"
"@expo/logger": "npm:27.9.0"
"@expo/results": "npm:1.0.0"
"@expo/rudder-sdk-node": "npm:1.1.1"
"@expo/spawn-async": "npm:1.7.2"
"@expo/steps": "npm:27.8.0"
"@expo/template-file": "npm:27.8.0"
"@expo/turtle-spawn": "npm:27.8.0"
"@expo/steps": "npm:27.9.0"
"@expo/template-file": "npm:27.9.0"
"@expo/turtle-spawn": "npm:27.9.0"
"@hapi/boom": "npm:10.0.1"
"@types/babel__core": "npm:7.20.5"
"@types/fs-extra": "npm:11.0.4"
@@ -10123,7 +10123,7 @@ __metadata:
resolution: "create-eas-build-function@workspace:packages/create-eas-build-function"
dependencies:
"@expo/package-manager": "npm:1.9.10"
"@expo/steps": "npm:27.8.0"
"@expo/steps": "npm:27.9.0"
"@jest/globals": "npm:^29.7.0"
"@types/jest": "npm:^29.5.12"
"@types/node": "npm:22.20.5"
@@ -10707,12 +10707,12 @@ __metadata:
version: 0.0.0-use.local
resolution: "eas-cli-local-build-plugin@workspace:packages/local-build-plugin"
dependencies:
"@expo/build-tools": "npm:27.8.0"
"@expo/build-tools": "npm:27.9.0"
"@expo/bunyan": "npm:^4.0.1"
"@expo/eas-build-job": "npm:27.8.0"
"@expo/logger": "npm:27.8.0"
"@expo/eas-build-job": "npm:27.9.0"
"@expo/logger": "npm:27.9.0"
"@expo/spawn-async": "npm:^1.7.2"
"@expo/turtle-spawn": "npm:27.8.0"
"@expo/turtle-spawn": "npm:27.9.0"
"@types/fs-extra": "npm:^11.0.4"
"@types/hapi__joi": "npm:^17.1.14"
"@types/lodash": "npm:^4.17.4"
@@ -10766,12 +10766,12 @@ __metadata:
"@expo/code-signing-certificates": "npm:0.0.5"
"@expo/config": "npm:55.0.10"
"@expo/config-plugins": "npm:55.0.7"
"@expo/eas-build-job": "npm:27.8.0"
"@expo/eas-json": "npm:27.8.0"
"@expo/eas-build-job": "npm:27.9.0"
"@expo/eas-json": "npm:27.9.0"
"@expo/env": "npm:^1.0.0"
"@expo/experimentation": "npm:0.0.5"
"@expo/json-file": "npm:8.3.3"
"@expo/logger": "npm:27.8.0"
"@expo/logger": "npm:27.9.0"
"@expo/multipart-body-parser": "npm:2.0.0"
"@expo/osascript": "npm:2.1.4"
"@expo/package-manager": "npm:1.9.10"
@@ -10783,7 +10783,7 @@ __metadata:
"@expo/results": "npm:1.0.0"
"@expo/rudder-sdk-node": "npm:1.1.1"
"@expo/spawn-async": "npm:1.7.2"
"@expo/steps": "npm:27.8.0"
"@expo/steps": "npm:27.9.0"
"@expo/timeago.js": "npm:1.0.0"
"@graphql-codegen/cli": "npm:6.3.1"
"@graphql-codegen/introspection": "npm:5.0.2"