@ship-et/buildatlas-cli 0.14.0 → 0.14.2-beta.2
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.
- package/dist/client.d.ts +9 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +72 -1
- package/dist/client.js.map +1 -1
- package/dist/client.test.js +42 -1
- package/dist/client.test.js.map +1 -1
- package/dist/commands/build.js +2 -2
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/env.d.ts +1 -0
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +65 -42
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/migrate/build-numbers.d.ts +2 -1
- package/dist/commands/migrate/build-numbers.d.ts.map +1 -1
- package/dist/commands/migrate/build-numbers.js +26 -6
- package/dist/commands/migrate/build-numbers.js.map +1 -1
- package/dist/commands/migrate/credentials.d.ts +17 -15
- package/dist/commands/migrate/credentials.d.ts.map +1 -1
- package/dist/commands/migrate/credentials.js +110 -45
- package/dist/commands/migrate/credentials.js.map +1 -1
- package/dist/commands/migrate/eas-client.d.ts +57 -5
- package/dist/commands/migrate/eas-client.d.ts.map +1 -1
- package/dist/commands/migrate/eas-client.js +112 -16
- package/dist/commands/migrate/eas-client.js.map +1 -1
- package/dist/commands/migrate/env.d.ts +39 -0
- package/dist/commands/migrate/env.d.ts.map +1 -0
- package/dist/commands/migrate/env.js +138 -0
- package/dist/commands/migrate/env.js.map +1 -0
- package/dist/commands/migrate/env.test.d.ts +2 -0
- package/dist/commands/migrate/env.test.d.ts.map +1 -0
- package/dist/commands/migrate/env.test.js +41 -0
- package/dist/commands/migrate/env.test.js.map +1 -0
- package/dist/commands/migrate/index.d.ts.map +1 -1
- package/dist/commands/migrate/index.js +146 -58
- package/dist/commands/migrate/index.js.map +1 -1
- package/dist/commands/migrate/report.d.ts +26 -0
- package/dist/commands/migrate/report.d.ts.map +1 -0
- package/dist/commands/migrate/report.js +84 -0
- package/dist/commands/migrate/report.js.map +1 -0
- package/dist/commands/submit.d.ts +6 -2
- package/dist/commands/submit.d.ts.map +1 -1
- package/dist/commands/submit.js +19 -9
- package/dist/commands/submit.js.map +1 -1
- package/dist/prompt.d.ts +16 -0
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +143 -0
- package/dist/prompt.js.map +1 -1
- package/dist/spinner.d.ts.map +1 -1
- package/dist/spinner.js +3 -1
- package/dist/spinner.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eas-client.js","sourceRoot":"","sources":["../../../src/commands/migrate/eas-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,gBAAgB,GAAG,8BAA8B,CAAC;AAiBxD,KAAK,UAAU,WAAW,CACxB,IAAc,EACd,KAAa,EACb,SAAmC;IAEnC,IAAI,GAAa,CAAC;IAClB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO;oBACvB,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,EAAE;oBAC3C,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC3C,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YAC1C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,
|
|
1
|
+
{"version":3,"file":"eas-client.js","sourceRoot":"","sources":["../../../src/commands/migrate/eas-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { AuthedConfig } from './auth.ts';
|
|
2
|
+
import { type EasEnvVar, type ExpoAuth } from './eas-client.ts';
|
|
3
|
+
import type { ProjectReport } from './report.ts';
|
|
4
|
+
/** One BuildAtlas env row to create: a value and the profiles it applies to. */
|
|
5
|
+
export interface PlannedEnvRow {
|
|
6
|
+
value: string;
|
|
7
|
+
/** Empty means every profile. */
|
|
8
|
+
profiles: string[];
|
|
9
|
+
sensitive: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Splits one EAS variable into the BuildAtlas rows that reproduce it.
|
|
13
|
+
*
|
|
14
|
+
* EAS keys a value by environment; BuildAtlas lets one key hold several rows so long
|
|
15
|
+
* as their profile sets do not overlap. So each distinct value becomes its own row,
|
|
16
|
+
* scoped to the environments that use it — production's API URL and preview's both
|
|
17
|
+
* arrive, instead of only production's. A single value used by every environment in
|
|
18
|
+
* `allEnvironments` is stored once, for all profiles.
|
|
19
|
+
*/
|
|
20
|
+
export declare function planEnvRows(readable: EasEnvVar[], allEnvironments: ReadonlySet<string>): PlannedEnvRow[];
|
|
21
|
+
/**
|
|
22
|
+
* Copies the app's EAS environment variables into BuildAtlas's env store.
|
|
23
|
+
*
|
|
24
|
+
* Environment names are carried over as profile names, which is what eas.json's
|
|
25
|
+
* default profiles are called. A variable whose value differs per environment
|
|
26
|
+
* becomes one row per value, each scoped to its environments (see `planEnvRows`).
|
|
27
|
+
*
|
|
28
|
+
* Never migrated, always reported:
|
|
29
|
+
* - `SECRET` variables — EAS does not return their values to anyone;
|
|
30
|
+
* - file variables (a `google-services.json` uploaded with `eas env:create
|
|
31
|
+
* --type file`) — the build sets those to a path on EAS's own machine, which
|
|
32
|
+
* has no BuildAtlas equivalent; commit the file or set it up by hand.
|
|
33
|
+
*
|
|
34
|
+
* Add-only, like `buildatlas env pull`: a row already set in BuildAtlas was put
|
|
35
|
+
* there deliberately and is left alone, so a value is skipped when its profiles
|
|
36
|
+
* overlap a row that exists for the same key.
|
|
37
|
+
*/
|
|
38
|
+
export declare function migrateEnv(config: AuthedConfig, slug: string, auth: ExpoAuth, appId: string, report: ProjectReport): Promise<void>;
|
|
39
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/env.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAiB,MAAM,iBAAiB,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQjD,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,SAAS,EAAE,EACrB,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GACnC,aAAa,EAAE,CAmBjB;AAQD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CA2Ff"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { apiRequest } from '../../client.js';
|
|
2
|
+
import { getEasEnvVars } from './eas-client.js';
|
|
3
|
+
import { withRetry } from './retry.js';
|
|
4
|
+
/**
|
|
5
|
+
* Splits one EAS variable into the BuildAtlas rows that reproduce it.
|
|
6
|
+
*
|
|
7
|
+
* EAS keys a value by environment; BuildAtlas lets one key hold several rows so long
|
|
8
|
+
* as their profile sets do not overlap. So each distinct value becomes its own row,
|
|
9
|
+
* scoped to the environments that use it — production's API URL and preview's both
|
|
10
|
+
* arrive, instead of only production's. A single value used by every environment in
|
|
11
|
+
* `allEnvironments` is stored once, for all profiles.
|
|
12
|
+
*/
|
|
13
|
+
export function planEnvRows(readable, allEnvironments) {
|
|
14
|
+
const groups = new Map();
|
|
15
|
+
for (const e of readable) {
|
|
16
|
+
const group = groups.get(e.value) ?? { environments: new Set(), sensitive: false };
|
|
17
|
+
for (const env of e.environments)
|
|
18
|
+
group.environments.add(env);
|
|
19
|
+
group.sensitive ||= e.visibility !== 'PUBLIC';
|
|
20
|
+
groups.set(e.value, group);
|
|
21
|
+
}
|
|
22
|
+
const rows = [...groups].map(([value, g]) => ({
|
|
23
|
+
value,
|
|
24
|
+
profiles: [...g.environments].sort(),
|
|
25
|
+
sensitive: g.sensitive,
|
|
26
|
+
}));
|
|
27
|
+
const only = rows.length === 1 ? rows[0] : undefined;
|
|
28
|
+
if (only && allEnvironments.size && [...allEnvironments].every((env) => only.profiles.includes(env))) {
|
|
29
|
+
return [{ ...only, profiles: [] }];
|
|
30
|
+
}
|
|
31
|
+
return rows.sort((a, b) => a.profiles.join(',').localeCompare(b.profiles.join(',')));
|
|
32
|
+
}
|
|
33
|
+
/** An empty profile list means every profile, so it overlaps anything. */
|
|
34
|
+
function profilesOverlap(a, b) {
|
|
35
|
+
if (!a.length || !b.length)
|
|
36
|
+
return true;
|
|
37
|
+
return a.some((p) => b.includes(p));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Copies the app's EAS environment variables into BuildAtlas's env store.
|
|
41
|
+
*
|
|
42
|
+
* Environment names are carried over as profile names, which is what eas.json's
|
|
43
|
+
* default profiles are called. A variable whose value differs per environment
|
|
44
|
+
* becomes one row per value, each scoped to its environments (see `planEnvRows`).
|
|
45
|
+
*
|
|
46
|
+
* Never migrated, always reported:
|
|
47
|
+
* - `SECRET` variables — EAS does not return their values to anyone;
|
|
48
|
+
* - file variables (a `google-services.json` uploaded with `eas env:create
|
|
49
|
+
* --type file`) — the build sets those to a path on EAS's own machine, which
|
|
50
|
+
* has no BuildAtlas equivalent; commit the file or set it up by hand.
|
|
51
|
+
*
|
|
52
|
+
* Add-only, like `buildatlas env pull`: a row already set in BuildAtlas was put
|
|
53
|
+
* there deliberately and is left alone, so a value is skipped when its profiles
|
|
54
|
+
* overlap a row that exists for the same key.
|
|
55
|
+
*/
|
|
56
|
+
export async function migrateEnv(config, slug, auth, appId, report) {
|
|
57
|
+
const vars = await withRetry('fetching EAS environment variables', () => getEasEnvVars(auth, appId));
|
|
58
|
+
if (!vars) {
|
|
59
|
+
report.failed('environment variables', 'could not read them from EAS — rerun migrate to try again');
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (vars.length === 0) {
|
|
63
|
+
report.skipped('environment variables', 'none on EAS');
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const existing = await withRetry('checking environment variables already set', () => apiRequest(config, `/projects/${slug}/env`, { token: config.token }));
|
|
67
|
+
const existingByKey = new Map();
|
|
68
|
+
for (const row of existing?.env ?? []) {
|
|
69
|
+
existingByKey.set(row.key, [...(existingByKey.get(row.key) ?? []), row.profiles ?? []]);
|
|
70
|
+
}
|
|
71
|
+
// Every environment this app uses anywhere: a variable present in all of them
|
|
72
|
+
// applies to every profile, which BuildAtlas spells as an empty list.
|
|
73
|
+
const allEnvironments = new Set(vars.flatMap((v) => v.environments));
|
|
74
|
+
const byName = new Map();
|
|
75
|
+
for (const v of vars)
|
|
76
|
+
byName.set(v.name, [...(byName.get(v.name) ?? []), v]);
|
|
77
|
+
for (const [name, entries] of [...byName].sort(([a], [b]) => a.localeCompare(b))) {
|
|
78
|
+
const stepLabel = `env ${name}`;
|
|
79
|
+
const file = entries.find((e) => e.type === 'FILE_BASE64');
|
|
80
|
+
if (file) {
|
|
81
|
+
report.warn(stepLabel, `file variable${file.fileName ? ` (${file.fileName})` : ''} — not migrated; commit the file to the repo instead`);
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const readable = entries.filter((e) => e.value !== null);
|
|
85
|
+
const unreadable = [...new Set(entries.filter((e) => e.value === null).flatMap((e) => e.environments))];
|
|
86
|
+
const setEnvHint = `set it with \`buildatlas credentials set-env ${name} --project ${slug}\``;
|
|
87
|
+
if (readable.length === 0) {
|
|
88
|
+
report.warn(stepLabel, `secret on EAS, value not readable — ${setEnvHint}`);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
// With a SECRET value in some environment, "all profiles" would wrongly cover that
|
|
92
|
+
// environment too, so the readable values keep their explicit profiles.
|
|
93
|
+
const plan = planEnvRows(readable, unreadable.length ? new Set() : allEnvironments);
|
|
94
|
+
const already = existingByKey.get(name) ?? [];
|
|
95
|
+
const saved = [];
|
|
96
|
+
const kept = [];
|
|
97
|
+
const failed = [];
|
|
98
|
+
for (const row of plan) {
|
|
99
|
+
const scope = row.profiles.length ? row.profiles.join(', ') : 'all profiles';
|
|
100
|
+
if (already.some((profiles) => profilesOverlap(profiles, row.profiles))) {
|
|
101
|
+
kept.push(scope);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const ok = await withRetry(`setting ${name} (${scope})`, () => apiRequest(config, `/projects/${slug}/env`, {
|
|
105
|
+
method: 'PUT',
|
|
106
|
+
token: config.token,
|
|
107
|
+
body: JSON.stringify({
|
|
108
|
+
key: name,
|
|
109
|
+
value: row.value,
|
|
110
|
+
profiles: row.profiles,
|
|
111
|
+
// PUBLIC stays readable in the dashboard; anything EAS hid stays hidden.
|
|
112
|
+
visibility: row.sensitive ? 'secret' : 'plaintext',
|
|
113
|
+
}),
|
|
114
|
+
}));
|
|
115
|
+
if (ok === undefined)
|
|
116
|
+
failed.push(scope);
|
|
117
|
+
else
|
|
118
|
+
saved.push(scope);
|
|
119
|
+
}
|
|
120
|
+
const detail = [
|
|
121
|
+
saved.length ? `profiles: ${saved.join(' | ')}` : '',
|
|
122
|
+
kept.length ? `already set in BuildAtlas for ${kept.join(' | ')}` : '',
|
|
123
|
+
failed.length ? `not saved for ${failed.join(' | ')}` : '',
|
|
124
|
+
unreadable.length ? `secret on EAS for ${unreadable.join(', ')} — ${setEnvHint}` : '',
|
|
125
|
+
]
|
|
126
|
+
.filter(Boolean)
|
|
127
|
+
.join('; ');
|
|
128
|
+
if (failed.length)
|
|
129
|
+
report.failed(stepLabel, detail);
|
|
130
|
+
else if (unreadable.length)
|
|
131
|
+
report.warn(stepLabel, detail);
|
|
132
|
+
else if (!saved.length)
|
|
133
|
+
report.skipped(stepLabel, detail);
|
|
134
|
+
else
|
|
135
|
+
report.done(stepLabel, detail);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/commands/migrate/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.test.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/env.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { describe, it } from 'node:test';
|
|
3
|
+
import { planEnvRows } from './env.js';
|
|
4
|
+
const v = (value, environments, visibility = 'PUBLIC') => ({
|
|
5
|
+
name: 'EXPO_PUBLIC_API_BASE_URL',
|
|
6
|
+
value,
|
|
7
|
+
environments,
|
|
8
|
+
visibility,
|
|
9
|
+
type: 'STRING',
|
|
10
|
+
fileName: null,
|
|
11
|
+
});
|
|
12
|
+
const ALL = new Set(['development', 'preview', 'production']);
|
|
13
|
+
describe('splitting an EAS variable into BuildAtlas rows', () => {
|
|
14
|
+
it('stores one row for every profile when every environment shares the value', () => {
|
|
15
|
+
assert.deepEqual(planEnvRows([v('https://api', ['development', 'preview', 'production'])], ALL), [
|
|
16
|
+
{ value: 'https://api', profiles: [], sensitive: false },
|
|
17
|
+
]);
|
|
18
|
+
});
|
|
19
|
+
it('keeps a value per profile when environments differ, instead of dropping preview', () => {
|
|
20
|
+
assert.deepEqual(planEnvRows([v('https://api', ['production']), v('https://staging-api', ['preview', 'development'])], ALL), [
|
|
21
|
+
{ value: 'https://staging-api', profiles: ['development', 'preview'], sensitive: false },
|
|
22
|
+
{ value: 'https://api', profiles: ['production'], sensitive: false },
|
|
23
|
+
]);
|
|
24
|
+
});
|
|
25
|
+
it('scopes a single value to its environments when it does not cover them all', () => {
|
|
26
|
+
assert.deepEqual(planEnvRows([v('x', ['production'])], ALL), [
|
|
27
|
+
{ value: 'x', profiles: ['production'], sensitive: false },
|
|
28
|
+
]);
|
|
29
|
+
});
|
|
30
|
+
it('marks a row secret when any environment sharing it was not PUBLIC', () => {
|
|
31
|
+
const [row] = planEnvRows([v('k', ['production'], 'SENSITIVE'), v('k', ['preview'])], new Set(['production', 'preview']));
|
|
32
|
+
assert.equal(row.sensitive, true);
|
|
33
|
+
assert.deepEqual(row.profiles, []);
|
|
34
|
+
});
|
|
35
|
+
it('never widens to every profile when told no environment set is complete', () => {
|
|
36
|
+
assert.deepEqual(planEnvRows([v('x', ['production', 'preview'])], new Set()), [
|
|
37
|
+
{ value: 'x', profiles: ['preview', 'production'], sensitive: false },
|
|
38
|
+
]);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=env.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.test.js","sourceRoot":"","sources":["../../../src/commands/migrate/env.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyE7D"}
|
|
@@ -8,14 +8,16 @@ import { requireAuth } from './auth.js';
|
|
|
8
8
|
import { continueBuildNumbers } from './build-numbers.js';
|
|
9
9
|
import { migrateCredentials } from './credentials.js';
|
|
10
10
|
import { getAppIdentifiers, listExpoApps } from './eas-client.js';
|
|
11
|
+
import { migrateEnv } from './env.js';
|
|
11
12
|
import { getExpoSession } from './expo-session.js';
|
|
12
13
|
import { offerToLinkProject } from './link-project.js';
|
|
14
|
+
import { printSummary, ProjectReport } from './report.js';
|
|
13
15
|
export function registerMigrateCommand(program) {
|
|
14
16
|
program
|
|
15
17
|
.command('migrate')
|
|
16
|
-
.description('Pick
|
|
18
|
+
.description('Pick one or more EAS projects and create the matching BuildAtlas projects')
|
|
17
19
|
.option('--expo-token <token>', 'Expo access token. Skips using an `eas login` session.')
|
|
18
|
-
.option('--slug <slug>', 'BuildAtlas slug to use (default: the EAS project slug)')
|
|
20
|
+
.option('--slug <slug>', 'BuildAtlas slug to use (default: the EAS project slug; one project only)')
|
|
19
21
|
.option('--dir <path>', 'Project directory to read app.json / app.config from', process.cwd())
|
|
20
22
|
.action(async (opts) => {
|
|
21
23
|
await run(async () => {
|
|
@@ -39,70 +41,156 @@ export function registerMigrateCommand(program) {
|
|
|
39
41
|
const apps = await withSpinner('fetching EAS projects', () => listExpoApps(auth));
|
|
40
42
|
if (apps.length === 0)
|
|
41
43
|
throw new Error('That account has no EAS projects.');
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const existing = await apiRequest(config, `/projects/${slug}`, {
|
|
51
|
-
token: config.token,
|
|
52
|
-
}).catch((err) => {
|
|
53
|
-
if (err instanceof AtlasApiError && err.code === 'not_found')
|
|
54
|
-
return undefined;
|
|
55
|
-
throw err;
|
|
56
|
-
});
|
|
57
|
-
// Either way, end up with a project to migrate credentials into. A project
|
|
58
|
-
// that already exists is not a reason to stop — it is the common case for
|
|
59
|
-
// someone re-running `migrate` after rotating a certificate on EAS, and
|
|
60
|
-
// stopping here used to skip credentials entirely.
|
|
61
|
-
let project;
|
|
62
|
-
if (existing) {
|
|
63
|
-
console.log(`${pc.dim('already exists —')} ${pc.bold(existing.project.slug)}`);
|
|
64
|
-
project = existing.project;
|
|
44
|
+
// Only to label the picker; a failure here just means no labels.
|
|
45
|
+
const known = await apiRequest(config, '/projects', { token: config.token })
|
|
46
|
+
.then((r) => r.projects)
|
|
47
|
+
.catch(() => []);
|
|
48
|
+
const detected = detectApp(apps, local);
|
|
49
|
+
const chosen = await pickApps(apps, detected, known);
|
|
50
|
+
if (opts.slug && chosen.length > 1) {
|
|
51
|
+
throw new Error('--slug names one project, but several were selected. Drop --slug or pick one.');
|
|
65
52
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
53
|
+
const reports = [];
|
|
54
|
+
for (const [i, app] of chosen.entries()) {
|
|
55
|
+
console.log(`\n${pc.cyan(`[${i + 1}/${chosen.length}]`)} ${pc.bold(app.fullName)}`);
|
|
56
|
+
const report = new ProjectReport(app.fullName);
|
|
57
|
+
reports.push(report);
|
|
58
|
+
// The local checkout only describes the app it belongs to — its bundle id
|
|
59
|
+
// must never be stamped onto some other project picked in the same run.
|
|
60
|
+
const isLocal = app === detected || (chosen.length === 1 && !detected);
|
|
61
|
+
try {
|
|
62
|
+
await migrateApp({
|
|
63
|
+
config,
|
|
64
|
+
auth,
|
|
65
|
+
app,
|
|
66
|
+
slug: opts.slug ?? app.slug,
|
|
67
|
+
local: isLocal ? local : undefined,
|
|
68
|
+
dir: isLocal ? dir : undefined,
|
|
69
|
+
report,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
// One project failing must not stop the others; the summary says which.
|
|
74
|
+
report.aborted =
|
|
75
|
+
err instanceof AtlasApiError ? `${err.message} (${err.code})` : err.message;
|
|
76
|
+
console.log(` ${pc.red('✖')} ${pc.red(report.aborted)}`);
|
|
77
|
+
}
|
|
79
78
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
console.log(pc.dim(` Bundle id / package name were not both found in ${dir} or on EAS — fill in what's ` +
|
|
84
|
-
`missing with \`buildatlas projects set --project ${project.slug}\`.`));
|
|
85
|
-
}
|
|
86
|
-
await offerToLinkProject(dir, project.slug);
|
|
79
|
+
printSummary(reports);
|
|
80
|
+
if (reports.some((r) => r.status === 'failed'))
|
|
81
|
+
process.exitCode = 1;
|
|
87
82
|
});
|
|
88
83
|
});
|
|
89
84
|
}
|
|
85
|
+
async function migrateApp(params) {
|
|
86
|
+
const { config, auth, app, slug, local, dir, report } = params;
|
|
87
|
+
// Local app.json wins when it disagrees — it's the current source of truth for
|
|
88
|
+
// this checkout — but EAS's own credentials fill in whatever local didn't have,
|
|
89
|
+
// so migrate doesn't need to run from inside a fully-configured project dir.
|
|
90
|
+
const remote = await withSpinner('reading EAS app identifiers', () => getAppIdentifiers(auth, app.id)).catch(() => ({}));
|
|
91
|
+
const bundleIdentifier = local?.bundleIdentifier ?? remote.bundleIdentifier;
|
|
92
|
+
const androidPackage = local?.androidPackage ?? remote.androidPackage;
|
|
93
|
+
const existing = await apiRequest(config, `/projects/${slug}`, {
|
|
94
|
+
token: config.token,
|
|
95
|
+
}).catch((err) => {
|
|
96
|
+
if (err instanceof AtlasApiError && err.code === 'not_found')
|
|
97
|
+
return undefined;
|
|
98
|
+
throw err;
|
|
99
|
+
});
|
|
100
|
+
// Either way, end up with a project to migrate credentials into. A project
|
|
101
|
+
// that already exists is not a reason to stop — it is the common case for
|
|
102
|
+
// someone re-running `migrate` after rotating a certificate on EAS, and
|
|
103
|
+
// stopping here used to skip credentials entirely.
|
|
104
|
+
// Slugs are only unique within an Expo account: `@a/app` and `@b/app` both
|
|
105
|
+
// want "app". Topping up a project that was migrated from a *different* EAS
|
|
106
|
+
// project would sign this app with the other one's certificates.
|
|
107
|
+
if (existing?.project.easProjectId && existing.project.easProjectId !== app.id) {
|
|
108
|
+
throw new Error(`BuildAtlas project "${slug}" was migrated from a different EAS project. ` +
|
|
109
|
+
`Migrate ${app.fullName} on its own with \`--slug <another-slug>\`.`);
|
|
110
|
+
}
|
|
111
|
+
let project;
|
|
112
|
+
if (existing) {
|
|
113
|
+
project = existing.project;
|
|
114
|
+
report.skipped(`project ${project.slug}`, 'already exists');
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
project = (await withSpinner('creating BuildAtlas project', () => apiRequest(config, '/projects', {
|
|
118
|
+
method: 'POST',
|
|
119
|
+
token: config.token,
|
|
120
|
+
body: JSON.stringify({
|
|
121
|
+
slug,
|
|
122
|
+
name: app.name,
|
|
123
|
+
easProjectId: app.id,
|
|
124
|
+
bundleIdentifier,
|
|
125
|
+
androidPackage,
|
|
126
|
+
}),
|
|
127
|
+
}))).project;
|
|
128
|
+
report.done(`project ${project.slug}`, 'created');
|
|
129
|
+
}
|
|
130
|
+
if (existing && project.bundleIdentifier && project.androidPackage) {
|
|
131
|
+
report.skipped('identifiers', `already set: ${project.bundleIdentifier} · ${project.androidPackage}`);
|
|
132
|
+
}
|
|
133
|
+
else if (existing && (bundleIdentifier || androidPackage)) {
|
|
134
|
+
// Found them, but this project was created without them and migrate does not
|
|
135
|
+
// rewrite an existing project's settings.
|
|
136
|
+
report.warn('identifiers', `project is missing some; found ${[bundleIdentifier, androidPackage].filter(Boolean).join(' · ')} — ` +
|
|
137
|
+
`set with \`buildatlas projects set --project ${project.slug}\``);
|
|
138
|
+
}
|
|
139
|
+
else if (bundleIdentifier && androidPackage) {
|
|
140
|
+
report.done('identifiers', `${bundleIdentifier} · ${androidPackage}`);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
report.warn('identifiers', `${bundleIdentifier ? '' : 'iOS bundle id'}${!bundleIdentifier && !androidPackage ? ' and ' : ''}` +
|
|
144
|
+
`${androidPackage ? '' : 'Android package'} not found locally or on EAS — ` +
|
|
145
|
+
`set with \`buildatlas projects set --project ${project.slug}\``);
|
|
146
|
+
}
|
|
147
|
+
await continueBuildNumbers(config, project.slug, auth, app.id, { bundleIdentifier, androidPackage }, report);
|
|
148
|
+
await migrateCredentials(config, project.slug, auth, app.id, report);
|
|
149
|
+
await migrateEnv(config, project.slug, auth, app.id, report);
|
|
150
|
+
if (dir)
|
|
151
|
+
await offerToLinkProject(dir, project.slug);
|
|
152
|
+
}
|
|
90
153
|
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
154
|
+
* The app this directory already points at — matched by EAS project id first,
|
|
155
|
+
* since a slug is only unique within an account and `app.json` does not say
|
|
156
|
+
* which account it belongs to.
|
|
94
157
|
*/
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
(local?.slug && apps.find((a) => a.slug === local.slug))
|
|
98
|
-
|
|
158
|
+
function detectApp(apps, local) {
|
|
159
|
+
return ((local?.easProjectId && apps.find((a) => a.id === local.easProjectId)) ||
|
|
160
|
+
(local?.slug && apps.find((a) => a.slug === local.slug)) ||
|
|
161
|
+
undefined);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Checkbox list, with the app this directory belongs to ticked already. Without
|
|
165
|
+
* a terminal to ask in (CI), the detected app is the whole answer, as it was
|
|
166
|
+
* before more than one could be picked.
|
|
167
|
+
*/
|
|
168
|
+
async function pickApps(apps, detected, known) {
|
|
169
|
+
// Picking one of these again is fine — it reruns and tops up whatever is
|
|
170
|
+
// missing — but it should not look like a fresh migration.
|
|
171
|
+
const hintFor = (a) => {
|
|
172
|
+
if (known.some((p) => p.easProjectId === a.id))
|
|
173
|
+
return `${a.name} · already in BuildAtlas`;
|
|
174
|
+
const taken = known.find((p) => p.slug === a.slug);
|
|
175
|
+
// A project made by hand has no EAS id; migrate fills that one in.
|
|
176
|
+
if (taken && !taken.easProjectId)
|
|
177
|
+
return `${a.name} · already in BuildAtlas`;
|
|
178
|
+
if (taken)
|
|
179
|
+
return `${a.name} · slug taken by another app, needs --slug`;
|
|
180
|
+
return a.name;
|
|
181
|
+
};
|
|
182
|
+
if (detected)
|
|
99
183
|
console.log(pc.dim(` detected ${detected.fullName} from app config`));
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
184
|
+
if (detected && !process.stdin.isTTY)
|
|
185
|
+
return [detected];
|
|
186
|
+
if (apps.length === 1)
|
|
187
|
+
return apps;
|
|
188
|
+
const chosen = await withPrompter((p) => p.multiSelect('Which EAS projects?', apps.map((a) => ({
|
|
189
|
+
value: a.fullName,
|
|
190
|
+
label: a.fullName,
|
|
191
|
+
hint: hintFor(a),
|
|
192
|
+
})), { initial: detected ? [detected.fullName] : [] }));
|
|
193
|
+
return apps.filter((a) => chosen.includes(a.fullName));
|
|
106
194
|
}
|
|
107
195
|
async function run(fn) {
|
|
108
196
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/migrate/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/migrate/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type StepStatus = 'done' | 'skipped' | 'warn' | 'failed';
|
|
2
|
+
export interface Step {
|
|
3
|
+
status: StepStatus;
|
|
4
|
+
label: string;
|
|
5
|
+
detail?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* One migrated project's steps, printed as they happen and kept for the
|
|
9
|
+
* summary at the end — with several projects in one run, what happened to the
|
|
10
|
+
* first has long scrolled away by the time the last one finishes.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ProjectReport {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly steps: Step[];
|
|
15
|
+
/** Set when the project stopped part-way; later steps never ran. */
|
|
16
|
+
aborted: string | undefined;
|
|
17
|
+
constructor(name: string);
|
|
18
|
+
private add;
|
|
19
|
+
done(label: string, detail?: string): void;
|
|
20
|
+
skipped(label: string, detail?: string): void;
|
|
21
|
+
warn(label: string, detail?: string): void;
|
|
22
|
+
failed(label: string, detail?: string): void;
|
|
23
|
+
get status(): StepStatus;
|
|
24
|
+
}
|
|
25
|
+
export declare function printSummary(reports: ProjectReport[]): void;
|
|
26
|
+
//# sourceMappingURL=report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/report.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAeD;;;;GAIG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAM;IAC5B,oEAAoE;IACpE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,YAAY,IAAI,EAAE,MAAM,EAEvB;IAED,OAAO,CAAC,GAAG;IAMX,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAEzC;IAED,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAE5C;IAED,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAEzC;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAE3C;IAED,IAAI,MAAM,IAAI,UAAU,CAIvB;CACF;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAkC3D"}
|