Skip to content

Commit b07af33

Browse files
authored
fix(device): drop Pixel 6 Pro and Pixel 7 Pro, and mirror the Pixel 1… (#268)
fix(device): drop Pixel 6 Pro and Pixel 7 Pro, and mirror the Pixel 10 default The API removes pixel-6-pro and pixel-7-pro on 26 Oct 2026 and moves the default Android device from pixel-7 to pixel-10 (API 36 unchanged). pixel-7 stays until 9 Nov 2026. - The help-text enum loses both devices; validation already follows the live compatibility data. - The default-device mirror is pixel-10, so a version-only request is checked against the device the API will actually use. A level Pixel 10 doesn't offer (32-35) is refused with the devices that do offer it, which is what the API now answers too. - dcd live's --android-device help lists the live-session devices the API offers (the API already refuses pixel-7 and the Pro devices for live). - Device-matrix and MCP examples use devices that outlive Pixel 7. schema.types.ts is deliberately not regenerated: the API drift would come with it.
1 parent 8bff82e commit b07af33

7 files changed

Lines changed: 18 additions & 15 deletions

File tree

‎src/commands/live.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ const startSub = defineCommand({
166166
'android-device': {
167167
type: 'string',
168168
description:
169-
'[Android] Device profile to match a cloud run (options: pixel-6, pixel-6-pro, pixel-7, pixel-7-pro, pixel-8, pixel-10, pixel-10-pro, pixel-10-pro-xl, pixel-11)',
169+
'[Android] Device profile to match a cloud run (options: pixel-6, pixel-8, pixel-10, pixel-10-pro, pixel-10-pro-xl, pixel-11)',
170170
},
171171
'android-api-level': {
172172
type: 'string',

‎src/config/flags/device.flags.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export const deviceFlags = {
5353
},
5454
'android-device-matrix': {
5555
type: 'string',
56-
description: `[Android only] Device-matrix cell as <device>:<apiLevel> (append :play for Google Play), e.g. pixel-7:34 or pixel-7:34:play. Repeatable — every flow runs once per cell (no cross-product). Cannot be combined with --ios-device-matrix.`,
56+
description: `[Android only] Device-matrix cell as <device>:<apiLevel> (append :play for Google Play), e.g. pixel-8:34 or pixel-8:34:play. Repeatable — every flow runs once per cell (no cross-product). Cannot be combined with --ios-device-matrix.`,
5757
},
5858
orientation: {
5959
type: 'string',

‎src/mcp/tools/run-cloud-test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export function registerRunCloudTest(server: McpServer): void {
6969
iosVersion: z.string().optional().describe('iOS version, e.g. "17"'),
7070
iosDevice: z.string().optional().describe('iOS device, e.g. "iphone-14"'),
7171
androidApiLevel: z.string().optional().describe('Android API level, e.g. "34"'),
72-
androidDevice: z.string().optional().describe('Android device, e.g. "pixel-7"'),
72+
androidDevice: z.string().optional().describe('Android device, e.g. "pixel-10"'),
7373
googlePlay: z.boolean().optional().describe('Use a Google Play-enabled Android image'),
7474
name: z.string().optional().describe('A name for this run'),
7575
env: z

‎src/services/device-validation.service.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ export class DeviceValidationService {
106106
// Mirrors the API, which applies these same global defaults to a
107107
// request that omits either half (execution-planner.service.ts)
108108
// and then rejects an incompatible pair.
109-
defaultDevice: 'pixel-7',
109+
defaultDevice: 'pixel-10',
110110
defaultVersion: '36',
111111
device,
112112
deviceArg: argNames.androidDevice,

‎src/types/domain/device.types.ts‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@ export enum EiOSDevices {
3232
export enum EAndroidDevices {
3333
'generic-tablet' = 'generic-tablet',
3434
'pixel-6' = 'pixel-6',
35-
'pixel-6-pro' = 'pixel-6-pro',
3635
'pixel-7' = 'pixel-7',
37-
'pixel-7-pro' = 'pixel-7-pro',
3836
'pixel-8' = 'pixel-8',
3937
'pixel-10' = 'pixel-10',
4038
'pixel-10-pro' = 'pixel-10-pro',

‎src/utils/device-matrix.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export function parseDeviceMatrix(
7777
(parts.length === 3 && parts[2] !== 'play')
7878
) {
7979
throw new CliError(
80-
`Invalid --android-device-matrix "${raw}". Expected <device>:<apiLevel> or <device>:<apiLevel>:play, e.g. pixel-7:34 or pixel-7:34:play.`,
80+
`Invalid --android-device-matrix "${raw}". Expected <device>:<apiLevel> or <device>:<apiLevel>:play, e.g. pixel-8:34 or pixel-8:34:play.`,
8181
);
8282
}
8383
configs.push({

‎test/unit/device-validation.service.test.ts‎

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ describe('DeviceValidationService', () => {
130130
});
131131

132132
// The API fills an omitted half from the same global defaults (iphone-14 /
133-
// iOS 17, pixel-7 / API 36) and rejects an incompatible pair, so the CLI
133+
// iOS 17, pixel-10 / API 36) and rejects an incompatible pair, so the CLI
134134
// mirrors that — but must tell the user to pass the other half.
135135
describe('requests that rely on a default', () => {
136136
it('tells a device-only iOS request to pass the version explicitly', () => {
@@ -174,25 +174,30 @@ describe('DeviceValidationService', () => {
174174
expect(() => ios('99')).to.throw(
175175
/No iOS device was given, so the default \(iphone-14\) was checked: no iOS device offers iOS 99$/,
176176
);
177-
expect(() => android('36', undefined, true)).to.throw(
178-
/no Google Play device offers API level 36$/,
177+
// The default device (pixel-10) has Play images, as it does in the API.
178+
const playDefault = {
179+
...compat,
180+
androidPlay: { ...compat.androidPlay, 'pixel-10': ['36', '37'] },
181+
};
182+
expect(() => android('35', undefined, true, playDefault)).to.throw(
183+
/no Google Play device offers API level 35$/,
179184
);
180185
});
181186

182187
it('leaves a version-only request to the API once the API no longer offers the assumed default device', () => {
183188
// The API has moved its default on; checking against the CLI's stale
184189
// assumption would refuse a request the API accepts.
185-
const withoutPixel7 = {
190+
const withoutPixel10 = {
186191
...compat,
187-
android: { 'pixel-10': ['36', '37'] },
192+
android: { 'pixel-12': ['38'] },
188193
};
189-
expect(() => android('36', undefined, false, withoutPixel7)).to.not.throw();
194+
expect(() => android('38', undefined, false, withoutPixel10)).to.not.throw();
190195
});
191196
});
192197

193198
// With Google Play the API does not apply the global default to an omitted
194-
// half — pixel-7 / API 36 has no Play image — but picks whichever value
195-
// makes the pair a Play cell, and only rejects when there is none.
199+
// half when that would miss a Play image, but picks whichever value makes
200+
// the pair a Play cell, and only rejects when there is none.
196201
describe('Google Play requests that name one half', () => {
197202
const play36 = {
198203
...compat,

0 commit comments

Comments
 (0)