Direct store API calls in a project's scripts: androidpublisher.googleapis.com, the googleapis androidpublisher client, api.appstoreconnect.apple.com, altool / Transporter in CI files and scripts; scan rule direct-store-api, check and release status warnings with file:line and the storebound command; storebound's own checkout skipped; test, pitfall 97
This commit is contained in:
parent
4f993a906a
commit
4fcee60ba6
7 changed files with 72 additions and 10 deletions
|
|
@ -21,7 +21,7 @@ import { laneOf, laneText, type PlanStep, releasePlan, type ReleasePlan, sameVer
|
|||
import type { Finding } from './lib/validate-rules';
|
||||
import { findWorkspace, loadWorkspace, resolveApps, selectApps } from './lib/workspace';
|
||||
import { appDir, appEnv, workspaceApps } from './workspace';
|
||||
import { FASTLANE_FIX, findFastlaneTraces, traceLine } from './lib/fastlane-traces';
|
||||
import { findFastlaneTraces, traceMessage } from './lib/fastlane-traces';
|
||||
|
||||
interface Target { name: string; dir: string; virtual: boolean; env: Record<string, string>; problems: string[] }
|
||||
|
||||
|
|
@ -95,7 +95,7 @@ async function status(args: Args): Promise<void> {
|
|||
const read = await pool(list, concurrency, async t => ({ t, s: await readLive(t) }));
|
||||
if (args.has('json')) {
|
||||
printJson({ apps: read.map(({ t, s }) => ({
|
||||
app: t.name, folder: t.virtual ? null : t.dir, errors: [...t.problems, ...s.errors], warnings: [...(s.warnings ?? []), ...(t.virtual ? [] : findFastlaneTraces(t.dir).map(f => `${traceLine(f)} · ${FASTLANE_FIX}`))], storeErrors: s.storeErrors,
|
||||
app: t.name, folder: t.virtual ? null : t.dir, errors: [...t.problems, ...s.errors], warnings: [...(s.warnings ?? []), ...(t.virtual ? [] : findFastlaneTraces(t.dir).map(traceMessage))], storeErrors: s.storeErrors,
|
||||
trains: trainsOf(s, all).map(({ which, train }) => ({ which, version: train.version, ios: train.ios, android: train.android,
|
||||
lanes: { ios: laneOf('ios', train.ios), android: laneOf('android', train.android) } })),
|
||||
})), at: new Date().toISOString() });
|
||||
|
|
@ -107,7 +107,7 @@ async function status(args: Args): Promise<void> {
|
|||
if (!trains.length) rows.push([t.name, '', '', s.errors[0] ? `error: ${s.errors[0]}` : unread ? 'not read (see the warnings)' : 'no version on either store yet', '']);
|
||||
for (const { which, train } of trains) rows.push([t.name, train.version, which === 'other' ? '' : which, cell('ios', train, s), cell('android', train, s)]);
|
||||
for (const w of s.warnings ?? []) warn('release', `${t.name}: ${w}`);
|
||||
if (!t.virtual) for (const f of findFastlaneTraces(t.dir)) warn('release', `${t.name}: ${traceLine(f)} · ${FASTLANE_FIX}`);
|
||||
if (!t.virtual) for (const f of findFastlaneTraces(t.dir)) warn('release', `${t.name}: ${traceMessage(f)}`);
|
||||
for (const p of [...t.problems, ...s.errors.slice(trains.length ? 0 : 1), ...Object.entries(s.storeErrors).map(([k, v]) => `${k}: ${v}`)]) warn('release', `${t.name}: ${p}`);
|
||||
}
|
||||
console.log(textTable(['app', 'version', 'train', 'App Store', 'Google Play'], rows));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue