mirror of
https://github.com/expo/eas-cli.git
synced 2026-11-15 03:38:08 -10:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a9da78946b | ||
|
|
b6d9accea4 | ||
|
|
4611a65bce | ||
|
|
db29b3fc18 | ||
|
|
2534a46bd3 | ||
|
|
7def4b502e | ||
|
|
4ea26d7ca3 | ||
|
|
c4c8075b1f |
No files matched your search
+14
-2
@@ -8,12 +8,24 @@ This is the log of notable changes to EAS CLI and related packages.
|
||||
|
||||
### 🎉 New features
|
||||
|
||||
- Change default iOS image for projects with Expo SDK <= 41 (SDK 41 won't build with Xcode 12.5). ([#479](https://github.com/expo/eas-cli/pull/479) by [@dsokal](https://github.com/dsokal))
|
||||
|
||||
### 🐛 Bug fixes
|
||||
|
||||
- Fix inverted conditional so we actually only prompt about commit when index is dirty. ([#481](https://github.com/expo/eas-cli/pull/481) by [@brentvatne](https://github.com/brentvatne))
|
||||
|
||||
### 🧹 Chores
|
||||
|
||||
## [0.18.1](https://github.com/expo/eas-cli/releases/tag/v0.18.1) - 2021-06-24
|
||||
|
||||
### 🎉 New features
|
||||
|
||||
- Add basic printing support for Apple App Specific Password. ([#474](https://github.com/expo/eas-cli/pull/474) by [@quinlanj](https://github.com/quinlanj))
|
||||
|
||||
### 🐛 Bug fixes
|
||||
|
||||
- Fix CLI UI getting blocked on credentials migration, leading to partially migrated state. ([#477](https://github.com/expo/eas-cli/pull/477) by [@brentvatne](https://github.com/brentvatne))
|
||||
|
||||
### 🧹 Chores
|
||||
|
||||
## [0.18.0](https://github.com/expo/eas-cli/releases/tag/v0.18.0) - 2021-06-24
|
||||
|
||||
### 🛠 Breaking changes
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"npmClient": "yarn",
|
||||
"useWorkspaces": true,
|
||||
"version": "0.18.1"
|
||||
"version": "0.18.2"
|
||||
}
|
||||
+22
-22
@@ -69,7 +69,7 @@ ALIASES
|
||||
$ eas login
|
||||
```
|
||||
|
||||
_See code: [src/commands/account/login.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/account/login.ts)_
|
||||
_See code: [src/commands/account/login.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/account/login.ts)_
|
||||
|
||||
## `eas account:logout`
|
||||
|
||||
@@ -83,7 +83,7 @@ ALIASES
|
||||
$ eas logout
|
||||
```
|
||||
|
||||
_See code: [src/commands/account/logout.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/account/logout.ts)_
|
||||
_See code: [src/commands/account/logout.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/account/logout.ts)_
|
||||
|
||||
## `eas account:view`
|
||||
|
||||
@@ -97,7 +97,7 @@ ALIASES
|
||||
$ eas whoami
|
||||
```
|
||||
|
||||
_See code: [src/commands/account/view.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/account/view.ts)_
|
||||
_See code: [src/commands/account/view.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/account/view.ts)_
|
||||
|
||||
## `eas analytics [STATUS]`
|
||||
|
||||
@@ -108,7 +108,7 @@ USAGE
|
||||
$ eas analytics [STATUS]
|
||||
```
|
||||
|
||||
_See code: [src/commands/analytics.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/analytics.ts)_
|
||||
_See code: [src/commands/analytics.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/analytics.ts)_
|
||||
|
||||
## `eas build`
|
||||
|
||||
@@ -128,7 +128,7 @@ OPTIONS
|
||||
--[no-]wait Wait for build(s) to complete
|
||||
```
|
||||
|
||||
_See code: [src/commands/build/index.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/build/index.ts)_
|
||||
_See code: [src/commands/build/index.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/build/index.ts)_
|
||||
|
||||
## `eas build:cancel [BUILD_ID]`
|
||||
|
||||
@@ -139,7 +139,7 @@ USAGE
|
||||
$ eas build:cancel [BUILD_ID]
|
||||
```
|
||||
|
||||
_See code: [src/commands/build/cancel.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/build/cancel.ts)_
|
||||
_See code: [src/commands/build/cancel.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/build/cancel.ts)_
|
||||
|
||||
## `eas build:configure`
|
||||
|
||||
@@ -153,7 +153,7 @@ OPTIONS
|
||||
-p, --platform=(android|ios|all) Platform to configure
|
||||
```
|
||||
|
||||
_See code: [src/commands/build/configure.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/build/configure.ts)_
|
||||
_See code: [src/commands/build/configure.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/build/configure.ts)_
|
||||
|
||||
## `eas build:list`
|
||||
|
||||
@@ -169,7 +169,7 @@ OPTIONS
|
||||
--status=(new|in-queue|in-progress|errored|finished|canceled)
|
||||
```
|
||||
|
||||
_See code: [src/commands/build/list.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/build/list.ts)_
|
||||
_See code: [src/commands/build/list.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/build/list.ts)_
|
||||
|
||||
## `eas build:view [BUILD_ID]`
|
||||
|
||||
@@ -180,7 +180,7 @@ USAGE
|
||||
$ eas build:view [BUILD_ID]
|
||||
```
|
||||
|
||||
_See code: [src/commands/build/view.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/build/view.ts)_
|
||||
_See code: [src/commands/build/view.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/build/view.ts)_
|
||||
|
||||
## `eas credentials`
|
||||
|
||||
@@ -191,7 +191,7 @@ USAGE
|
||||
$ eas credentials
|
||||
```
|
||||
|
||||
_See code: [src/commands/credentials.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/credentials.ts)_
|
||||
_See code: [src/commands/credentials.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/credentials.ts)_
|
||||
|
||||
## `eas device:create`
|
||||
|
||||
@@ -202,7 +202,7 @@ USAGE
|
||||
$ eas device:create
|
||||
```
|
||||
|
||||
_See code: [src/commands/device/create.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/device/create.ts)_
|
||||
_See code: [src/commands/device/create.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/device/create.ts)_
|
||||
|
||||
## `eas device:list`
|
||||
|
||||
@@ -216,7 +216,7 @@ OPTIONS
|
||||
--apple-team-id=apple-team-id
|
||||
```
|
||||
|
||||
_See code: [src/commands/device/list.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/device/list.ts)_
|
||||
_See code: [src/commands/device/list.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/device/list.ts)_
|
||||
|
||||
## `eas device:view [UDID]`
|
||||
|
||||
@@ -227,7 +227,7 @@ USAGE
|
||||
$ eas device:view [UDID]
|
||||
```
|
||||
|
||||
_See code: [src/commands/device/view.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/device/view.ts)_
|
||||
_See code: [src/commands/device/view.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/device/view.ts)_
|
||||
|
||||
## `eas help [COMMAND]`
|
||||
|
||||
@@ -260,7 +260,7 @@ OPTIONS
|
||||
--value=value Value of the secret
|
||||
```
|
||||
|
||||
_See code: [src/commands/secret/create.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/secret/create.ts)_
|
||||
_See code: [src/commands/secret/create.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/secret/create.ts)_
|
||||
|
||||
## `eas secret:delete`
|
||||
|
||||
@@ -277,7 +277,7 @@ DESCRIPTION
|
||||
Unsure where to find the secret's ID? Run eas secrets:list
|
||||
```
|
||||
|
||||
_See code: [src/commands/secret/delete.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/secret/delete.ts)_
|
||||
_See code: [src/commands/secret/delete.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/secret/delete.ts)_
|
||||
|
||||
## `eas secret:list`
|
||||
|
||||
@@ -288,7 +288,7 @@ USAGE
|
||||
$ eas secret:list
|
||||
```
|
||||
|
||||
_See code: [src/commands/secret/list.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/secret/list.ts)_
|
||||
_See code: [src/commands/secret/list.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/secret/list.ts)_
|
||||
|
||||
## `eas submit --platform=(android|ios)`
|
||||
|
||||
@@ -367,7 +367,7 @@ EXAMPLES
|
||||
and provide its App ID
|
||||
```
|
||||
|
||||
_See code: [src/commands/submit.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/submit.ts)_
|
||||
_See code: [src/commands/submit.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/submit.ts)_
|
||||
|
||||
## `eas webhook:create`
|
||||
|
||||
@@ -386,7 +386,7 @@ OPTIONS
|
||||
--url=url Webhook URL
|
||||
```
|
||||
|
||||
_See code: [src/commands/webhook/create.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/webhook/create.ts)_
|
||||
_See code: [src/commands/webhook/create.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/webhook/create.ts)_
|
||||
|
||||
## `eas webhook:delete [ID]`
|
||||
|
||||
@@ -400,7 +400,7 @@ ARGUMENTS
|
||||
ID ID of the webhook to delete
|
||||
```
|
||||
|
||||
_See code: [src/commands/webhook/delete.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/webhook/delete.ts)_
|
||||
_See code: [src/commands/webhook/delete.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/webhook/delete.ts)_
|
||||
|
||||
## `eas webhook:list`
|
||||
|
||||
@@ -414,7 +414,7 @@ OPTIONS
|
||||
--event=(BUILD) Event type that triggers the webhook
|
||||
```
|
||||
|
||||
_See code: [src/commands/webhook/list.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/webhook/list.ts)_
|
||||
_See code: [src/commands/webhook/list.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/webhook/list.ts)_
|
||||
|
||||
## `eas webhook:update`
|
||||
|
||||
@@ -434,7 +434,7 @@ OPTIONS
|
||||
--url=url Webhook URL
|
||||
```
|
||||
|
||||
_See code: [src/commands/webhook/update.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/webhook/update.ts)_
|
||||
_See code: [src/commands/webhook/update.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/webhook/update.ts)_
|
||||
|
||||
## `eas webhook:view ID`
|
||||
|
||||
@@ -448,5 +448,5 @@ ARGUMENTS
|
||||
ID ID of the webhook to view
|
||||
```
|
||||
|
||||
_See code: [src/commands/webhook/view.ts](https://github.com/expo/eas-cli/blob/v0.18.1/packages/eas-cli/src/commands/webhook/view.ts)_
|
||||
_See code: [src/commands/webhook/view.ts](https://github.com/expo/eas-cli/blob/v0.18.2/packages/eas-cli/src/commands/webhook/view.ts)_
|
||||
<!-- commandsstop -->
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "eas-cli",
|
||||
"description": "EAS command line tool",
|
||||
"version": "0.18.1",
|
||||
"version": "0.18.2",
|
||||
"author": "Expo <[email protected]>",
|
||||
"bin": {
|
||||
"eas": "./bin/run"
|
||||
@@ -14,7 +14,7 @@
|
||||
"@expo/config": "3.3.42",
|
||||
"@expo/config-plugins": "2.0.2",
|
||||
"@expo/eas-build-job": "0.2.37",
|
||||
"@expo/eas-json": "^0.18.0",
|
||||
"@expo/eas-json": "^0.18.2",
|
||||
"@expo/json-file": "8.2.25",
|
||||
"@expo/pkcs12": "0.0.4",
|
||||
"@expo/plist": "0.0.11",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { ArchiveSource, Cache, Ios, Job, Workflow, sanitizeJob } from '@expo/eas-build-job';
|
||||
import { IosGenericBuildProfile, IosManagedBuildProfile } from '@expo/eas-json';
|
||||
import path from 'path';
|
||||
import semver from 'semver';
|
||||
|
||||
import { IosCredentials, TargetCredentials } from '../../credentials/ios/types';
|
||||
import { getUsername } from '../../project/projectUtils';
|
||||
@@ -59,7 +60,7 @@ async function prepareJobCommonAsync(
|
||||
projectArchive,
|
||||
distribution: ctx.buildProfile.distribution,
|
||||
builderEnvironment: {
|
||||
image: ctx.buildProfile.image,
|
||||
image: resolveImage(ctx),
|
||||
node: ctx.buildProfile.node,
|
||||
yarn: ctx.buildProfile.yarn,
|
||||
bundler: ctx.buildProfile.bundler,
|
||||
@@ -78,6 +79,17 @@ async function prepareJobCommonAsync(
|
||||
};
|
||||
}
|
||||
|
||||
function resolveImage(ctx: BuildContext<Platform.IOS>): Ios.BuilderEnvironment['image'] {
|
||||
// see https://linear.app/expo/issue/ENG-1396/make-default-image-dependent-on-sdk-version
|
||||
if (!ctx.buildProfile.image && ctx.commandCtx.exp.sdkVersion) {
|
||||
const majorSdkVersion = semver.major(ctx.commandCtx.exp.sdkVersion);
|
||||
if (majorSdkVersion <= 41) {
|
||||
return 'macos-catalina-10.15-xcode-12.4';
|
||||
}
|
||||
}
|
||||
return ctx.buildProfile.image ?? 'default';
|
||||
}
|
||||
|
||||
function prepareTargetCredentials(targetCredentials: TargetCredentials): Ios.TargetCredentials {
|
||||
return {
|
||||
provisioningProfileBase64: targetCredentials.provisioningProfile,
|
||||
|
||||
@@ -13,7 +13,7 @@ import { endTimer, formatMilliseconds, startTimer } from '../../utils/timer';
|
||||
import vcs from '../../vcs';
|
||||
|
||||
export async function maybeBailOnRepoStatusAsync(): Promise<void> {
|
||||
if (await vcs.hasUncommittedChangesAsync()) {
|
||||
if (!(await vcs.hasUncommittedChangesAsync())) {
|
||||
return;
|
||||
}
|
||||
Log.addNewLineIfNone();
|
||||
|
||||
@@ -40,6 +40,7 @@ export const testPushKey: ApplePushKeyFragment = {
|
||||
keyIdentifier: 'test-key-identifier',
|
||||
appleTeam: { ...testAppleTeamFragment },
|
||||
updatedAt: new Date(),
|
||||
iosAppCredentialsList: [],
|
||||
};
|
||||
|
||||
export const testTargets: Target[] = [{ targetName: 'testapp', bundleIdentifier: 'foo.bar.com' }];
|
||||
|
||||
@@ -2,7 +2,6 @@ import { ApplePushKeyFragment, CommonIosAppCredentialsFragment } from '../../../
|
||||
import Log from '../../../log';
|
||||
import { Context } from '../../context';
|
||||
import { AppLookupParams } from '../api/GraphqlClient';
|
||||
import { AppleTeamMissingError } from '../errors';
|
||||
import { resolveAppleTeamIfAuthenticatedAsync } from './AppleTeamUtils';
|
||||
|
||||
export class AssignPushKey {
|
||||
@@ -14,15 +13,9 @@ export class AssignPushKey {
|
||||
): Promise<CommonIosAppCredentialsFragment> {
|
||||
const appleTeam =
|
||||
(await resolveAppleTeamIfAuthenticatedAsync(ctx, this.app)) ?? pushKey.appleTeam ?? null;
|
||||
if (!appleTeam) {
|
||||
// TODO(quin): make this optional
|
||||
throw new AppleTeamMissingError(
|
||||
'An Apple Team is required to proceed. You must be authenticated to your Apple account'
|
||||
);
|
||||
}
|
||||
const appCredentials = await ctx.ios.createOrGetIosAppCredentialsWithCommonFieldsAsync(
|
||||
this.app,
|
||||
{ appleTeam }
|
||||
{ appleTeam: appleTeam ?? undefined }
|
||||
);
|
||||
const updatedAppCredentials = await ctx.ios.updateIosAppCredentialsAsync(appCredentials, {
|
||||
applePushKeyId: pushKey.id,
|
||||
|
||||
@@ -187,6 +187,12 @@ export function formatPushKey(
|
||||
line += ` ${appleTeam ? `, ${formatAppleTeam(appleTeam)}` : ''}`;
|
||||
line += chalk.gray(`\n Updated: ${fromNow(new Date(updatedAt))} ago,`);
|
||||
|
||||
const apps = pushKey.iosAppCredentialsList.map(appCredentials => appCredentials.app);
|
||||
if (apps.length) {
|
||||
const appFullNames = apps.map(app => app.fullName).join(',');
|
||||
line += chalk.gray(`\n 📲 Used by: ${appFullNames}`);
|
||||
}
|
||||
|
||||
if (validPushKeyIdentifiers?.includes(keyIdentifier)) {
|
||||
line += chalk.gray("\n ✅ Currently valid on Apple's servers.");
|
||||
} else {
|
||||
|
||||
@@ -26,13 +26,16 @@ export class RemovePushKey {
|
||||
throw new Error(`Cannot remove push keys in non-interactive mode`);
|
||||
}
|
||||
|
||||
// TODO(quin): show the projects that rely on this
|
||||
const confirm = await confirmAsync({
|
||||
message: `Removing this push key will disable push notifications for projects that rely on it. Do you want to continue?`,
|
||||
});
|
||||
|
||||
if (!confirm) {
|
||||
return;
|
||||
const apps = this.pushKey.iosAppCredentialsList.map(appCredentials => appCredentials.app);
|
||||
if (apps.length !== 0) {
|
||||
const appFullNames = apps.map(app => app.fullName).join(',');
|
||||
const confirm = await confirmAsync({
|
||||
message: `Removing this push key will disable push notifications for ${appFullNames}. Do you want to continue?`,
|
||||
});
|
||||
if (!confirm) {
|
||||
Log.log('Aborting');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Log.log('Removing Push Key');
|
||||
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
IosAppBuildCredentialsFragment,
|
||||
IosDistributionType,
|
||||
} from '../../../graphql/generated';
|
||||
import { isWildcardBundleIdentifier } from '../../../project/ios/bundleIdentifier';
|
||||
import { Account } from '../../../user/Account';
|
||||
import { DistributionCertificate, PushKey } from '../appstore/Credentials.types';
|
||||
import { AppleTeamMissingError } from '../errors';
|
||||
@@ -138,7 +139,7 @@ export async function createOrGetIosAppCredentialsWithCommonFieldsAsync(
|
||||
{
|
||||
appleTeam,
|
||||
}: {
|
||||
appleTeam: AppleTeamFragment;
|
||||
appleTeam?: AppleTeamFragment;
|
||||
}
|
||||
): Promise<CommonIosAppCredentialsFragment> {
|
||||
const maybeIosAppCredentials = await getIosAppCredentialsWithCommonFieldsAsync(appLookupParams);
|
||||
@@ -147,10 +148,10 @@ export async function createOrGetIosAppCredentialsWithCommonFieldsAsync(
|
||||
}
|
||||
const [app, appleAppIdentifier] = await Promise.all([
|
||||
getAppAsync(appLookupParams),
|
||||
createOrGetExistingAppleAppIdentifierAsync(appLookupParams, appleTeam),
|
||||
createOrGetExistingAppleAppIdentifierAsync(appLookupParams, appleTeam ?? null),
|
||||
]);
|
||||
return await IosAppCredentialsMutation.createIosAppCredentialsAsync(
|
||||
{ appleTeamId: appleTeam.id },
|
||||
{ appleTeamId: appleTeam?.id },
|
||||
app.id,
|
||||
appleAppIdentifier.id
|
||||
);
|
||||
@@ -181,7 +182,7 @@ async function createOrGetExistingIosAppCredentialsWithBuildCredentialsAsync(
|
||||
appleAppIdentifierId,
|
||||
iosDistributionType,
|
||||
}: {
|
||||
appleTeam: AppleTeamFragment;
|
||||
appleTeam?: AppleTeamFragment;
|
||||
appleAppIdentifierId: string;
|
||||
iosDistributionType: IosDistributionType;
|
||||
}
|
||||
@@ -197,10 +198,10 @@ async function createOrGetExistingIosAppCredentialsWithBuildCredentialsAsync(
|
||||
} else {
|
||||
const [app, appleAppIdentifier] = await Promise.all([
|
||||
getAppAsync(appLookupParams),
|
||||
createOrGetExistingAppleAppIdentifierAsync(appLookupParams, appleTeam),
|
||||
createOrGetExistingAppleAppIdentifierAsync(appLookupParams, appleTeam ?? null),
|
||||
]);
|
||||
await IosAppCredentialsMutation.createIosAppCredentialsAsync(
|
||||
{ appleTeamId: appleTeam.id },
|
||||
{ appleTeamId: appleTeam?.id },
|
||||
app.id,
|
||||
appleAppIdentifier.id
|
||||
);
|
||||
@@ -243,8 +244,10 @@ export async function createOrGetExistingAppleAppIdentifierAsync(
|
||||
if (appleAppIdentifier) {
|
||||
return appleAppIdentifier;
|
||||
} else {
|
||||
if (!appleTeam) {
|
||||
throw new AppleTeamMissingError();
|
||||
if (isWildcardBundleIdentifier(bundleIdentifier) && !appleTeam) {
|
||||
throw new AppleTeamMissingError(
|
||||
`An Apple Team is required for wildcard bundle identifier: ${bundleIdentifier}`
|
||||
);
|
||||
}
|
||||
const parentAppleAppIdentifier = parentBundleIdentifier
|
||||
? await createOrGetExistingAppleAppIdentifierAsync(
|
||||
@@ -255,7 +258,7 @@ export async function createOrGetExistingAppleAppIdentifierAsync(
|
||||
return await AppleAppIdentifierMutation.createAppleAppIdentifierAsync(
|
||||
{
|
||||
bundleIdentifier,
|
||||
appleTeamId: appleTeam.id,
|
||||
appleTeamId: appleTeam?.id,
|
||||
parentAppleAppId: parentAppleAppIdentifier?.id,
|
||||
},
|
||||
account.id
|
||||
|
||||
@@ -5159,6 +5159,18 @@ export type ApplePushKeyFragment = (
|
||||
{ __typename?: 'AppleTeam' }
|
||||
& Pick<AppleTeam, 'id'>
|
||||
& AppleTeamFragment
|
||||
)>, iosAppCredentialsList: Array<(
|
||||
{ __typename?: 'IosAppCredentials' }
|
||||
& Pick<IosAppCredentials, 'id'>
|
||||
& { app: (
|
||||
{ __typename?: 'App' }
|
||||
& Pick<App, 'id'>
|
||||
& AppFragment
|
||||
), appleAppIdentifier: (
|
||||
{ __typename?: 'AppleAppIdentifier' }
|
||||
& Pick<AppleAppIdentifier, 'id'>
|
||||
& AppleAppIdentifierFragment
|
||||
) }
|
||||
)> }
|
||||
);
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ import gql from 'graphql-tag';
|
||||
import { graphqlClient, withErrorHandlingAsync } from '../client';
|
||||
import {
|
||||
AppPlatform,
|
||||
Build,
|
||||
BuildFragment,
|
||||
BuildStatus,
|
||||
BuildsByIdQuery,
|
||||
@@ -21,8 +20,6 @@ type Filters = {
|
||||
limit?: number;
|
||||
};
|
||||
|
||||
type PendingBuildQueryResult = Pick<Build, 'id' | 'platform'>;
|
||||
|
||||
export const BuildQuery = {
|
||||
async byIdAsync(
|
||||
buildId: string,
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { print } from 'graphql';
|
||||
import gql from 'graphql-tag';
|
||||
|
||||
import { AppFragmentNode } from '../App';
|
||||
import { AppleAppIdentifierFragmentNode } from './AppleAppIdentifier';
|
||||
import { AppleTeamFragmentNode } from './AppleTeam';
|
||||
|
||||
export const ApplePushKeyFragmentNode = gql`
|
||||
@@ -12,6 +14,19 @@ export const ApplePushKeyFragmentNode = gql`
|
||||
id
|
||||
...AppleTeamFragment
|
||||
}
|
||||
iosAppCredentialsList {
|
||||
id
|
||||
app {
|
||||
id
|
||||
...AppFragment
|
||||
}
|
||||
appleAppIdentifier {
|
||||
id
|
||||
...AppleAppIdentifierFragment
|
||||
}
|
||||
}
|
||||
}
|
||||
${print(AppleTeamFragmentNode)}
|
||||
${print(AppFragmentNode)}
|
||||
${print(AppleAppIdentifierFragmentNode)}
|
||||
`;
|
||||
@@ -8,6 +8,7 @@ import { promptAsync } from '../../../prompts';
|
||||
import {
|
||||
ensureBundleIdentifierIsDefinedForManagedProjectAsync,
|
||||
getBundleIdentifier,
|
||||
isWildcardBundleIdentifier,
|
||||
} from '../bundleIdentifier';
|
||||
|
||||
jest.mock('fs');
|
||||
@@ -141,3 +142,15 @@ describe(ensureBundleIdentifierIsDefinedForManagedProjectAsync, () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe(isWildcardBundleIdentifier, () => {
|
||||
it('classifies wildcard bundle identifiers correctly', async () => {
|
||||
expect(isWildcardBundleIdentifier('doge.doge.*')).toBe(true);
|
||||
expect(isWildcardBundleIdentifier('doge*')).toBe(true);
|
||||
|
||||
expect(isWildcardBundleIdentifier('*')).toBe(false);
|
||||
expect(isWildcardBundleIdentifier('*.doge')).toBe(false);
|
||||
expect(isWildcardBundleIdentifier('doge')).toBe(false);
|
||||
expect(isWildcardBundleIdentifier('doge.doge.doge')).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -130,3 +130,8 @@ function _warnIfBundleIdentifierDefinedInAppConfigForGenericProject(
|
||||
export const warnIfBundleIdentifierDefinedInAppConfigForGenericProject = once(
|
||||
_warnIfBundleIdentifierDefinedInAppConfigForGenericProject
|
||||
);
|
||||
|
||||
export function isWildcardBundleIdentifier(bundleIdentifier: string): boolean {
|
||||
const wildcardRegex = /^[A-Za-z0-9.-]+\*$/;
|
||||
return wildcardRegex.test(bundleIdentifier);
|
||||
}
|
||||
@@ -56,7 +56,7 @@ export default class GitClient extends Client {
|
||||
|
||||
public async hasUncommittedChangesAsync(): Promise<boolean> {
|
||||
const changes = await gitStatusAsync({ showUntracked: true });
|
||||
return changes.length !== 0;
|
||||
return changes.length > 0;
|
||||
}
|
||||
|
||||
public async getRootPathAsync(): Promise<string> {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@expo/eas-json",
|
||||
"description": "A library for interacting with the eas.json",
|
||||
"version": "0.18.0",
|
||||
"version": "0.18.2",
|
||||
"author": "Expo <[email protected]>",
|
||||
"bugs": "https://github.com/expo/eas-cli/issues",
|
||||
"dependencies": {
|
||||
|
||||
@@ -35,7 +35,7 @@ export interface AndroidGenericBuildProfile extends Android.BuilderEnvironment {
|
||||
cache: Cache;
|
||||
}
|
||||
|
||||
export interface IosManagedBuildProfile extends Ios.BuilderEnvironment {
|
||||
export interface IosManagedBuildProfile extends Omit<Ios.BuilderEnvironment, 'image'> {
|
||||
workflow: Workflow.MANAGED;
|
||||
credentialsSource: CredentialsSource;
|
||||
buildType?: Ios.ManagedBuildType;
|
||||
@@ -45,9 +45,10 @@ export interface IosManagedBuildProfile extends Ios.BuilderEnvironment {
|
||||
enterpriseProvisioning?: IosEnterpriseProvisioning;
|
||||
autoIncrement: VersionAutoIncrement;
|
||||
cache: Cache;
|
||||
image?: Ios.BuilderEnvironment['image'];
|
||||
}
|
||||
|
||||
export interface IosGenericBuildProfile extends Ios.BuilderEnvironment {
|
||||
export interface IosGenericBuildProfile extends Omit<Ios.BuilderEnvironment, 'image'> {
|
||||
workflow: Workflow.GENERIC;
|
||||
credentialsSource: CredentialsSource;
|
||||
scheme?: string;
|
||||
@@ -59,6 +60,7 @@ export interface IosGenericBuildProfile extends Ios.BuilderEnvironment {
|
||||
enterpriseProvisioning?: IosEnterpriseProvisioning;
|
||||
autoIncrement: VersionAutoIncrement;
|
||||
cache: Cache;
|
||||
image?: Ios.BuilderEnvironment['image'];
|
||||
}
|
||||
|
||||
export type AndroidBuildProfile = AndroidManagedBuildProfile | AndroidGenericBuildProfile;
|
||||
|
||||
@@ -21,9 +21,7 @@ const AndroidBuilderEnvironmentSchema = Joi.object({
|
||||
});
|
||||
|
||||
const IosBuilderEnvironmentSchema = Joi.object({
|
||||
image: Joi.string()
|
||||
.valid(...Ios.builderBaseImages)
|
||||
.default('default'),
|
||||
image: Joi.string().valid(...Ios.builderBaseImages),
|
||||
node: Joi.string().empty(null).custom(semverSchemaCheck),
|
||||
yarn: Joi.string().empty(null).custom(semverSchemaCheck),
|
||||
bundler: Joi.string().empty(null).custom(semverSchemaCheck),
|
||||
@@ -100,7 +98,7 @@ const IosManagedSchema = Joi.object({
|
||||
cache: CacheSchema.default(),
|
||||
}).concat(IosBuilderEnvironmentSchema);
|
||||
|
||||
const schemaBuildProfileMap: Record<string, Record<string, Joi.Schema>> = {
|
||||
export const schemaBuildProfileMap: Record<string, Record<string, Joi.Schema>> = {
|
||||
android: {
|
||||
generic: AndroidGenericSchema,
|
||||
managed: AndroidManagedSchema,
|
||||
@@ -111,7 +109,7 @@ const schemaBuildProfileMap: Record<string, Record<string, Joi.Schema>> = {
|
||||
},
|
||||
};
|
||||
|
||||
const EasJsonSchema = Joi.object({
|
||||
export const EasJsonSchema = Joi.object({
|
||||
builds: Joi.object({
|
||||
android: Joi.object().pattern(
|
||||
Joi.string(),
|
||||
@@ -127,5 +125,3 @@ const EasJsonSchema = Joi.object({
|
||||
),
|
||||
}),
|
||||
});
|
||||
|
||||
export { EasJsonSchema, schemaBuildProfileMap };
|
||||
@@ -56,7 +56,6 @@ test('minimal valid ios eas.json', async () => {
|
||||
autoIncrement: false,
|
||||
env: {},
|
||||
cache: { disabled: false, cacheDefaultPaths: true, customPaths: [] },
|
||||
image: 'default',
|
||||
},
|
||||
},
|
||||
}).toEqual(easJson);
|
||||
@@ -94,7 +93,6 @@ test('minimal valid eas.json for both platforms', async () => {
|
||||
autoIncrement: false,
|
||||
env: {},
|
||||
cache: { disabled: false, cacheDefaultPaths: true, customPaths: [] },
|
||||
image: 'default',
|
||||
},
|
||||
},
|
||||
}).toEqual(easJson);
|
||||
@@ -165,7 +163,6 @@ test('valid eas.json for development client builds', async () => {
|
||||
distribution: 'store',
|
||||
autoIncrement: false,
|
||||
env: {},
|
||||
image: 'default',
|
||||
cache: { disabled: false, cacheDefaultPaths: true, customPaths: [] },
|
||||
buildType: 'development-client',
|
||||
},
|
||||
|
||||
@@ -1924,13 +1924,6 @@
|
||||
dependencies:
|
||||
"@hapi/joi" "^17.1.1"
|
||||
|
||||
"@expo/[email protected]":
|
||||
version "0.2.37"
|
||||
resolved "https://registry.yarnpkg.com/@expo/eas-build-job/-/eas-build-job-0.2.37.tgz#fd6cb911e33774239d1ab7662c0ccc8efa22f7a2"
|
||||
integrity sha512-B9gahwTTYs0pWQP2HnfYWcbsqmUIAdnr+iwounVqpcxHhERxGJby2JEw+Vxtl2+VMARM4w9RLgNduP5Vk/zeQw==
|
||||
dependencies:
|
||||
"@hapi/joi" "^17.1.1"
|
||||
|
||||
"@expo/[email protected]":
|
||||
version "0.3.14"
|
||||
resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.3.14.tgz#eea0d59c5845e8b19504011c20afd837c5d044c5"
|
||||
|
||||
Reference in new issue
Block a user