release acceptance matrix: tools/acceptance.ts runs every user-facing command from the packed npm tarball (npx --package=<tgz> on Node 20 / 22, bun x --bun after bun add <tgz>) in fresh temp folders with a fresh HOME, real piped stdin (n, EOF) and per-cell fake stores over HTTP (STOREBOUND_STORE_MOCK, loopback only); a cell passes only with the expected exit code and no crash text; report -> markdown matrix. Prompts go through stdinIsTTY (STOREBOUND_ASSUME_TTY drives them with piped stdin), STOREBOUND_DESKTOP_APP=none for the install prompt on a machine with the app. release.yml: required acceptance job matrix (Linux + Windows x node20/node22/bun) and report, the matrix attached to the release; ci.yml: the quick subset on Linux and Windows. Scan fixtures for React Native and Expo
This commit is contained in:
parent
ae681e3ecd
commit
f58e192001
26 changed files with 926 additions and 15 deletions
|
|
@ -20,6 +20,7 @@ import { confirm, need } from './lib/ctx';
|
|||
import { done, log, printJson, warn } from './lib/log';
|
||||
import { ascClient, EDITABLE, type J } from './apple/asc';
|
||||
import { playClient } from './play/client';
|
||||
import { stdinIsTTY } from './lib/tty';
|
||||
|
||||
const TAG = 'listing';
|
||||
|
||||
|
|
@ -143,7 +144,7 @@ async function set(ctx: Ctx): Promise<void> {
|
|||
if (a.has('json')) printJson({ ...p, dry, written: false });
|
||||
if (errors) throw new Error(`nothing sent: ${errors} error(s)`);
|
||||
if (dry || !p.changes.length) { done(TAG, dry ? 'dry run: nothing sent' : 'already the same on Google Play'); return; }
|
||||
if (process.stdin.isTTY && !(await confirm(ctx, `Change ${p.changes.length} field(s) of ${lang} on Google Play (one edit, committed)?`))) { warn(TAG, 'nothing sent'); return; }
|
||||
if (stdinIsTTY() && !(await confirm(ctx, `Change ${p.changes.length} field(s) of ${lang} on Google Play (one edit, committed)?`))) { warn(TAG, 'nothing sent'); return; }
|
||||
const { root } = ctx.loaded;
|
||||
const play = await playClient(root, need(config.play?.packageName, 'play.packageName'));
|
||||
const body: Record<string, string> = { language: lang };
|
||||
|
|
@ -173,7 +174,7 @@ async function set(ctx: Ctx): Promise<void> {
|
|||
if (p.refused) throw new Error(p.refused);
|
||||
if (errors) throw new Error(`nothing sent: ${errors} error(s)`);
|
||||
if (dry || !p.changes.length) { done(TAG, dry ? 'dry run: nothing sent' : 'already the same on the App Store'); return; }
|
||||
if (process.stdin.isTTY && !(await confirm(ctx, `Change ${p.changes.length} field(s) of ${lang} on App Store Connect?`))) { warn(TAG, 'nothing sent'); return; }
|
||||
if (stdinIsTTY() && !(await confirm(ctx, `Change ${p.changes.length} field(s) of ${lang} on App Store Connect?`))) { warn(TAG, 'nothing sent'); return; }
|
||||
const info = Object.fromEntries(p.changes.filter(c => (APPLE_INFO_FIELDS as readonly string[]).includes(c.field)).map(c => [c.field, c.to]));
|
||||
const ver = Object.fromEntries(p.changes.filter(c => (APPLE_VERSION_FIELDS as readonly string[]).includes(c.field)).map(c => [c.field, c.to]));
|
||||
if (Object.keys(info).length) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue